Há situações em que você gostaria de ter:
- A integridade dos dados garante transações transacioná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 seus requisitos exatos. 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 está temporariamente um pouco desligado. Se as visualizações que ocorreram 10 segundos atrás no outro lado do mundo ainda não estiverem incluídas, mas as visualizações que ocorreram há 5 segundos mais próximas forem incluídas, ainda será preciso o suficiente. Se você está relaxado com a integridade do contador de visualizações, corre o risco de duas pessoas diferentes pensarem que eram o número 100 do espectador desse vídeo em particular. Mas a maioria das pessoas consideraria insignificante o dano causado por isso.
Em outros casos, a integridade dos dados é mais importante. Considere duas pessoas simultaneamente tentando se inscrever com o mesmo nome de usuário. Dizer às duas pessoas que elas receberam o nome de usuário não é aceitável; portanto, em tal situação, você escolheria uma abordagem mais lenta e com melhor integridade. É aceitável dizer às duas pessoas que o nome de usuário foi usado, portanto, uma abordagem possível seria tentar reservar o nome de usuário em cada réplica e reportar o sucesso apenas se você tiver conseguido mais de 50% das réplicas. Não é improvável que essa abordagem faça com que o usuário aguarde meio segundo para obter uma resposta. Mas os usuários não passam por esse processo com frequência suficiente para se incomodar com esse atraso.
Em outros casos, você pode precisar de boa integridade e atualizações rápidas, mas apenas uma pessoa pode atualizar esse dado específico. Nesse caso, você pode colocar a cópia autorizada dos dados em um servidor que você acha que é próximo a esse usuário e permitir que outros servidores tenham uma versão em cache, que é geralmente atualizada.