<style>
.reveal {
font-size: 30px;
}
</style>
# Tipos de comunicações entre Sistemas Distribuídos
### Discussão dos trade-offs entre microservices
***
## Daniela Akagui
---
## O Que?
## Porque?
## Como?
---
## Acoplamento entre sistemas distribuídos
- Alteração que afeta outras aplicações
- Acoplamento estático : os, frameworks, libraries
- Acoplamento dinâmico : comunicação entre serviços
---
## O que são trade-offs?
1. Resiliência
2. Confiabilidade
3. Escalabilidade
4. Segurança
5. Disponibilidade
6. Complexidade
7. Nível de Acoplamento
8. Etc..
---
## Sync vs Async
1. Non blocking vs blocking
---
## Sync vs Async
<img src="https://i.imgur.com/eK73rZN.jpg" alt="drawing" style="width:600px;"/>
---
## Sync vs Async
<img src="https://i.imgur.com/fOp5QIq.jpg" alt="drawing" style="width:700px;"/>
---
## Sync trade-offs
- **Prós**
- Fácil de criar operações transacionais
- Fácil de implementar
- **Cons**
- Dependência nas chamadas
- Limita sistemas distribuídos
---
## Async trade-offs
- **Prós**
- Sistemas altamente desacoplados
- Mais opções para melhorar performance
- **Cons**
- Dífícil de implementar
- Error handling
- BASE (Basic Availability, Soft state, and Eventual consistency) e não ACID (Atomicity, Consistency, Isolation, Durability)
---
## Atomic vs Eventual consistecy
<img src="https://i.imgur.com/BTNH3ct.jpg" alt="drawing" style="width:700px;"/>
---
## Orchestration vs Choreography
<img src="https://i.imgur.com/iv6MuMa.jpg" alt="drawing" style="width:700px;"/>
---
## Orchestration vs Choreography
<img src="https://i.imgur.com/P5GzAyx.jpg" alt="drawing" style="width:700px;"/>
---
## Pontos de acoplamento
<img src="https://i.imgur.com/8osSFJj.png" alt="drawing" style="width:600px;"/>
---
## Exemplo de análise de trade-offs
<img src="https://i.imgur.com/a5NzMqn.png" alt="drawing" style="width:700px;"/>
---
## Considerações
1. Rest pode ser async?
2. O pior cenário é ter um sistema async, atômico e orquestrado
3. O melhor jeito de implementar eventual consistency é com event based sync
4. Contrato também é acoplamento dinâmico ([fitness function](https://docs.pact.io/))
5. Versionamento também é acoplamento (versionless)
6. Data replication também pode ser acoplamento (config data)
7. Se o fluxo é muito complexo prefira orquestração
---
## Referência
Communication Styles for Distributed Architectures and Microservices by Neal Ford
{"metaMigratedAt":"2023-06-16T09:49:10.617Z","metaMigratedFrom":"YAML","title":"Tipos de comunicações entre Sistemas Distribuídos","breaks":false,"slideOptions":"{\"allottedMinutes\":5}","contributors":"[{\"id\":\"7c56ba17-5ea0-471b-b709-d1f854c43730\",\"add\":5772,\"del\":3250}]"}