Pular para conteúdo

Sistemas Distribuídos

Um sistema distribuído coordena componentes que se comunicam por uma rede. Mensagens podem sofrer atraso, duplicação, reordenação ou perda; componentes podem falhar independentemente; e não existe um relógio global perfeitamente sincronizado.

Primeiro, o modelo de falhas

A garantia de um algoritmo depende das falhas presumidas: parada por falha, falha com recuperação, omissão, temporização ou comportamento bizantino. “Trata falhas” é uma afirmação vaga demais sem esse modelo.

Entrega e processamento

Rótulos como no máximo uma vez e pelo menos uma vez descrevem tentativas de entrega, não efeitos de negócio automáticos de ponta a ponta. Efeitos exatamente uma vez exigem estado coordenado ou processamento idempotente/deduplicado sob um limite definido.

Uma chave de idempotência deve identificar uma operação lógica, possuir um ciclo de vida e vincular-se aos parâmetros e ao resultado da operação. Repetir com uma nova chave impede a deduplicação.

Consistência

A linearizabilidade faz cada operação parecer atômica entre a invocação e a resposta. Garantias sequenciais, causais, eventuais e de sessão são modelos distintos. A consistência eventual, por si só, afirma que haverá convergência depois que as atualizações cessarem; não define a resolução de conflitos nem um limite de tempo útil.

O resultado CAP trata da consistência e da disponibilidade durante uma partição de rede. Ele não é uma instrução geral para escolher apenas duas propriedades durante a operação normal.

Tempo e ordenação

Use tempo monotônico para durações locais. Relógios de parede podem saltar e divergir entre máquinas. Relógios lógicos capturam propriedades de ordenação causal ou total sem fingir fornecer tempo físico perfeitamente sincronizado.

Fluxos confiáveis

Exercícios

  1. Explique por que um timeout no cliente não prova que o servidor falhou no commit.
  2. Projete um consumidor de mensagens idempotente.
  3. Compare a garantia de leitura das próprias escritas com a linearizabilidade.