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:
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:
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.