CockroachDB, um banco resiliente e escalável

CockroachDB, um banco resiliente e escalável

No cenário de microsserviços e aplicações distribuídas, ainda temos que lidar com gerenciamento e escalabilidade dos dados de forma manual para fonte de dados relacionais.

Imaginando uma aplicação monolítica que possui varias transações em um fluxo complexo de um e-commerce, tenho que me preocupar com segurança e escalabilidade. E é importante que eu em cada consulta eu tenha a versão mais recente do meu dado. Em outras palavras, eu preciso de confiabilidade e garantia que as transações vão me trazer o estado fiel das informações.

Em um banco NoSQL, como o MongoDB, tenho a vantagem de escalabilidade horizontal e desempenho, porém não tenho a segurança de um banco de dados transacional de manter a integridade de schemas e indexes. Mesmo com a implementação de bloqueios específicos, o MongoDB trabalha com isolamento.

Além do desempenho, o PostgreSQL, por exemplo, permite a execução de transações com um nível mais fraco de isolamento, priorizando desempenho ao custo da segurança por padrão, mas expõe a falhas. Porém, o desempenho também acaba sendo afetado, como mostra esse paper detalhado sobre Acid Rain: bailis.org/papers/acidrain-sigmod2017.pdf

O CockroachDB tem um modulo SERIALIZABLE com isolamento forte por padrão para garantir a aplicação sempre veja os dados que espera.

Em suma, é uma solução que tem um bom trade off em relação a empenho e segurança. Mas a feature mais desejável, a meu ver, é a simplicidade de escalabilidade e tolerância a falhas.

Sua resiliência é graças a sua arquitetura construída em cima de um algorítimo de consenso distribuído que garante uma consistência forte entre serviços, o Raft. No CockroachDB, esta gerência fica ao nível dos intervalos de dados armazenados em nós.

Isto é essencial para garantir a confiabilidade do sistema em um sistema distribuído onde múltiplos fatores podem gerar falhas de disponibilidade do serviço ou latência.

Em sua versão 2.0, o CockroachDB incluiu os resultados do seu primeiro benchmark competitivo sobre o seu rendimento no padrão da indústria, testando transaçõesdo mundo real (Comunicação TPC-C). Foi comparado o volume de transações por minuto entre o CockroachDB 2.0 e o Aurora Amazon, e eles divulgaram alguns resultados muito interessantes:

1613962110717.png

Mas nenhuma solução é uma "Bala de Prata", o CockroachDB tem um propósito e foco específico. Antes de migrar de cabeça, vale muito a experimentação.

Os prós e contras do CockroachDB:

giphy.gif

Prós:

  • Fornece escalabilidade sem sacrificar a funcionalidade SQL
  • Uso de JSONB para armazenar metadados.
  • Suporte a JSON 2.0.
  • O dialeto do CockroachDB é PostgreSQL, permitindo um cliente Postgres migrar ou comunicar sem problemas.
  • Bom balanço de desempenho x segurança
  • Suporte para linguagens PHP, Go, Rust, Ruby, Javascript, Java

Contras:

  • Não é indicado para OLAP
  • Latência de um sistema distribuído. Apesar de ser impressionante os números e comparações de benchmark para o CrockroachDB, ainda não atinge os níveis de um sistema em uma única máquina.