Pular para o conteúdo principal

Por que escolhemos PostgreSQL em vez de Redis?

Sagaweaw Team
Escrito porSagaweaw TeamCore Engineering Team

A maioria das ferramentas de orquestração de transações ou processamento de jobs na comunidade Java (como o Quartz em algumas configurações ou frameworks menores) utiliza Redis para controlar o estado das execuções pela sua extrema velocidade. O Sagaweaw foi contra a maré e adotou o PostgreSQL.

Neste deep dive, explicaremos as motivações por trás dessa decisão de arquitetura.

O Teorema CAP e Sagas

Quando falamos de transações distribuídas (Sagas), estamos lidando com consistência financeira ou operacional crítica (pagamentos, reservas de estoque, emissão de ingressos). Pelo Teorema CAP, sabemos que em cenários de particionamento de rede (P), precisamos escolher entre Consistência (C) e Disponibilidade (A).

O Redis (especialmente em cluster ou sentinel) foca na altíssima disponibilidade e velocidade. No entanto, sua persistência (AOF/RDB) ocorre de forma assíncrona, e sob pressão de failover, perda de eventos (writes) é um comportamento documentado.

A Troca: Velocidade Absoluta por Durabilidade Garantida

O Sagaweaw prefere sacrificar alguns milissegundos de I/O em troca de Consistência Forte. Ao utilizar PostgreSQL, o framework se apoia nas garantias transacionais ACID (Atomicity, Consistency, Isolation, Durability) maduras de um SGBD relacional.

Quando o Sagaweaw diz que um step da sua saga foi "COMPLETED", isso foi sincronizado (flushed) no disco. Se o servidor desligar puxado da tomada no milissegundo seguinte, no boot, o framework retoma a Saga exatamente do ponto onde parou, sem perda de estado.

Menos peças móveis

Além das garantias técnicas, há o fator operacional. Introduzir Redis ou Kafka na sua arquitetura apenas para suportar Sagas aumenta o custo de infraestrutura e a carga cognitiva do time de Devops.

Praticamente todos os sistemas corporativos já rodam em cima de um banco relacional robusto (como o PostgreSQL). O Sagaweaw aproveita essa infraestrutura existente para entregar orquestração distribuída sem introduzir novos pontos de falha na arquitetura.

Junte-se ao debate!

Arquitetura é feita de trade-offs. O que você achou das decisões tomadas em "Por que escolhemos PostgreSQL em vez de Redis?"? Compartilhe seus cenários, tire dúvidas e debata com outros engenheiros da comunidade Sagaweaw.

Comentar no GitHub Discussions