Conceitos
Sloppy quorum e hinted handoff
Intuição
Imagine que você entrega uma encomenda a três vizinhos de confiança, mas um deles viajou. Em vez de recusar a entrega e deixar o cliente esperando, você deixa o pacote com outro vizinho, junto com um bilhete dizendo 'isto é do vizinho que viajou'. Quando o viajante volta, quem guardou o pacote o entrega a ele, e a entrega nunca precisou parar; o preço é que, enquanto isso, o pacote não está com quem você esperava.
Como funciona
Em um sistema como o Dynamo, cada chave tem uma lista de preferência, definida pela posição da chave no anel de hashing consistente, cujos N primeiros nós guardam as réplicas (a lista tem mais de N nós para cobrir falhas). Um quórum estrito exige que W dos N primeiros nós da lista confirmem a escrita e que R deles respondam à leitura, e com R+W>N os conjuntos de leitura e escrita se sobrepõem. No sloppy quorum, o Dynamo usa os N primeiros nós saudáveis da lista, que podem não ser os N primeiros, em vez de exigir que os N preferidos estejam alcançáveis: se um deles está fora, a escrita vai para outro nó mais adiante no anel, que passa a contar para o quórum. Esse nó substituto guarda o dado com uma dica (hint) que registra qual nó era o destinatário original, e é isso que se chama hinted handoff. Quando o nó original se recupera, o substituto lhe repassa os dados, e é assim que a falha temporária de uma réplica ou da rede deixa de bloquear a escrita. O custo é que o quórum deixa de ser formado só pelos N primeiros nós da lista: com R+W>N, a sobreposição entre leitura e escrita fica garantida se ambas usarem os mesmos N nós, e o substituto pode não estar na leitura seguinte. Por isso o sistema depende de mecanismos de reconciliação, como vector clocks para detectar versões em conflito, que são devolvidas à aplicação para reconciliar, e read repair para realinhar réplicas, e escolhe ser sempre gravável em vez de sempre consistente.
Na prática
Você escolheria esse desenho quando recusar uma escrita custa mais do que ler um dado um pouco defasado, como no carrinho de compras, exemplo que o paper do Dynamo usa, aceitando que a aplicação trate versões divergentes. O Cassandra, cujo paper adota a terminologia do Dynamo (lista de preferência), replica cada chave em N nós do anel e, segundo o paper, relaxa as exigências de quórum diante de falhas de nó e de partições de rede; o detalhe desse relaxamento via hinted handoff vem de fontes técnicas secundárias, não do paper. Em contrapartida, se a aplicação não tolera ler dados defasados, prefira quórum estrito com R+W>N e aceite recusar escritas quando menos de W dos N primeiros nós da lista estão alcançáveis.
Use em um desenho
Pratique na escola de System Design os casos que dependem deste conceito.