O que são Sistemas Distribuídos?
Imagine que você é dono de uma única padaria. Tudo acontece ali: o pão é assado, vendido, o caixa fecha, o estoque é controlado. Se a luz cair, tudo para. Se o forno quebrar, sem pão. Mas é simples: tudo está num lugar só.
Agora imagine que você virou uma rede com 50 padarias espalhadas pela cidade. Cada uma tem seu forno, seu caixa, seu estoque. Elas precisam se comunicar:
- A central manda novas receitas para todas.
- Cada loja reporta vendas.
- Se uma loja fica sem farinha, pede para outra.
- Promoções precisam ser coordenadas.
Isso é um sistema distribuído: vários computadores (ou serviços) trabalhando juntos como se fossem um só, conectados por uma rede.
Por que Sistemas Distribuídos são Difíceis?
Voltando à analogia da rede de padarias: o que pode dar errado quando você tem 50 lojas?
Os famosos 8 enganos dos sistemas distribuídos (Peter Deutsch) são coisas que parecem verdade mas não são:
| Engano | Realidade |
|---|---|
| 1. A rede é confiável | Pacotes se perdem, conexões caem. |
| 2. A latência é zero | Toda chamada na rede tem custo de tempo. |
| 3. A banda é infinita | Tem limite, e ele estoura em horários de pico. |
| 4. A rede é segura | Ataques, sniffing, MITM existem. |
| 5. A topologia não muda | Servidores caem, sobem, mudam de IP. |
| 6. Existe um administrador | Cada parte do sistema pode ter um dono diferente. |
| 7. O custo de transporte é zero | Serializar, enviar, deserializar consome CPU e dinheiro. |
| 8. A rede é homogênea | Diferentes redes, latências, protocolos, versões. |
Programar para um único processo é jogar xadrez. Programar para um sistema distribuído é jogar xadrez às escuras, com o tabuleiro tremendo, e algumas peças explodindo aleatoriamente.
Os principais problemas que vamos estudar:
- Falhas parciais: parte do sistema funciona, parte não. Como saber qual?
- Concorrência: dois nós atualizando a mesma coisa ao mesmo tempo.
- Consistência: todos os nós veem o mesmo dado?
- Ordem: a ordem em que as coisas aconteceram é a mesma em todos os lugares?