CockroachDB Multi-Região¶
Toda arquitetura de MySQL ou PostgreSQL entre regiões esbarra no mesmo limite: existe um primário. As leituras se distribuem, o cache ajuda, a réplica local resolve o SELECT — mas a escrita continua tendo que viajar até uma única região.
Quando o requisito é escrever localmente em mais de uma região, ao mesmo tempo, a resposta não é adaptar um banco de primário único com replicação bidirecional — é usar um banco projetado para isso. O CockroachDB fala o protocolo PostgreSQL, o que permite reaproveitar drivers, ferramentas e boa parte do SQL existente, e distribui os dados em ranges replicados por consenso, sem primário e sem failover manual.
Como funciona¶
Os dados são divididos em ranges, e cada range é replicado (três cópias, por padrão) em nós diferentes. Cada escrita precisa da confirmação da maioria das réplicas — o quórum. Não há promoção, não há split-brain: se um nó ou um domínio inteiro cai, a maioria restante continua aceitando escrita.
Cada range tem três réplicas em domínios de falha distintos; a escrita é confirmada por dois dos três.
Duas regiões não formam quórum
Com apenas dois domínios de falha, a perda de um deles deixa metade das réplicas — e metade não é maioria. Uma topologia que sobrevive à queda de uma região inteira precisa de três domínios de falha: br-sp-1, br-sp-2 e um terceiro, que pode ser outra região ou um conjunto de nós dedicado a formar quórum. Esse é o requisito que define o custo real do projeto, e tratamos disso logo no dimensionamento.
Survival goals: quanto o cluster precisa sobreviver¶
A meta de sobrevivência é uma configuração do banco de dados, não um redesenho do cluster — e pode mudar conforme o sistema amadurece.
SURVIVE ZONE FAILURE | SURVIVE REGION FAILURE | |
|---|---|---|
| Tolera | Perda de nó, rack ou zona | Perda de uma região inteira |
| Distribuição das réplicas | Pode concentrar em uma região | Espalhada por três domínios |
| Latência de escrita | Menor, quórum local | Paga o round trip entre regiões |
| Domínios necessários | Um com múltiplas zonas | Três |
| Indicado para | Maioria das aplicações | Sistemas que não podem parar com a queda de um datacenter |
Entre br-sp-1 e br-sp-2 a distância é métrica de milissegundos, então SURVIVE REGION FAILURE custa muito menos aqui do que em uma topologia intercontinental — é justamente o que torna a configuração viável no Brasil.
Localidade de tabelas: onde cada dado vive¶
A localidade é definida por tabela — e, no caso de REGIONAL BY ROW, linha a linha.
REGIONAL BY ROW— cada linha tem uma região de origem. O cliente brasileiro grava em São Paulo, o cliente de outra região grava lá, na mesma tabela, com a mesma consulta SQL. É o recurso que resolve o caso multi-tenant sem sharding manual na aplicação.REGIONAL BY TABLE— a tabela inteira tem uma região de origem. Escrita rápida nessa região, leitura de qualquer lugar.GLOBAL— leitura rápida em todas as regiões, escrita mais cara. Ideal para tabelas de referência: catálogos, tarifas, configurações.- Follower reads — leitura levemente defasada atendida pela réplica local, sem cruzar a WAN. Excelente para relatórios e telas de consulta.
Quando faz sentido — e quando não faz¶
| Cenário | Recomendação |
|---|---|
| SaaS multi-tenant com clientes em regiões diferentes | CockroachDB, REGIONAL BY ROW |
| Escrita ativa em duas regiões, sem eleger primário | CockroachDB |
| Indisponibilidade regional é inaceitável, mesmo por minutos | CockroachDB, SURVIVE REGION FAILURE |
| Aplicação de leitura pesada, escrita concentrada | PostgreSQL Multi-Região — mais simples e mais barato |
| Muitas extensões PostgreSQL, procedures e SQL específico | PostgreSQL — a compatibilidade é do protocolo, não de todo o ecossistema |
| Carga analítica, agregações sobre bilhões de linhas | ClickHouse |
| Banco pequeno e uma única região | Alta Disponibilidade PostgreSQL |
Compatível não é idêntico
O CockroachDB fala o protocolo PostgreSQL e cobre a maior parte do SQL de aplicação, mas não é um PostgreSQL: extensões, stored procedures, gatilhos e alguns comportamentos transacionais diferem. Toda migração começa com um inventário de compatibilidade e um teste com a carga real, antes de qualquer decisão.
Operação na InteSys¶
- Distribuição entre br-sp-1, br-sp-2 e um terceiro domínio de falha, com localities declaradas de forma que o banco saiba onde cada nó está e posicione as réplicas corretamente.
- Em Kubernetes ou em máquinas virtuais — o cluster é homogêneo, todos os nós rodam o mesmo papel, o que torna a operação previsível em qualquer uma das duas formas.
- Upgrades e manutenção sem downtime, nó a nó, com o quórum sempre preservado.
- Backup para armazenamento de objetos, com restauração testada — o quórum protege contra falha de infraestrutura, não contra erro humano.
- Observabilidade — latência por região, distribuição de ranges, hot ranges, saúde do quórum e contenção de transações.
- Migração assistida a partir do PostgreSQL, com inventário de compatibilidade, carga de teste e plano de cutover.
Soberania de dados¶
Em um banco distribuído, "onde o dado está" é configuração, não consequência — e é isso que permite conciliar escrita multi-região com residência de dados no Brasil.
- Três domínios de falha dentro do Brasil — quando a soberania é requisito, o terceiro domínio também é nacional. O cluster sobrevive à perda de uma região inteira sem que nenhuma réplica saia do país.
REGIONAL BY ROWfixa o dado na região de origem — a linha do cliente brasileiro é gravada e mantida no Brasil, mesmo em um cluster que atende outras regiões. É o mecanismo que permite operar fora do país sem misturar residência de dados.- Domínio de falha em outro país é decisão explícita — melhora a sobrevivência e cria transferência internacional de dados; a base legal entra no desenho da solução, não depois.
- Backup e snapshot com destino escolhido — backup para armazenamento de objetos no Brasil por padrão e, em Kubernetes, snapshot de volume criptografado que pode ficar no país ou ser replicado para outro, a pedido. Veja Alta Disponibilidade PostgreSQL.
- LGPD — na topologia padrão, integralmente brasileira, não há transferência internacional a documentar.
Como a InteSys implanta¶
- Avaliação do requisito — confirmar que o caso realmente exige escrita multi-região; muitas vezes uma réplica de leitura resolve por uma fração do custo.
- Inventário de compatibilidade — mapeamento do SQL, extensões e comportamentos transacionais em uso.
- Desenho da topologia — regiões, terceiro domínio de falha, número de nós e survival goal.
- Localidade dos dados — definição de quais tabelas são
REGIONAL BY ROW,REGIONAL BY TABLEouGLOBAL. - Provisionamento — cluster em Kubernetes ou VMs, com localities e anti-affinity corretas.
- Teste de falha — derrubamos um domínio inteiro em ambiente controlado e medimos o impacto real na aplicação.
- Migração — carga inicial, sincronização e cutover com janela curta.
- Observabilidade e runbook — painéis, alertas e procedimento documentado.
O caminho mais barato costuma vir antes
Escrita multi-região resolve um problema real, mas não é o primeiro passo de todo projeto. Se a sua carga é dominada por leitura, comece por PostgreSQL Multi-Região. Se a indisponibilidade regional é o risco central, o CockroachDB é a resposta direta. Fale com nossa equipe para avaliar qual dos dois atende ao seu caso.
Próximos Passos¶
- PostgreSQL Multi-Região — Réplicas, replicação lógica e cache regional
- Alta Disponibilidade PostgreSQL — Topologia, failover e backup dentro do datacenter
- Kubernetes — Clusters gerenciados onde o banco distribuído pode ser operado
- Datacenters InteSys — Detalhes das regiões br-sp-1 e br-sp-2