PACELC Theorem

Image: Infra as Code

No post passado falei um pouco do teorema CAP , esse teorema ainda é bem válido, é fácil de explicar, está sujeito a algumas críticas técnicas e diante de novas formas de tecnologias em armazenamento e mecanismos de tolerância à falha que evoluíram nos últimos tempos estão desafiando o CAP. O teorema PACELC é uma versão expandida do teorema CAP, e busca contemplar pontos que o CAP não era tão claro, vejamos o que ele diz:

  • P (Prefer Consistency): Durante uma partição (falha de rede), o sistema prefere manter a consistência dos dados, garantindo que todos os nós vejam a mesma versão dos dados. Isso pode resultar em uma temporária falta de disponibilidade para algumas operações.

  • A (Prefer Availability): Em uma partição, a prioridade é manter a disponibilidade, permitindo que os nós continuem respondendo às operações, mesmo que eles possuam visões temporariamente inconsistentes dos dados.

  • C (Consistency): O sistema escolhe a consistência em situações normais, quando não há partição. Nesse caso, todos os nós do cluster de armazenamento veem os mesmos dados simultaneamente.

  • E (Even Partition-Tolerance): Reflete a ideia de que o sistema deve tentar tolerar partições de forma equilibrada, evitando cenários onde um subconjunto de nós fica inoperante por longos períodos.

  • L (Latency): Durante uma partição, a otimização é feita em relação à latência, buscando minimizar o tempo de resposta das operações, mesmo que isso signifique sacrificar temporariamente a consistência ou disponibilidade.

Cada característica dessas podem se combinar de algumas formas, criando sistemas que priorizam a disponibilidade, a latência e a consistência eventual podem ser toleradas em prol de um sistema sempre online. Também é possível escolher sistemas que priorizam a consistência, a latência pode ocorrer, mas a consistência dos dados é crítica para garantir a confiabilidade do sistema.

CAP vs PACELC

Comparando os dois teoremas é possível perceber que o Teorema CAP se baseia numa visão geral e oferece os trade-offs nas escolhas da característica de sistemas distribuídos e é isso que ele tem a oferecer. O Teorema PACELC aprofunda essa visão, considerando a latência como um fator importante, ao fazer uma escolha das características de um sistemas ele pergunta, “ como o sistema deve se comportar em caso de falha de redes?”. Teorema PACELC oferece mais possibilidades de pensar uma arquitetura.

PACELC na prática

Daí você jovem me diria assim: “Mas Léo, isso muito teórico não faço a menor ideia de onde eu poderia usar isso e não vejo nenhum cenário que possa utilizar isso.” eu digo, “Calma jovem, tem uso sim, se não tem uso no seu dia a dia eu diria é que ao menos seria bem legal você conhecer” vamos ver algumas possibilidades:

Quando você entra no APP do seu banco, você quer que o seu dinheiro esteja lá certo? Se ele aumentar sem explicação você vai ficar feliz e não vai reclamar, mas se ele desaparecer de repente da sua conta você não vai gostar, isso é um problema de consistência. A consistência é crucial para garantir que as transações sejam precisas e o saldo das contas esteja correto. Além da consistência, a latência também é importante, pois os clientes esperam que seus PIXs e outras funcionalidades sejam processados rapidamente.

Vejamos um outro tipo de sistema, quando você abre o “Insta”, “Face” ou o “Xistter”, para esses sistema a disponibilidade é a principal prioridade, pois os usuários esperam que a plataforma esteja sempre acessível, certo? Senão ninguém volta a elas, né? Porém a consistência pode ser sacrificada em alguns casos, como na exibição de posts, alguns “likeinhos” de posts podem ser perdidos ou atrasados sem grandes prejuízos para o sistema.

Viu como tem uso? Agora pense no App do plano de saúde? Pense na App de mensagens instantâneas? Quais foram as escolhas que foram feitas? Adoro viajar nessas pergunta!!

Para pensar

O que você tem que ter em mente é que por trás de todo sistema de banco, rede social, APPs, existe um sistema de armazenamento de dados, que precisa de redes e componentes trocando informações. O Teorema PACELC é um guia para tomar decisões conscientes sobre o design de sistemas distribuídos. Não existe uma única resposta, pois a escolha ideal depende das necessidades específicas do seu sistema e dos requisitos de negócio para o sistema (as features).

Ao pensar em criar um sistema faça questionamento baseado nas escolhas do Teorema CAP e depois evolua para os questionamentos do Teorema PACELC. Busque identificar as necessidades do seu sistema como: Quais características são mais importantes? Qual é o nível de tolerância a falhas que você precisa? Escolha os componentes e algoritmos adequados existem diversas tecnologias que podem ajudar a alcançar o equilíbrio ideal entre as características do PACELC. Últimas dicas, teste e monitore, monitore e teste, monitore teste, teste, é imprescindível que você monitore o seu sistema o desempenho do sistema para identificar gargalos e problemas de latência.

Abraços!

Vida longa e próspera a todos!!

Reference:


Eu adoraria ouvir suas outras histórias e situações semelhantes ao que acabei de escrever neste post, você pode me encontrar em @infraascode_br ou linkedin.com/in/leonardoml/ .

Te convido a ver os outros posts do blog Infra-as-Code garanto que tem coisas legais lá!!


--- --- IMPORTANTE --- ---
As opiniões aqui expressas são pessoais e de responsabilidade única e exclusiva do autor, elas não refletem necessariamente a posição das empresas que eu trabalho(ei) e/ou presto(ei) serviço.