-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #69 from ucudal/feature/architecture
Plantillas de arquitectura
- Loading branch information
Showing
32 changed files
with
1,726 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
23 changes: 23 additions & 0 deletions
23
3_Plantillas/3_15_Orchestration_Driven_Service_Oriented_Architecture.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
Oops, something went wrong.