Existem situações em que você gostaria de ter:
- As garantias de integridade de dados de transações serializáveis.
- Os dados podem ser atualizados pelos usuários globalmente.
- Os dados podem ser atualizados com baixa latência.
Infelizmente, a combinação de todos os itens acima não é fisicamente possível. Você será limitado pela velocidade da luz.
Em vez disso, você precisa considerar suas necessidades exatas. Para alguns dados, a precisão limitada é boa o suficiente. Considere o contador de visualizações em um vídeo do YouTube. A maioria das pessoas não se importa se o contador de visualizações estiver temporariamente desligado. Se as visualizações que aconteceram 10 segundos atrás no outro lado do mundo ainda não estiverem incluídas, mas as exibições que ocorreram há 5 segundos mais próximas estão incluídas, elas ainda são precisas. Se você está relaxado com a integridade do contador de visualizações, corre o risco de que duas pessoas diferentes possam pensar que eram o usuário número 100 daquele vídeo em particular. Mas a maioria das pessoas consideraria o dano causado por isso como insignificante.
Em outros casos, a integridade dos dados é mais importante. Considere duas pessoas simultaneamente tentando se inscrever com o mesmo nome de usuário. Dizer a ambas as pessoas que eles receberam o nome de usuário não é aceitável, então, em tal situação, você escolheria uma abordagem mais lenta com melhor integridade. É aceitável dizer a ambas as pessoas que o nome de usuário foi escolhido, portanto, uma abordagem possível seria tentar reservar o nome de usuário em cada réplica e somente reportar sucesso se você obtiver êxito em mais de 50% das réplicas. Não é improvável que essa abordagem faça o usuário esperar por meio segundo para obter uma resposta. Mas os usuários não passam por esse processo com frequência suficiente para serem incomodados por esse atraso.
Em outros casos, você pode precisar de boa integridade e atualizações rápidas, mas apenas uma pessoa pode atualizar essa parte específica dos dados. Nesse caso, você pode colocar a cópia autoritativa dos dados em um servidor que você acha que está próximo a esse usuário e permitir que outros servidores tenham uma versão em cache, que é na maioria das vezes atualizada.