Skip to content

Commit

Permalink
Merge pull request #69 from ucudal/feature/architecture
Browse files Browse the repository at this point in the history
Plantillas de arquitectura
  • Loading branch information
fmachadopiriz authored Jul 4, 2024
2 parents 934e7a0 + 5966504 commit 90758de
Show file tree
Hide file tree
Showing 32 changed files with 1,726 additions and 0 deletions.
32 changes: 32 additions & 0 deletions 3_Plantillas/3_10_Pipes_and_Filters_Architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Plantillas

## 3.10 Estilo de arquitectura tuberías y filtros

Esta es la plantilla para un estilo de arquitectura tuberías y filtros o *pipes
and filters*; este es un estilo de arquitectura monolítica.

Esta plantilla está basada en [^1].

Tiene entidades independientes llamadas filtros —*filters*— que realizan
transformaciones en los datos y procesan la entrada que reciben, y tuberías
*pipes*— que sirven como conectores para el flujo de datos que se está
transformando. Transforma datos, desde la entrada hasta la salida. Es deseable
crear estas partes como componentes independientes y reutilizables.

> [!NOTE]
> En esta plantilla aparecen componentes de ejemplo estereotipados; en
> un diagrama de arquitectura deberían aparecer los componentes propios del
> proyecto, usando estos mismos estereotipos.
La figura 1, a continuación, muestra un ejemplo de cada uno de los cuatro tipos
típicos de filtros, usando los estereotipos `≪producer≫`, `≪transformer≫`,
`≪tester≫` y `≪consumer≫` para identificarlos, con sus respectivas tuberías
conectando esos filtros.

![Estilo pipes and filters
architecture](/diagrams/Architecture_Pipes_And_Filters.svg)

*Figura 1: Estilo pipes and filters architecture.*

[^1]: Richards, M. & Ford, N. (2020). Fundamentals of Software Architecture-An
Engineering Approach. O'Reilly.
27 changes: 27 additions & 0 deletions 3_Plantillas/3_11_Microkernel_Architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# 3 Plantillas

## 3.11 Estilo de arquitectura micro kernel

Esta es la plantilla para un estilo de arquitectura micronúcleo o *microkernel
architecture*; esta es un estilo de arquitectura monolítica.

Esta plantilla está basada en [^1].

Este estilo de arquitectura es adecuado para aplicaciones basadas en productos
—empaquetadas y disponibles para su descarga e instalación como una única
implementación monolítica, generalmente instalada en el sitio del cliente—.

> [!NOTE]
> En esta plantilla aparecen componentes de ejemplo estereotipados; en
> un diagrama de arquitectura deberían aparecer los componentes propios del
> proyecto, usando estos mismos estereotipos.
La figura 1, a continuación, muestra un ejemplo con el núcleo del sistema con el
estereotipo `≪core≫` y los complementos con el estereotipo `≪plugin≫`.

![Estilo microkernel architecture](/diagrams/Architecture_Microkernel.svg)

*Figura 1: Estilo microkernel architecture.*

[^1]: Richards, M. & Ford, N. (2020). Fundamentals of Software Architecture-An
Engineering Approach. O'Reilly.
29 changes: 29 additions & 0 deletions 3_Plantillas/3_12_Service_Based_Architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 3 Plantillas

## 3.12 Estilo de arquitectura basada en servicios

Esta es la plantilla para un estilo de arquitectura basada en servicios o
*service-based architecture*; este es un estilo de arquitectura distribuida.

Esta plantilla está basada en [^1].

Aunque la arquitectura basada en servicios es una arquitectura distribuida, no
tiene el mismo nivel de complejidad y costo que otras arquitecturas
distribuidas, como los microservicios o la arquitectura orientada a eventos.

> [!NOTE]
> En esta plantilla no aparecen los componentes en cada paquete por simplicidad;
> en un diagrama de arquitectura deberían aparecer, además de los paquetes, los
> componentes en ellos.
La figura 1, a continuación, muestra la interfaz de usuario, los servicios, y la
base de datos, desplegados en unidades de despliegue independientes.

![Estilo service-based architecture](/diagrams/Architecture_Service_Based.svg)

*Figura 1: Estilo service-based architecture.*

<!-- TODO: Agregar las variantes que aparecen en la referencia abajo -->

[^1]: Richards, M. & Ford, N. (2020). Fundamentals of Software Architecture-An
Engineering Approach. O'Reilly.
31 changes: 31 additions & 0 deletions 3_Plantillas/3_13_Event_Driven_Architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# 3 Plantillas

## 3.13 Estilo de arquitectura dirigida por eventos

Esta es la plantilla para un estilo de arquitectura dirigida por eventos o
*event-driven architecture*; este es un estilo de arquitectura distribuida.

Esta plantilla está basada en [^1].

El estilo de arquitectura dirigida por eventos es ampliamente utilizado para
crear aplicaciones altamente escalables y de alto rendimiento. Se basa en
componentes de procesamiento de eventos que operan de manera independiente y
procesan eventos de forma asíncrona.

> [!NOTE]
> En esta plantilla aparecen componentes de ejemplo estereotipados; en
> un diagrama de arquitectura deberían aparecer los componentes propios del
> proyecto, usando estos mismos estereotipos.
La figura 1, a continuación, muestra un ejemplo con el orquestador que recibe
los eventos con el estereotipo `≪orchestrator≫` y varios procesadores de eventos
con el estereotipo `≪processor≫`.

![Estilo event-driven architecture](/diagrams/Architecture_Event_Driven.svg)

*Figura 1: Estilo event-driven architecture.*

<!-- TODO: Agregar las variantes y ejemplos que aparecen en la referencia abajo -->

[^1]: Richards, M. & Ford, N. (2020). Fundamentals of Software Architecture-An
Engineering Approach. O'Reilly.
70 changes: 70 additions & 0 deletions 3_Plantillas/3_14_Space_Based_Architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# 3 Plantillas

## 3.14 Estilo de arquitectura basada en espacios

Esta es la plantilla para un estilo de arquitectura basada en espacios o
*space-based architecture*; este es un estilo de arquitectura distribuida.

Esta plantilla está basada en [^1].

Con este estilo de arquitectura se logra alta escalabilidad, elasticidad y
rendimiento al eliminar la base de datos central como limitación sincrónica en
el sistema. En su lugar, se utilizan redes replicadas de datos en memoria. Los
datos de la aplicación se mantienen en memoria y se replican entre las unidades
de procesamiento activas.

Las actualizaciones de datos se envían de manera asíncrona a la base de datos a
través de colas persistentes. Las unidades de procesamiento se inician y
detienen según la carga del usuario, logrando una escalabilidad variable.

Al no depender de una base de datos central en el procesamiento transaccional
estándar, se elimina el cuello de botella de la base de datos, permitiendo una
escalabilidad casi infinita en la aplicación.

> [!NOTE]
> En esta plantilla aparecen componentes de ejemplo estereotipados; en
> un diagrama de arquitectura deberían aparecer los componentes propios del
> proyecto, usando estos mismos estereotipos.
En la figura 1, a continuación, aparecen los siguientes elementos:

* `Processing Units` son nodos que tienen la lógica de la aplicación que en la
plantilla se muestra como el componente `Application Logic` estereotipado como
`≪service≫`; además de la lógica de la aplicación estos nodos contienen datos
en memoria en el componente `In Memory Data Grid` estereotipado como `≪cache≫`
y un motor de replicación de datos `Data Replication Engine` estereotipado
como `≪engine≫`. Estos nodos pueden ser iniciados a demanda para escalar la
aplicación.

* `Virtualized Middleware` es el nodo que alberga la infraestructura que
controla varios aspectos de esta arquitectura: el componente `Messaging Grid`
estereotipado como `≪proxy≫` recibe los eventos y los direcciona al nodo de
procesamiento adecuado; además maneja la sesión. El componente `Data Grid`
estereotipado como `≪cache≫` se encarga de sincronizar los componentes `In
Memory Data Grid` de los nodos de procesamiento, en caso de que esos caché no
se sincronicen entre sí —por eso es opcional—. El componente `Processing Grid`
estereotipado como `≪orchestrator≫` es encargado de orquestar el procesamiento
de eventos entre varios nodos de procesamiento si fuera necesario —por eso es
opcional—. El componente `Deployment Manager` estereotipado como `≪agent≫`
monitorea los nodos de procesamiento e inicia —o detiene— instancias de estos
nodos si fuera necesario.

* El componente `Write Data Pump` es una cola —por eso está estereotipado con
`≪queue≫`— utilizada como buffer para enviar pedidos de escritura al
componente `Data Writer`; este último es el encargado de escribir realmente en
la base de datos.

* El componente `Read Request` es también una cola —por eso también está
estereotipado con `≪queue≫`— utilizada como buffer para recibir pedidos de
lectura consumidos por el componente `Data Reader`; este último es el
encargado de leer desde la base de datos y poner el resultado en otra cola
`Reverse Data Pump`.

![Estilo space-based architecture](/diagrams/Architecture_Space_Based.svg)

*Figura 1: Estilo space-based architecture.*

<!-- TODO: Agregar las variantes y ejemplos que aparecen en la referencia abajo -->

[^1]: Richards, M. & Ford, N. (2020). Fundamentals of Software Architecture-An
Engineering Approach. O'Reilly.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# 3 Plantillas

## 3.15 Estilo de arquitectura orientada a servicios dirigida por la orquestación

Esta es la plantilla para un estilo de arquitectura orientada a servicios
dirigida por la orquestación u *orchestration-driven service-oriented
architecture*; este es un estilo de arquitectura distribuida.

Esta plantilla está basada en [^1].

Este estilo de arquitectura orientada a servicios surgió justo cuando las
empresas estaban convirtiéndose en grandes corporaciones a finales de la década
de 1990: fusionándose con empresas más pequeñas, creciendo a un ritmo
vertiginoso y requiriendo de soluciones tecnológicas más sofisticadas para
acomodar este crecimiento.

![Estilo orchestration-driven
service-oriented](/diagrams/Architecture_Orchestration_Driven_Service_Oriented.svg)

*Figura 1: Estilo orchestration-driven service-oriented architecture.*

[^1]: Richards, M. & Ford, N. (2020). Fundamentals of Software Architecture-An
Engineering Approach. O'Reilly.
31 changes: 31 additions & 0 deletions 3_Plantillas/3_16_Microservice_Architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# 3 Plantillas

## 3.16 Estilo de arquitectura de microservicios

Esta es la plantilla para un estilo de arquitectura de microservicios o
*microservices architecture*; este es un estilo de arquitectura distribuida.

Esta plantilla está basada en [^1].

En este estilo de arquitectura cada servicio opera como una unidad separada con
su propia base de datos y demás recursos. Estos servicios se comunican entre sí
a través de API bien definidas, generalmente mediante protocolos ligeros como
HTTP o colas de mensajes.

Esta comunicación desacoplada permite que los servicios evolucionen y escalen de
manera independiente sin afectar a la aplicación completa.

![Estilo microservices architecture](/diagrams/Architecture_Microservices.svg)

*Figura 1: Estilo microservices architecture.*

Cada servicio suele implementar el patrón
[Sidecar](https://learn.microsoft.com/en-us/azure/architecture/patterns/sidecar)
tal como se muestra en la figura 2, a continuación:

![Sidecar](/diagrams/Architecture_Microservices_Sidecar.svg)

*Figura 2: Sidecar.*

[^1]: Richards, M. & Ford, N. (2020). Fundamentals of Software Architecture-An
Engineering Approach. O'Reilly.
74 changes: 74 additions & 0 deletions 3_Plantillas/3_9_Layered_Architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# 3 Plantillas

## 3.9 Estilo de arquitectura en capas

Esta es la plantilla para un estilo de arquitectura en capas o *layered
architecture*; este es un estilo de arquitectura monolítica.

Esta plantilla está basada en [^1].

El estilo de arquitectura en capas es uno de los estilos de arquitectura más
comunes. Es la elección predeterminada para muchas aplicaciones debido a su
simplicidad, familiaridad y bajo costo.

> [!NOTE]
> En esta plantilla no aparecen los componentes en cada capa por simplicidad; en
> un diagrama de arquitectura deberían aparecer, además de las capas, los
> componentes en ellas.
La figura 1, a continuación, combina las capas `Presentation Layer`, `Business
Layer`, `Persistence Layer` y `Database Layer` en una sola unidad de despliegue;
por ejemplo, una aplicación de escritorio con una base de datos embebida o en
memoria.

![Plantilla del estilo layered architecture desplegada en una sola
unidad de despliegue](/diagrams/Architecture_Layered.svg)

*Figura 1: Plantilla del estilo layered architecture desplegada en una sola unidad de
despliegue.*

La figura 2, a continuación, muestra una variante de despliegue donde la capa
`Database Layer` está físicamente separada en una unidad de despliegue diferente
de la del resto de las capas; por ejemplo, una aplicación de escritorio que usa
un motor de base de datos local.

![Estilo layered architecture con la base de datos desplegada en una unidad de
despliegue físicamente separada del
resto](/diagrams/Architecture_Layered_Variation_1.svg)

*Figura 2: Estilo layered architecture con la base de datos desplegada en una
unidad físicamente separada del resto.*

La figura 3, a continuación, muestra otra variante de despliegue, donde la capa
`Presentation Layer` está físicamente separada del resto en una unidad de
despliegue diferente; también está separada del resto la capa `Database Layer`; por
ejemplo, una aplicación de escritorio implementada con un cliente delgado,
librerías, y un motor de base de datos local.

![Estilo layered architecture con la capa de presentación y la de base de datos
desplegadas en una unidad de despliegue físicamente separada del
resto](/diagrams/Architecture_Layered_Variation_2.svg)

*Figura 3: Estilo layered architecture con la capa de presentación y la de base
de datos desplegadas en una unidad de despliegue físicamente separada del
resto*.

La figura 4, a continuación, muestra una variante de la arquitectura en capas
donde:

* Las capas pueden ser abiertas o cerradas; si son abiertas las capas superiores
pueden comunicarse directamente con las inferiores —"pasan" a través de la
capa abierta—, mientras que por el contrario, si son cerradas, las capas
superiores se comunican solamente con la capa inmediata.
* Se agrega una capa `Services Layer` abierta que expone componentes
compartidos para la capa `Business Layer` pero ocultos para la capa
`Presentation Layer`.

![Estilo layered architecture con una capa `Service Layer` abierta y
cerradas](/diagrams/Architecture_Layered_Variation_3.svg)

*Figura 4: Estilo layered architecture con una capa `Service Layer` abierta y
las demás cerradas.*

[^1]: Richards, M. & Ford, N. (2020). Fundamentals of Software Architecture-An
Engineering Approach. O'Reilly.
Loading

0 comments on commit 90758de

Please sign in to comment.