-
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 #127 from ucudal/feature/distributed
Feature/distributed
- Loading branch information
Showing
16 changed files
with
646 additions
and
1 deletion.
There are no files selected for viewing
Empty file.
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,28 @@ | ||
```mermaid | ||
%%{ | ||
init: { | ||
'theme': 'base', | ||
'themeVariables': { | ||
'mainBkg': 'transparent', | ||
'primaryColor': 'transparent', | ||
'primaryTextColor': '#006EAF', | ||
'primaryBorderColor': '#006EAF', | ||
'lineColor': '#006EAF', | ||
'secondaryColor': '#006100', | ||
'fontFamily':'Helvetica', | ||
'fontSize':'8px' | ||
} | ||
} | ||
}%% | ||
sequenceDiagram | ||
Participant Client | ||
Participant Cache | ||
Participant Data store | ||
Client->>Cache: Petición de datos | ||
alt Datos en caché | ||
Cache->>Client: Datos pedidos | ||
else | ||
Cache->>Data store: Petición de datos | ||
Cache->>Client: Datos pedidos | ||
end | ||
``` |
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,66 @@ | ||
Con coreografía: | ||
|
||
```mermaid | ||
%%{ | ||
init: { | ||
'theme': 'base', | ||
'themeVariables': { | ||
'mainBkg': 'transparent', | ||
'primaryColor': 'transparent', | ||
'primaryTextColor': '#006EAF', | ||
'primaryBorderColor': '#006EAF', | ||
'lineColor': '#006EAF', | ||
'secondaryColor': '#006100', | ||
'fontFamily':'Helvetica', | ||
'fontSize':'8px' | ||
} | ||
} | ||
}%% | ||
sequenceDiagram | ||
Participant Client | ||
Participant Orchestrator | ||
Participant Service A | ||
Participant Service B | ||
Client->>Orchestrator: Pedido | ||
Orchestrator->>Service A: Pedido para A | ||
Service A-->>Orchestrator: Respuesta de A | ||
Orchestrator->>Service B: Pedido para B | ||
Service B-->>Orchestrator: Respuesta de B | ||
Orchestrator-->>Client: Respuesta | ||
``` | ||
|
||
Con orquestación: | ||
|
||
```mermaid | ||
%%{ | ||
init: { | ||
'theme': 'base', | ||
'themeVariables': { | ||
'mainBkg': 'transparent', | ||
'primaryColor': 'transparent', | ||
'primaryTextColor': '#006EAF', | ||
'primaryBorderColor': '#006EAF', | ||
'lineColor': '#006EAF', | ||
'secondaryColor': '#006100', | ||
'fontFamily':'Helvetica', | ||
'fontSize':'8px' | ||
} | ||
} | ||
}%% | ||
sequenceDiagram | ||
Participant Client | ||
Participant Orchestrator | ||
Participant Service A | ||
Participant Service B | ||
Participant Service C | ||
Client->>Orchestrator: Pedido | ||
Orchestrator->>Service A: Pedido para A | ||
Service A-->>Orchestrator: Respuesta de A | ||
Orchestrator->>Service B: Pedido para B | ||
Service B-->>Orchestrator: Respuesta de B | ||
Orchestrator->>Service C: Pedido para C | ||
Service C-->Orchestrator: Respuesta de C | ||
Orchestrator-->>Client: Respuesta | ||
``` |
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,40 @@ | ||
```mermaid | ||
%%{ | ||
init: { | ||
'theme': 'base', | ||
'themeVariables': { | ||
'mainBkg': 'transparent', | ||
'primaryColor': 'transparent', | ||
'primaryTextColor': '#006EAF', | ||
'primaryBorderColor': '#006EAF', | ||
'lineColor': '#006EAF', | ||
'secondaryColor': '#006EAF', | ||
'edgeLabelBackground': 'transparent', | ||
'fontFamily':'Helvetica', | ||
'fontSize':'12px', | ||
'noteBkgColor':'transparent', | ||
'noteTextColor': '#006EAF', | ||
'noteBorderColor':'#006EAF' | ||
} | ||
} | ||
}%% | ||
stateDiagram-v2 | ||
[*] --> Closed | ||
Closed --> Open: Umbral de fallos alcanzado | ||
Open --> Half—open: Tiempo de espera expirado | ||
Half—open --> Open: Fallo en la operación | ||
Half—open --> Closed: Umbral de éxitos alcanzado | ||
note left of Closed | ||
on entry: restablecer contador de errores | ||
do: si la operación tiene éxito devolver resultado; sino incrementar contador de errores y devolver error | ||
end note | ||
note right of Half—open | ||
on entry: restablecer contador de éxito | ||
do: si la operación tiene éxito incrementar contador de éxito y devolver resultado; sino devolver error | ||
end note | ||
note left of Open | ||
on entry: iniciar temporizador | ||
do: retornar error | ||
end note | ||
``` |
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,34 @@ | ||
```mermaid | ||
%%{ | ||
init: { | ||
'theme': 'base', | ||
'themeVariables': { | ||
'mainBkg': 'transparent', | ||
'primaryColor': 'transparent', | ||
'primaryTextColor': '#006EAF', | ||
'primaryBorderColor': '#006EAF', | ||
'lineColor': '#006EAF', | ||
'secondaryColor': '#006100', | ||
'fontFamily':'Helvetica', | ||
'fontSize':'8px' | ||
} | ||
} | ||
}%% | ||
sequenceDiagram | ||
Participant Client | ||
Participant Service | ||
Participant Queue | ||
Participant Request processor | ||
Client->>Service: Pedido | ||
Service->>Service: [opt] Autenticar, Autorizar, Validar | ||
Service->>Service: Generar identificador o URI | ||
Service->>Queue: Almacenar y reenviar pedido | ||
Service-->>Client: Acuse de recibo | ||
Request processor->>Queue: Obtener pedido | ||
Queue-->>Request processor: Pedido | ||
Request processor->>Request processor: Procesar pedido | ||
``` |
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,49 @@ | ||
|
||
# 2 Técnicas y herramientas | ||
|
||
## 2.9 Patrones de arquitectura | ||
|
||
### Request/Response | ||
|
||
> ![](/assets/question.svg)<span style="color:#0969DA"> Problema</span></br> | ||
> ¿Cuál es la forma más simple para que un servicio procese un pedido y provea | ||
> un resultado? | ||
> ![](/assets/solution.svg)<span style="color:#0969DA"> Solución</span></br> | ||
> Procesar los pedidos cuando son recibidos y retornar los resultados en la | ||
> misma conexión con el cliente | ||
Este documento está basado en [^1]. | ||
|
||
[^1]: Daigneau, R.; Robinson, I. (2012). Service Design Patterns. Addison-Wesley. | ||
|
||
```mermaid | ||
%%{ | ||
init: { | ||
'theme': 'base', | ||
'themeVariables': { | ||
'mainBkg': 'transparent', | ||
'primaryColor': 'transparent', | ||
'primaryTextColor': '#006EAF', | ||
'primaryBorderColor': '#006EAF', | ||
'lineColor': '#006EAF', | ||
'secondaryColor': '#006100', | ||
'fontFamily':'Helvetica', | ||
'fontSize':'8px', | ||
'noteBkgColor':'transparent', | ||
'noteTextColor':'#006EAF' | ||
} | ||
} | ||
}%% | ||
sequenceDiagram | ||
Participant Client | ||
Participant Service | ||
rect rgba(0, 0, 0, 0.5) | ||
note over Client, Service: Conexión | ||
Client->>Service: Pedido | ||
Service-->>Client: Respuesta | ||
end | ||
``` | ||
|
||
|
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,25 @@ | ||
```mermaid | ||
%%{ | ||
init: { | ||
'theme': 'base', | ||
'themeVariables': { | ||
'mainBkg': 'transparent', | ||
'primaryColor': 'transparent', | ||
'primaryTextColor': '#006EAF', | ||
'primaryBorderColor': '#006EAF', | ||
'lineColor': '#006EAF', | ||
'secondaryColor': '#006EAF', | ||
'edgeLabelBackground': 'transparent', | ||
'fontFamily':'Helvetica', | ||
'fontSize':'12px' | ||
} | ||
} | ||
}%% | ||
sequenceDiagram | ||
loop while !200 & retrCount < MAX_RETRIES | ||
Client->>+Service: Request | ||
Service-->>Client: 500 | ||
Client->>Client: retryCount++ | ||
Client->>Client: Delay | ||
end | ||
``` |
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,33 @@ | ||
```mermaid | ||
%%{ | ||
init: { | ||
'theme': 'base', | ||
'themeVariables': { | ||
'mainBkg': 'transparent', | ||
'primaryColor': 'transparent', | ||
'primaryTextColor': '#006EAF', | ||
'primaryBorderColor': '#006EAF', | ||
'lineColor': '#006EAF', | ||
'secondaryColor': '#006100', | ||
'fontFamily':'Helvetica', | ||
'fontSize':'8px' | ||
} | ||
} | ||
}%% | ||
sequenceDiagram | ||
Participant Client | ||
Participant Message Broker | ||
Participant Service A | ||
Participant Service B | ||
Participant Service C | ||
Client->>Message Broker: Pedido | ||
Message Broker->>Service A: Pedido para A | ||
Service A->>Message Broker: Pedido para B | ||
Message Broker->>Service B: Pedido para B | ||
Service B->>Message Broker: Pedido para C | ||
Message Broker->>Service C: Pedido para C | ||
Service C->>Message Broker: Respuesta | ||
Message Broker-->>Client: Respuesta | ||
``` |
Empty file.
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
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,75 @@ | ||
# 4 Conceptos | ||
|
||
## ACID | ||
|
||
ACID es un [acrónimo](https://dle.rae.es/acrónimo) que referencia las cuatro | ||
propiedades de una transacción: atomicidad, consistencia, aislamiento | ||
—*isolation* en inglés— y durabilidad[^1]. | ||
|
||
[^1]: Haerder, T.; Reuter, A. (1983). Principles of Transaction-Oriented | ||
Database Recovery. ACM Computing Surveys (CSUR), 15(4). Disponible | ||
[aquí](https://dl.acm.org/doi/10.1145/289.291). | ||
|
||
Compáralo con [BASE](./4_BASE.md). | ||
|
||
La transacción básicamente refleja la idea de que las actividades de un usuario | ||
en particular estén aisladas de todas las demás actividades concurrentes —de | ||
otros usuarios u otros procesos—, pero restringe el grado de aislamiento y la | ||
duración de la transacción. Típicamente una transacción es una secuencia corta | ||
de interacciones con la base de datos, tales como encontrar o modificar un | ||
elemento, que representa una actividad significativa en el contexto del | ||
usuario[^1]. | ||
|
||
### Atomicidad | ||
|
||
Las interacciones en una transacción deben ser indivisibles: o bien todas | ||
se reflejan de forma apropiada en los datos, o bien no ocurre ningún cambio. | ||
Además, el usuario debe saber qué ha ocurrido, en qué estado ha quedado. | ||
|
||
La atomicidad garantiza que una transacción se trate como una sola unidad de | ||
trabajo. Puede completarse completamente o no completarse en absoluto como si | ||
nada hubiera ocurrido. En caso de que ocurra una falla durante una transacción, | ||
se revierte —*rollback*— toda la transacción. | ||
|
||
### Consistencia | ||
|
||
Cada transacción que se completa de forma exitosa produce solamente resultados | ||
correctos, es decir, se cumplen todas las reglas que se hayan definido. | ||
|
||
La consistencia garantiza que una transacción mueve el conjunto de datos de un | ||
estado válido a otro estado también válido, lo que garantiza que se cumplan | ||
todas las reglas establecidas sobre los datos —por ejemplo la integridad | ||
referencial—. | ||
|
||
### Aislamiento | ||
|
||
Los eventos en una transacción deben quedar ocultos a otras transacciones que | ||
estén ejecutándose de forma concurrente. | ||
|
||
El aislamiento garantiza que las transacciones se ejecuten de forma | ||
independiente unas de otras. Los distintos motores gestionan el aislamiento a | ||
través de niveles de aislamiento —por ejemplo, [read | ||
committed](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-READ-COMMITTED), | ||
[repeatable | ||
read](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-REPEATABLE-READ),o | ||
[serializable](https://www.postgresql.org/docs/current/transaction-iso.html#XACT-SERIALIZABLE)) | ||
para evitar problemas de concurrencia, como lecturas sucias o lecturas fantasma. | ||
|
||
### Durabilidad | ||
|
||
Una vez que una transacción se ha completado de forma exitosa, sus cambios son | ||
permanentes, aún en el caso de un fallo del sistema. | ||
|
||
### ACID más allá de bases de datos | ||
|
||
Aunque el concepto surgió inicialmente en el contexto de bases de datos, hoy se | ||
utiliza en otros contextos en los que haya manipulación y acceso a datos o | ||
eventos. | ||
|
||
Las plataformas de colas de mensajes garantizan la durabilidad persistiendo los mensajes | ||
recibidos hasta que sean procesados y removidos de la cola. La atomicidad se | ||
logra asegurando que los mensajes se entregan por completo o no se entregan; si | ||
ocurre un error durante la transmisión de un mensaje, no se procesan mensajes | ||
parcialmente recibidos. En algunos casos el aislamiento se logra utilizando | ||
tópicos o múltiples colas, para asegurar que consumidores concurrentes no | ||
interfieren entre ellos. |
Oops, something went wrong.