Skip to content

Commit

Permalink
Merge pull request #127 from ucudal/feature/distributed
Browse files Browse the repository at this point in the history
Feature/distributed
  • Loading branch information
fmachadopiriz authored Dec 24, 2024
2 parents dd76728 + c3fe4cb commit 7393894
Show file tree
Hide file tree
Showing 16 changed files with 646 additions and 1 deletion.
Empty file.
28 changes: 28 additions & 0 deletions 2_Tecnicas_y_herramientas/2_9_Cache_aside.md
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
```
66 changes: 66 additions & 0 deletions 2_Tecnicas_y_herramientas/2_9_Choreography.md
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
```
40 changes: 40 additions & 0 deletions 2_Tecnicas_y_herramientas/2_9_Circuit_breaker.md
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
```
34 changes: 34 additions & 0 deletions 2_Tecnicas_y_herramientas/2_9_Request_Acknowledge.md
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
```
49 changes: 49 additions & 0 deletions 2_Tecnicas_y_herramientas/2_9_Request_Response.md
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
```


25 changes: 25 additions & 0 deletions 2_Tecnicas_y_herramientas/2_9_Retry.md
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
```
33 changes: 33 additions & 0 deletions 2_Tecnicas_y_herramientas/2_9_Saga.md
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.
6 changes: 6 additions & 0 deletions 4_Conceptos/4_.Conceptos.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# 4 Conceptos

## [ACID](./4_ACID.md)

## [Acoplamiento](./4_Acoplamiento.md)

## [ADR](./4_ADR.md)
Expand All @@ -8,8 +10,12 @@

## [Atributos de calidad](./4_Atributos_de_calidad.md)

## [BASE](./4_BASE.md)

## [Calidad de software](./4_Calidad_de_software.md)

## [CAP](./4_CAP.md)

## [Características arquitectónicas](./4_Caracteristicas_arquitectonicas.md)

## [Caso de uso del negocio](./4_Caso_de_uso_del_negocio.md)
Expand Down
75 changes: 75 additions & 0 deletions 4_Conceptos/4_ACID.md
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.
Loading

0 comments on commit 7393894

Please sign in to comment.