Pular para o conteúdo

Conceitos

Leituras e escritas com quorum (N/R/W)

Intuição

Digamos que você guarda três cópias de um bilhete importante em três gavetas diferentes, para que perder o acesso a uma gaveta não faça perder o bilhete. Você poderia exigir que alguém consultasse as três gavetas antes de acreditar no que o bilhete diz, mas isso é lento e falha por completo se até uma gaveta emperrar. Em vez disso, você decide de antemão quantas gavetas precisam concordar antes de você confiar em uma leitura, e quantas precisam ser atualizadas antes de você considerar uma escrita "concluída" — você escolhe esses números, trocando um pouco de certeza por muita velocidade e resiliência a uma ou duas gavetas emperradas.

Como funciona

O Dynamo replica cada chave em N nós (a lista de preferência derivada do hashing consistente) e permite que os operadores ajustem de forma independente R, o número de réplicas que precisam responder a uma leitura, e W, o número que precisa confirmar uma escrita, sem exigir que todos os N participem de cada operação. Definir R+W maior que N produz quorums de leitura e escrita que se sobrepõem, o que torna provável que uma leitura toque ao menos uma réplica com a escrita mais recente e, assim, reduz a chance de devolver dados obsoletos; definir R+W igual ou menor que N favorece menor latência e maior disponibilidade ao custo de mais desatualização possível. O padrão de produção relatado pelo Dynamo é N=3, R=2, W=2. De forma crucial, uma escrita não exige que todos os N nós preferenciais estejam alcançáveis: se um deles está fora do ar, o Dynamo recorre a um "sloppy quorum", enviando a escrita para outro nó mais adiante no anel e marcando-a com uma dica (hint) que registra o nó a que ela realmente se destinava (hinted handoff); quando a réplica original se recupera, o nó com a dica encaminha os dados a ela. É isso que permite ao Dynamo continuar sempre aceitando escritas apesar de falhas de nós ou partições de rede, ao custo de réplicas temporariamente divergentes que outros mecanismos (read repair, anti-entropia) precisam reconciliar depois.

Na prática

Essa configurabilidade de N/R/W é o mecanismo que o Dynamo, o Cassandra, o Riak e o Voldemort expõem para que cada aplicação escolha, por operação, o seu próprio ponto no espectro entre disponibilidade e consistência — uma escrita de carrinho de compras pode favorecer R+W≤N para disponibilidade permanente, enquanto um caso de uso que não tolera dados obsoletos pode definir R+W>N. Recorra a quorums ajustáveis com sloppy quorum e hinted handoff sempre que um sistema precisar continuar aceitando escritas durante falhas parciais ou partições e puder tolerar resolver depois qualquer inconsistência resultante, em vez de ficar bloqueado esperando.

Use em um desenho

Pratique na escola de System Design os casos que dependem deste conceito.