☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta Datomic. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Datomic. Mostrar todas as mensagens

sábado, 17 de maio de 2025

The IT Crowd encontra o Nubank: o Dia em que o COBOLzeiro Entrou na Nuvem, Viu Kubernetes, Clojure, Datomic e Perguntou Onde Esconderam o CICS

 

Bellacosa Mainframe e a arquitetura do Nubank

☕ Um Café no Bellacosa Mainframe

The IT Crowd encontra o Nubank: o Dia em que o COBOLzeiro Entrou na Nuvem, Viu Kubernetes, Clojure, Datomic e Perguntou Onde Esconderam o CICS

💳 AWS, microserviços, containers, bancos imutáveis, observabilidade, FinOps, IA e o estranho caso de uma instituição com mais de 100 milhões de clientes que resolveu problemas antigos com ferramentas completamente novas — enquanto o veterano do CPD repetia: “Have you tried turning it off and on again?”

Imagine o porão de um departamento de informática.

Luzes fluorescentes.

Cabos.

Monitores.

Uma caneca esquecida ao lado do teclado.

Um cartaz na parede:

HAVE YOU TRIED TURNING IT OFF AND ON AGAIN?

Roy está sentado olhando para um terminal.

Moss aparece carregando uma pilha de livros.

Na porta surge um programador COBOL iniciante.

Ele segura um notebook.

Na tela:

KUBERNETES
CLOJURE
DATOMIC
AWS
MICROSERVICES
CONTAINERS

Roy olha.

— O que é isso?

O novato responde:

— Estou estudando a arquitetura do Nubank.

Moss imediatamente se interessa.

— Nubank? Fascinante. Instituição financeira digital, arquitetura distribuída, alta escalabilidade...

Roy interrompe:

— Quantas agências?

— Nenhuma.

— Nenhum mainframe?

— Pelo menos não como fundamento público da arquitetura original.

— E atende mais de cem milhões de clientes?

— Sim.

Roy fica em silêncio.

Olha para Moss.

Olha novamente para o novato.

— Então onde esconderam o CICS?

☕

Bem-vindo a mais um Um Café no Bellacosa Mainframe.

Hoje vamos entrar numa das comparações mais interessantes para quem está começando COBOL e quer entender por que o mundo moderno fala tanto de cloud-native, microserviços, containers, Kubernetes e bancos de dados diferentes.

Nosso laboratório será o Nubank.

Não para declarar que cloud venceu mainframe.

Nem para dizer que mainframe é superior à cloud.

Essas guerras religiosas normalmente produzem mais calor do que conhecimento.

A pergunta realmente interessante é:

Como uma instituição financeira que nasceu na nuvem conseguiu crescer até uma escala gigantesca resolvendo problemas que bancos tradicionais enfrentam há décadas?

E mais importante:

Quantos desses problemas são realmente novos?

Spoiler:

Pouquíssimos.

As tecnologias mudaram.

Os problemas fundamentais continuam terrivelmente familiares.

Pegue o café.

Vamos descer ao porão.


1. Primeiro: esqueça o aplicativo roxo

Quando alguém olha para o Nubank, normalmente vê:

APP
CARTÃO ROXO
PIX
CONTA
EMPRÉSTIMO

O profissional de infraestrutura deveria enxergar outra coisa.

Por trás daquele botão bonito existe algo mais parecido com:

CLIENTE
   |
   v
APLICATIVO
   |
   v
APIs
   |
   v
SERVIÇOS
   |
   v
CORE FINANCEIRO
   |
   v
DADOS
   |
   v
EVENTOS
   |
   v
AUDITORIA
   |
   v
SEGURANÇA

E ainda:

ANTIFRAUDE
CRÉDITO
KYC
COMPLIANCE
OBSERVABILIDADE
LOGS
BACKUP
DR
CAPACITY
IA

Então guarde uma regra.

Interface simples não significa sistema simples.

O cliente toca em:

PAGAR

e espera:

PAGO

Entre uma coisa e outra pode existir uma pequena guerra civil distribuída.

É justamente aí que Nubank e mainframe começam a ficar curiosamente parecidos.


2. O banco tradicional construiu uma fortaleza

Grandes bancos cresceram durante décadas.

Muitos construíram arquiteturas centradas em:

IBM Z
COBOL
CICS
DB2
IMS
VSAM
MQ
JCL
RACF

Essas tecnologias não apareceram por acaso.

Elas resolvem problemas reais.

Consistência.

Volume.

Disponibilidade.

Segurança.

Recuperação.

Processamento transacional.

Auditoria.

Controle de carga.

Imagine algo conceitualmente parecido:

CLIENTE
   |
   v
CANAL
   |
   v
CICS
   |
   v
PROGRAMA COBOL
   |
   v
DB2 / VSAM / IMS
   |
   v
MQ / BATCH / CONTABILIDADE

Agora multiplique isso por:

décadas
milhares de programas
milhões de clientes
centenas de integrações

Pronto.

Você tem um banco.

Ou um monstro mitológico.

Depende do horário do incidente.


3. Nubank começou pelo outro lado

O Nubank nasceu já pensando em cloud.

Esse detalhe muda tudo.

Um banco tradicional frequentemente precisa modernizar sistemas existentes.

O Nubank pôde construir de maneira greenfield.

Greenfield significa basicamente:

“Ainda não temos quarenta anos de decisões para carregar.”

Isso é uma vantagem brutal.

Imagine duas equipes.

A primeira recebe:

SISTEMA X
CRIADO EM 1989
ALTERADO 12.417 VEZES
AUTOR ORIGINAL APOSENTADO
DOCUMENTAÇÃO: TALVEZ

A segunda recebe:

README.md

É outro planeta.

Mas não se engane.

O segundo sistema eventualmente também vira o primeiro.

Só precisa sobreviver tempo suficiente.


4. AWS: o CPD terceirizado

Uma maneira divertida de explicar cloud para um veterano seria:

Você não eliminou o datacenter.

Você terceirizou uma enorme parte dele.

No modelo tradicional:

BANCO
 |
 +-- DATACENTER
     |
     +-- SERVIDORES
     +-- STORAGE
     +-- REDE
     +-- ENERGIA
     +-- DR

No modelo cloud:

BANCO
 |
 +-- AWS
     |
     +-- COMPUTE
     +-- STORAGE
     +-- NETWORK
     +-- DATABASE
     +-- SECURITY

Fisicamente continuam existindo máquinas.

CPUs.

Memória.

SSD.

Switches.

Cabos.

Energia elétrica.

O que mudou foi o modelo operacional.

Você pede recursos por software.

Escala.

Cria ambientes.

Destrói ambientes.

Automatiza infraestrutura.

Isso reduz dramaticamente o tempo entre:

PRECISO DE SERVIDOR

e:

SERVIDOR EXISTE

Quem viveu compras corporativas tradicionais entenderá imediatamente a importância disso.


5. A nuvem não é infinita

Aqui aparece um dos maiores mitos.

Muita gente imagina:

CLOUD = INFINITO

Não.

Cloud continua limitada por física.

Em algum ponto existem:

CPU
RAM
SSD
REDE
ENERGIA
DATACENTER

Uma empresa suficientemente grande pode encontrar limites que empresas pequenas jamais verão.

É quase como alguém perguntando:

— A internet aguenta?

Roy responde:

— Depende.

Moss:

— Tecnicamente a internet está naquela pequena caixa preta ali.

Se você entendeu essa referência, parabéns.

Você ganhou o primeiro Easter egg.


6. Clojure: porque Java seria normal demais

Uma das escolhas técnicas mais interessantes do Nubank foi Clojure.

Clojure é uma linguagem funcional da família Lisp executada sobre JVM.

Para quem vem de COBOL, isso parece inicialmente uma linguagem alienígena.

COBOL:

IF SALDO > LIMITE
    DISPLAY 'OPERACAO RECUSADA'
END-IF

Lisp-like:

(parênteses
    (dentro
        (de
            (parênteses))))

O COBOLzeiro olha.

Moss aparece.

— É extremamente elegante.

Roy responde:

— Parece que alguém derrubou a caixa de parênteses.

Mas existe racionalidade por trás da escolha.

Linguagens funcionais favorecem conceitos como:

imutabilidade
funções puras
composição
transformação de dados

Isso pode ser interessante em sistemas distribuídos.

Porque estado compartilhado é uma fonte clássica de sofrimento.

E sofrimento distribuído escala muito bem.


7. Datomic: o banco que gosta do passado

Agora chegamos a uma ideia deliciosa.

Em muitos bancos relacionais tradicionais pensamos no estado atual.

Exemplo:

SALDO = 1000

Depois:

SALDO = 800

Atualizamos o registro.

Mas no mundo financeiro o passado importa muito.

Quem alterou?

Quando?

Qual era o estado anterior?

Qual evento produziu o estado atual?

Datomic trabalha com uma filosofia fortemente temporal e imutável.

Conceitualmente:

T0 SALDO = 1000
T1 COMPRA = -200
T2 SALDO = 800

O histórico não desaparece simplesmente.

Para um COBOLzeiro isso desperta uma sensação familiar.

Ele pensa:

— Então vocês guardam histórico?

Sim.

— E querem reconstruir estado?

Sim.

— E auditoria?

Sim.

— E temporalidade?

Sim.

O veterano dá um gole no café.

— Conheço esse filme.


8. A imutabilidade é uma obsessão financeira antiga

Sistemas financeiros gostam de histórico porque dinheiro deixa rastros.

Em muitos casos não queremos:

DELETE

Queremos:

REVERSAO

Por quê?

Porque apagar o passado é péssimo para auditoria.

Imagine:

TRANSAÇÃO 100
TRANSAÇÃO -100

É muito diferente de:

NUNCA EXISTIU

Essa diferença conceitual é crítica.

Sistemas modernos chamam isso de:

event sourcing
immutable data
audit history

O veterano do mainframe talvez diga:

— Interessante.

Depois acrescenta:

— Em 1987 nós chamávamos de “não apague esse registro porque a auditoria vai perguntar”.


9. Microserviços: cada problema ganha sua casinha

Arquiteturas modernas frequentemente dividem sistemas em serviços menores.

Algo como:

CARTÃO
   |
   +-- limite-service
   +-- transaction-service
   +-- fraud-service
   +-- notification-service
   +-- customer-service

Cada serviço pode ter:

código
deployment
dados
observabilidade
equipe

Isso oferece vantagens.

Escalabilidade independente.

Implantação independente.

Domínios separados.

Equipes autônomas.

Mas também cria problemas.

Muitos problemas.

Agora você precisa administrar:

rede
latência
timeout
retry
idempotência
consistência
service discovery
tracing
versionamento
contratos

O sistema que antes tinha chamadas internas agora possui rede entre pedaços.

E existe uma máxima importante:

A rede sempre encontra maneiras criativas de lembrar que existe.


10. O COBOLzeiro conhece microserviços melhor do que pensa

Imagine um banco tradicional com:

CICS REGION A
CICS REGION B
MQ
DB2
BATCH
IMS

Você já possui componentes distribuídos.

Já possui fronteiras.

Já possui mensageria.

Já possui sistemas independentes.

A diferença é que arquiteturas cloud-native tornam essas divisões muito mais granulares.

Então quando alguém disser:

“Microservices revolucionaram tudo.”

Você pode responder:

— Sim, revolucionaram muita coisa.

Mas alguns problemas são velhos.

Por exemplo:

COMO GARANTIR QUE A MESMA OPERAÇÃO NÃO SEJA EXECUTADA DUAS VEZES?

Isso se chama:

IDEMPOTÊNCIA

No mainframe talvez você não usasse esse termo diariamente.

Mas o problema já existia.


11. Kubernetes: o gerente dos containers

Agora surge Kubernetes.

Imagine milhares de pequenos serviços.

Cada um rodando em containers.

Você precisa controlar:

onde roda
quantas cópias
quando reiniciar
como atualizar
como escalar
como descobrir

Kubernetes tenta resolver essa orquestração.

Conceitualmente:

KUBERNETES
   |
   +-- POD A
   +-- POD B
   +-- POD C
   +-- POD D

Se um morre:

RESTART

Se precisa de mais capacidade:

SCALE

Se uma versão nova chega:

ROLLING UPDATE

Um veterano do mainframe olha para isso e pensa:

“Então vocês construíram um sistema que administra workload, disponibilidade e recursos?”

Sim.

O veterano:

— Interessante.

WLM tossindo discretamente no canto.


12. WLM encontra Kubernetes no corredor

Essa comparação é deliciosa.

Não são tecnologias equivalentes.

Mas ambas convivem com perguntas semelhantes.

QUEM PRECISA DE RECURSO?
QUANTO?
COM QUAL PRIORIDADE?
ONDE EXECUTAR?
COMO REAGIR A CARGA?

No mainframe:

WLM
service classes
importance
goals

No cloud-native:

requests
limits
autoscaling
scheduling
pods
nodes

Mudou o vocabulário.

O problema continua sendo:

recursos são finitos.

Moss explica Kubernetes durante vinte minutos.

Roy resume:

— Basicamente você tem um monte de computadores e precisa impedir que eles façam besteira.

Moss:

— Tecnicamente incorreto.

Roy:

— Mas funcionalmente preciso.


13. Containers não são máquinas virtuais pequeninas

Essa é uma boa dica para o iniciante.

Container não é simplesmente:

VM PEQUENA

Ele compartilha o kernel do host e empacota aplicação e dependências de maneira isolada.

Isso torna deployment mais previsível.

A clássica frase:

NA MINHA MÁQUINA FUNCIONA

vira:

ENTÃO EMPACOTE SUA MÁQUINA

Não literalmente.

Mas quase.

Essa é uma das grandes contribuições dos containers:

reduzir diferenças entre ambientes.

Dev.

Teste.

Produção.

Todos executam artefatos semelhantes.

O sysprog antigo entende imediatamente o valor disso.

Ambiente diferente é combustível para incidente.


14. Observabilidade: porque agora ninguém sabe onde o erro aconteceu

Em um sistema distribuído, uma transação pode atravessar:

APP
 ↓
API
 ↓
SERVICE A
 ↓
SERVICE B
 ↓
DATABASE
 ↓
EVENT BUS
 ↓
SERVICE C

Quando algo falha, surge a pergunta:

ONDE?

Observabilidade tenta responder usando:

logs
metrics
traces
events

Tracing distribuído é especialmente importante.

Você pode acompanhar uma transação atravessando vários serviços.

Para o mundo mainframe isso lembra a necessidade histórica de:

SMF
RMF
CICS statistics
DB2 traces
logs
dumps

Novamente:

tecnologia nova.

Problema velho.


15. SMF provavelmente olharia para observability e diria “fofo”

Brincadeiras à parte, SMF é uma das grandes fontes históricas de telemetria de z/OS.

O mainframe registra uma quantidade extraordinária de informação operacional.

CPU.

Jobs.

I/O.

Segurança.

Subsistemas.

Performance.

Cloud-native descobriu sua própria versão desse universo.

Prometheus.

OpenTelemetry.

Grafana.

Tracing.

Logs centralizados.

A filosofia é semelhante:

se não consigo medir, não consigo administrar.

Esse é um princípio universal.


16. O custo da nuvem: a pergunta que ninguém responde com um número simples

Quanto custa atender 100 milhões de clientes?

Não existe resposta direta.

Porque:

100 MILHÕES DE CLIENTES

não significa:

100 MILHÕES DE CLIENTES ATIVOS AO MESMO TEMPO

Você precisa conhecer:

transações por segundo
storage
network
database I/O
logs
backups
replicação
ML
fraude
analytics
DR

Uma fórmula simplificada seria:

CLOUD COST =
COMPUTE
+ STORAGE
+ DATABASE
+ NETWORK
+ OBSERVABILITY
+ SECURITY
+ BACKUP
+ ANALYTICS
+ ML

Depois vem:

- otimização
- contratos
- reservas
- descontos

E aparece uma nova profissão:

FinOps

17. FinOps: o capacity planner voltou usando tênis

FinOps é a disciplina de administrar financeiramente consumo de cloud.

Porque existe uma armadilha.

Cloud facilita criar recursos.

Muito fácil.

Talvez fácil demais.

Alguém faz:

CREATE INSTANCE

Depois esquece.

Ela continua ligada.

Por semanas.

Meses.

Até alguém encontrar a conta.

No mainframe sempre existiu obsessão com:

CPU
MSU
MIPS
SOFTWARE COST

Cloud reintroduziu a mesma disciplina com nomes diferentes:

vCPU
instance hours
storage
egress
reserved instances
savings plans

O gestor antigo olha.

— Então consumo computacional continua custando dinheiro?

Sim.

— Fascinante.


18. AWS Graviton e os 14%

Uma das otimizações interessantes atribuídas publicamente ao Nubank foi adoção de processadores AWS Graviton.

A motivação é simples:

melhor relação custo/performance em determinados workloads.

Quando uma organização desse tamanho reduz uma fatia percentual relevante do custo de computação, isso pode representar muito dinheiro.

E aqui surge uma lição importante.

Em escala:

1% = DINHEIRO

Muito dinheiro.

No sistema pequeno, otimizar 3% é luxo.

No sistema gigante, pode financiar uma equipe inteira.

Isso é algo que mainframe conhece há décadas.


19. Performance engineering não morreu

Às vezes existe uma ideia ingênua:

cloud elimina preocupação com performance.

Não.

Ela pode tornar performance comprável.

Mas ainda custa.

Se um serviço usa o dobro de CPU porque o código é ruim:

CONTA = DOBRO

aproximadamente, dependendo da carga.

Então aquele velho programador obcecado por eficiência não estava completamente errado.

Talvez estivesse apenas trinta anos adiantado para a reunião de FinOps.


20. Sharding: quando um banco de dados começa a ficar apertado

Quando um banco cresce, existe outro problema.

Dados.

Muito dado.

Em algum momento você pode dividir os dados entre várias unidades.

Isso é sharding.

Imagine:

CLIENTES A-F -> SHARD 1
CLIENTES G-M -> SHARD 2
CLIENTES N-S -> SHARD 3
CLIENTES T-Z -> SHARD 4

É apenas um exemplo.

Na prática estratégias podem ser muito mais sofisticadas.

Sharding resolve alguns problemas.

E cria outros.

Sempre existe essa regra da arquitetura:

Toda solução resolve um problema e ganha três novos de bônus.

Agora surgem questões:

rebalanceamento
hotspots
consistência
roteamento
falhas
migração

Roy olha.

— Parece complicado.

Moss:

— É porque é.


21. Banco distribuído é um casamento entre física e filosofia

Quando dados estão distribuídos, surgem perguntas como:

SE DOIS NÓS DISCORDAM, QUEM ESTÁ CERTO?

Ou:

O QUE ACONTECE SE A REDE CAIR?

Ou:

QUANDO UMA TRANSAÇÃO ESTÁ REALMENTE CONFIRMADA?

Isso nos leva a consistência distribuída.

CAP theorem.

Quórum.

Replicação.

Consensus.

Eventual consistency.

Termos modernos.

Mas bancos sempre tiveram obsessão por:

ACID
COMMIT
ROLLBACK
LOCK
LOG
RECOVERY

Porque dinheiro não aceita filosofia muito abstrata.

O saldo precisa fechar.


22. Cloud-native não elimina contabilidade

Esse ponto parece óbvio.

Mas é importante.

Você pode usar:

Kubernetes
Clojure
Kafka
Datomic
AI

No fim do dia:

DÉBITO = CRÉDITO

A contabilidade continua lá.

Pode mudar a arquitetura.

Pode mudar o deployment.

Pode mudar o banco de dados.

Não muda a matemática.

Esse é o tipo de realidade que une mainframe e fintech.


23. IA agora entra no salão

Com escala gigantesca, atendimento também vira tecnologia.

Imagine milhões de perguntas:

onde está meu cartão?
por que meu limite caiu?
qual minha fatura?
como bloquear?
como negociar dívida?

Atender tudo apenas com humanos custa muito.

Então IA começa a entrar.

Chatbots.

Modelos.

Agentes.

Classificação.

Automação.

Mas agora o problema muda.

Uma IA pode responder errado.

Em banco, resposta errada pode virar:

reclamação
fraude
prejuízo
risco regulatório

Então surge outro desafio:

automação precisa ser auditável.

O mundo tecnológico moderno eventualmente descobre o mesmo princípio do mainframe:

TRUST, BUT LOG EVERYTHING.

24. Segurança: zero confiança, muitos logs

Banco digital é um alvo gigantesco.

Então precisa de:

IAM
MFA
secrets
encryption
network controls
fraud detection
monitoring
audit

No mainframe temos:

RACF
ACF2
Top Secret
SAF
profiles
permissions
logs

Novamente:

novo vocabulário.

Mesmo problema fundamental:

WHO ARE YOU?
WHAT CAN YOU DO?
WHAT DID YOU DO?

Essas três perguntas praticamente resumem segurança corporativa.


25. O curioso caso do “legado cloud”

Agora uma provocação.

Nubank nasceu moderno.

Mas qualquer plataforma suficientemente antiga cria legado.

Se um microsserviço criado em 2015 ainda existe em 2035, ele será legado.

Legado não é:

COBOL

Legado é:

software importante que sobreviveu.

Essa definição é muito mais útil.

Java vira legado.

Python vira legado.

Kubernetes vira legado.

Seu framework JavaScript favorito provavelmente já nasceu legado enquanto você lia esta frase.


26. O mainframe possui uma vantagem obscena

Existe algo que cloud-native frequentemente tenta reconstruir:

simplicidade operacional centralizada.

No mainframe você pode ter enorme quantidade de workloads dentro de uma plataforma extremamente integrada.

No mundo distribuído você ganha flexibilidade.

Mas paga em complexidade.

Milhares de containers.

Centenas de serviços.

Networking.

Observabilidade.

CI/CD.

Secrets.

Deployments.

Dependencies.

Service mesh.

Moss começa a explicar service mesh.

Roy levanta a mão.

— Não.

Moss:

— Mas é fascinante.

— Não.


27. Cloud possui outra vantagem obscena

Agora o outro lado.

Provisionamento.

Automação.

Experimentação.

Escalabilidade.

Velocidade de desenvolvimento.

Um time pode criar infraestrutura via código.

terraform apply

E ambientes aparecem.

Compare com processos históricos:

FORMULÁRIO
APROVAÇÃO
COMPRA
ENTREGA
INSTALAÇÃO
CONFIGURAÇÃO

Cloud mudou radicalmente o ciclo.

Isso foi crucial para empresas que cresceram rápido.


28. Arquitetura segue organização

Conforme a empresa cresce, aparece um problema humano.

Imagine:

10 engenheiros

Todo mundo conversa.

Agora:

100

Complica.

Agora:

1000

Você criou uma cidade.

Precisará de:

equipes
domínios
ownership
standards
platform engineering
governança

A Lei de Conway basicamente diz que sistemas tendem a refletir estruturas de comunicação das organizações.

Ou seja:

organograma também produz arquitetura.

Essa é uma verdade subestimada.


29. O programa COBOL também é arquitetura organizacional fossilizada

Pegue um programa antigo.

Ele talvez tenha:

PARA-CALCULA-TARIFA
PARA-AUTORIZA-LIMITE
PARA-GERA-HISTORICO

Por que esses módulos existem?

Talvez porque em 1994 existiam departamentos diferentes.

Arquitetura captura decisões humanas.

Software é arqueologia organizacional.

Isso vale igualmente para microservices.

Daqui a vinte anos alguém perguntará:

— Por que existem 417 serviços para processar uma fatura?

Resposta:

— Era assim que os squads estavam organizados em 2026.

😂


30. Passo a passo para um COBOLzeiro estudar arquitetura Nubank

Agora uma rota prática.

Passo 1 — Domine transações

Entenda:

COMMIT
ROLLBACK
ACID
LOCK
RECOVERY

Sem isso, arquitetura financeira vira decoração PowerPoint.

Passo 2 — Estude CICS

Entenda:

transaction manager
task
region
program
resource

Depois compare com serviços modernos.

Passo 3 — Estude Db2

Aprenda:

index
transaction
isolation
logging
recovery

Depois veja bancos distribuídos.

Passo 4 — Estude MQ

Mensageria é ponte perfeita entre os mundos.

Entenda:

queue
producer
consumer
delivery
retry

Depois Kafka e event-driven ficam muito mais fáceis.

Passo 5 — Estude containers

Docker primeiro.

Kubernetes depois.

Não comece tentando decorar YAML de 300 linhas.

Entenda o problema antes da ferramenta.

Passo 6 — Estude observabilidade

Compare:

SMF/RMF

com:

metrics/logs/traces

Passo 7 — Estude cloud economics

Aprenda:

compute
storage
network
database
egress

Depois FinOps.

Passo 8 — Estude arquitetura distribuída

Especialmente:

latency
timeout
retry
idempotency
consistency
partition

Passo 9 — Estude segurança

Compare:

RACF

com:

IAM

Passo 10 — Nunca aceite desenho de arquitetura sem perguntar:

WHAT HAPPENS WHEN THIS FAILS?

Essa pergunta vale mais que cem certificações.


31. Easter egg final: desligar e ligar não resolve tudo

Roy provavelmente tentaria:

— Have you tried turning Kubernetes off and on again?

Moss entraria em pânico.

— Não se desliga Kubernetes dessa maneira!

Roy:

— Então por que chamam de cluster?

Jen pisaria num cabo.

Produção cairia.

Alguém abriria um Sev1.

O COBOLzeiro no canto ficaria olhando.

Depois perguntaria:

— Existe rollback?

Silêncio.

— Existe backup?

Mais silêncio.

— Existe DR?

Moss:

— Naturalmente.

O veterano sorri.

Agora eles finalmente falam a mesma língua.


32. A grande conclusão

Nubank e mainframe representam épocas diferentes da engenharia.

Um nasceu em um mundo de:

cloud
smartphone
APIs
containers
distributed systems

Outro consolidou-se num mundo de:

centralized computing
transaction processing
batch
terminals

Mas ambos enfrentam:

dinheiro
estado
risco
falha
segurança
volume
auditoria
performance

E esses problemas não respeitam moda tecnológica.

É por isso que comparar Nubank com mainframe é tão interessante.

Você descobre que muitas vezes não estamos reinventando o problema.

Estamos reinventando a solução.

Às vezes melhor.

Às vezes apenas diferente.

Às vezes mais barata.

Às vezes mais rápida.

Às vezes mais complicada.

Às vezes todas essas coisas ao mesmo tempo.


Epílogo — O chamado do incidente

São 02:47 da manhã.

O celular toca.

Produção.

Roy atende.

— IT.

Do outro lado:

— Os pagamentos estão lentos.

Roy:

— Have you tried turning it off and on again?

Moss arranca o telefone.

— NÃO!

O programador COBOL olha para o dashboard.

CPU normal.

Banco normal.

Rede estranha.

Um serviço está repetindo requisições após timeout.

Retry.

Retry.

Retry.

Milhares.

Ele pergunta:

— As operações são idempotentes?

Moss congela.

Roy pergunta:

— Isso é alguma religião?

O COBOLzeiro dá um gole no café.

— Não.

Aponta para a tela.

— É a diferença entre cobrar uma vez e cobrar três.

Silêncio.

Finalmente todos entendem.

Porque por trás de:

AWS
CLOJURE
DATOMIC
KUBERNETES
MICROSERVICES
AI

continua existindo a pergunta mais antiga do sistema bancário:

O dinheiro chegou ao lugar certo, uma única vez, e conseguimos provar isso?

Se a resposta for sim, o sistema está funcionando.

Se a resposta for não...

bem...

ligue para o CPD.

☕

sexta-feira, 16 de agosto de 2024

House M.D., COBOL e o Caso do Banco de Dados que se Recusava a Esquecer: Datomic versus Db2 na Sala de Diagnóstico

 

Bellacosa Mainframe e a comparacao entre datomic e db2

☕ Um Café no Bellacosa Mainframe

House M.D., COBOL e o Caso do Banco de Dados que se Recusava a Esquecer: Datomic versus Db2 na Sala de Diagnóstico

🩺 SQL contra Datalog, UPDATE contra imutabilidade, buffer pools contra caches, logs contra história nativa, scale-up contra scale-out, décadas de cicatrizes contra arquitetura funcional — e a pergunta que ninguém deveria responder com religião tecnológica: “qual deles eu usaria para guardar o dinheiro?”

House entra na sala.

Olha para o quadro.

De um lado:

IBM Db2

Do outro:

Datomic

Foreman pergunta:

— Qual é o diagnóstico?

House apoia a bengala na mesa.

— Um deles tem quase meio século de experiência em ambientes corporativos. O outro nasceu em 2012 de um cara que achava que mudar estado demais era uma péssima ideia.

Cameron:

— Então Db2 ganha?

House:

— Você não entendeu nada.

Chase:

— Datomic ganha?

House:

— Você também não.

Ele olha para todos.

— Banco de dados não é concurso de popularidade. É diagnóstico diferencial.

E aí começa nossa consulta.

Porque comparar Datomic com Db2 apenas perguntando “qual é melhor?” é como perguntar se um bisturi é melhor que uma ressonância magnética.

Depende do problema.

Depende do paciente.

Depende do risco.

E, principalmente:

depende do que você está tentando preservar, consultar, transacionar e recuperar quando tudo der errado às 03h17 da manhã.

Pegue o café.

Hoje vamos abrir o paciente.


1. Primeiro sintoma: ambos guardam dados, mas pensam diferente

Db2 nasceu dentro da tradição relacional.

Você pensa em:

TABLE
ROW
COLUMN
PRIMARY KEY
FOREIGN KEY
INDEX
SQL

Exemplo:

CREATE TABLE CONTA (
    ID        CHAR(10) NOT NULL,
    TITULAR   VARCHAR(100),
    SALDO     DECIMAL(15,2),
    PRIMARY KEY (ID)
);

Depois:

SELECT SALDO
FROM CONTA
WHERE ID = '000123';

Simples.

Familiar.

Décadas de ferramentas, otimizadores, DBAs, utilities, backups, logs, reorgs, statistics, access paths e trauma acumulado.

Datomic pensa diferente.

Ele enxerga fatos.

Conceitualmente:

ENTITY
ATTRIBUTE
VALUE
TRANSACTION

Algo como:

[1001 :conta/id "000123"]
[1001 :conta/titular "Arthur Dent"]
[1001 :conta/saldo 1000]

Então já aparece a primeira diferença fundamental:

Db2

“Tenho registros relacionais.”

Datomic

“Tenho fatos sobre entidades ao longo do tempo.”

House olha para o quadro.

— Não são duas implementações do mesmo modelo.

— Então são doenças diferentes?

— Não. São anatomias diferentes.


2. O grande choque: UPDATE

Aqui começa a parte que faz o COBOLzeiro apertar a caneca.

Em Db2:

UPDATE CONTA
   SET SALDO = 800
 WHERE ID = '000123';

Estado anterior:

SALDO = 1000

Estado atual:

SALDO = 800

Claro: Db2 possui transaction log, temporal tables, auditing, CDC e recursos para reconstruir histórico.

Mas o modelo lógico mais comum continua sendo:

ANTES
  ↓
UPDATE
  ↓
DEPOIS

Datomic trata a evolução do dado de forma diferente.

O histórico faz parte do modelo.

Conceitualmente:

T1
conta/saldo = 1000

T2
retract saldo 1000
assert saldo 800

Você não simplesmente “apagou” a existência anterior.

Você criou uma nova realidade temporal.

House aponta:

— Um sofre amnésia por padrão lógico.

Wilson responde:

— Db2 não perde o passado, House.

— Eu disse lógico, não físico. Preste atenção.

Essa distinção é importante.


3. Db2 tem logs. Datomic tem memória histórica como filosofia

Db2 registra transações para recovery.

Isso é central.

BEGIN
  UPDATE
  UPDATE
COMMIT

Db2 precisa saber como:

ROLLBACK
REDO
UNDO
RECOVER

O log é infraestrutura de sobrevivência.

Datomic trata a história como parte natural do database value.

Você pode consultar algo como:

as-of
since
history

Ou seja:

QUAL ERA O BANCO
EM T1?

não é uma pergunta excepcional.

É parte natural da arquitetura.

Aqui está uma diferença conceitual enorme.

Db2:

histórico pode ser construído, configurado, auditado e recuperado.

Datomic:

histórico está no DNA.

Nenhum dos dois é “mais sério” automaticamente.

Mas o segundo torna alguns problemas temporais muito mais naturais.


4. Diagnóstico diferencial: SQL versus Datalog

Db2 fala SQL.

E SQL é provavelmente uma das linguagens técnicas mais difundidas da história.

SELECT C.NOME,
       SUM(M.VALOR)
FROM CLIENTE C
JOIN MOVIMENTO M
  ON M.CLIENTE_ID = C.ID
WHERE C.STATUS = 'ATIVO'
GROUP BY C.NOME;

Milhões de pessoas entendem isso.

Datomic usa Datalog.

Exemplo conceitual:

[:find ?nome (sum ?valor)
 :where
 [?c :cliente/nome ?nome]
 [?c :cliente/status :ativo]
 [?m :movimento/cliente ?c]
 [?m :movimento/valor ?valor]]

O modelo é declarativo também.

Mas pensa mais em relações lógicas.

House olha.

— Isso é SQL depois de passar três semanas num retiro filosófico?

Cameron:

— É Datalog.

— Exatamente o que eu disse.

😂


5. Db2 tem tabelas. Datomic tem entidades e atributos

No mundo relacional:

CLIENTE
  |
  +-- ID
  +-- NOME
  +-- CPF
  +-- STATUS

No Datomic:

ENTITY 1001
  |
  +-- :cliente/id
  +-- :cliente/nome
  +-- :cliente/cpf
  +-- :cliente/status

Isso pode parecer semanticamente parecido.

Mas não é idêntico.

No Db2, schema é fortemente estruturado em tabelas.

No Datomic, atributos são entidades do próprio schema.

A flexibilidade muda.

E também muda a maneira de evoluir schema.

Em Datomic existe uma tendência forte a schema aditivo:

adiciona atributo
adiciona relação
preserva passado

No Db2 você pode fazer:

ALTER TABLE

com todos os cuidados que conhece.

O ponto é:

ambos possuem schema, mas a filosofia de evolução é diferente.


6. Índices: Db2 pergunta “qual index?”. Datomic responde “qual ordenação?”

No Db2:

TABLE
  |
  +-- INDEX A
  +-- INDEX B
  +-- INDEX C

Você escolhe índices conforme acesso.

O DBA pensa em:

CLUSTERING
CARDINALITY
SELECTIVITY
INDEX ONLY
MATCHING COLUMNS
ACCESS PATH

Datomic organiza datoms em índices como:

EAVT
AEVT
AVET
VAET

Onde:

E = Entity
A = Attribute
V = Value
T = Transaction

Para um COBOLzeiro com VSAM no DNA, isso é surpreendentemente compreensível.

Você pergunta:

— Como chego ao dado?

Resposta:

— Escolha a ordenação adequada.

Não é VSAM.

Mas seu cérebro reconhece o cheiro de índice.


7. Buffer pool versus cache: dois mundos, mesma física

Agora entramos numa comparação deliciosa.

No Db2, buffer pools são críticos.

DISK
  ↓
BUFFERPOOL
  ↓
SQL

Quanto mais páginas úteis permanecem em memória:

menos I/O
mais performance

Você pensa em:

GETPAGE
HIT RATIO
PAGESET
BUFFER POOL SIZE
PREFETCH

No Datomic:

STORAGE
  ↓
CACHE
  ↓
PEER / COMPUTE
  ↓
QUERY

A diferença é que segmentos imutáveis são particularmente amigáveis a cache.

Se um pedaço histórico não muda, ele não sofre o mesmo problema clássico de invalidação.

House:

— Então descobriram que dados que não mudam são fáceis de cachear?

Foreman:

— Simplificando, sim.

— Nobel amanhã.

😂

Mas tecnicamente é uma vantagem real.


8. Working set: aqui os dois se encontram

Essa é uma das partes mais importantes.

Imagine:

DATABASE = 20 TB
WORKING SET = 10 GB

e você possui cache/memória suficiente.

Pode funcionar muito bem.

Agora:

DATABASE = 2 TB
WORKING SET = 1,5 TB

e sua memória útil é 64 GB.

Problema.

Isso vale tanto para arquiteturas relacionais quanto para Datomic.

O tamanho total do banco não é a única pergunta.

A pergunta é:

quanto do dado útil precisa estar quente ao mesmo tempo?

O velho DBA e o engenheiro Clojure podem brigar sobre filosofia.

A física ignora os dois.


9. CPU: Db2 e Datomic gastam por razões diferentes

Db2 usa CPU em:

SQL execution
sort
join
predicate evaluation
index access
locking
logging
utilities
compression

Datomic usa CPU em:

queries
Datalog
transaction processing
indexing
caching
application-side computation
GC

E aqui aparece uma diferença importante:

Datomic vive no ecossistema JVM.

Então:

GARBAGE COLLECTION

entra no prontuário.

O COBOLzeiro:

— Finalmente achei o tumor.

House:

— Não. Só um sintoma.


10. Transações: ambos levam ACID a sério

Db2:

BEGIN
UPDATE
INSERT
COMMIT

ou:

ROLLBACK

Transação é parte central da arquitetura.

Datomic também oferece transações ACID.

Mas sua coordenação de escrita é arquiteturalmente distinta.

No Datomic Pro clássico:

WRITES
  ↓
TRANSACTOR
  ↓
STORAGE

Leituras podem ser distribuídas através de peers.

Isso cria um trade-off interessante:

READ SCALE
↑

muito bem horizontalizado.

Mas writes possuem uma coordenação ordenada.

O veterano imediatamente pergunta:

qual é o throughput máximo de escrita por database?

Essa é uma pergunta correta.


11. Db2 escala diferente

Db2 historicamente escala de várias maneiras.

No mainframe:

Db2
  |
DATA SHARING
  |
Parallel Sysplex

Você pode ter múltiplos members compartilhando dados com locking e buffer management distribuído.

Além disso:

partitioning
parallelism
zIIP
buffer pools
workload management

A filosofia é muito mais:

um sistema transacional extremamente poderoso e coordenado.

Datomic tende mais a:

muitos databases/domínios, reads distribuídos, facts imutáveis e sharding arquitetural.

Nenhuma solução é “mais moderna” por definição.

São estratégias diferentes.


12. Escala: uma base monstruosa ou vários domínios?

No mundo tradicional, é natural encontrar:

PRODUCTION DB2
████████████████████████████████
muitos sistemas
muitas tabelas
muitos anos
████████████████████████████████

Datomic, especialmente em arquiteturas de microservices, incentiva uma decomposição maior:

SERVICE A → DATABASE A
SERVICE B → DATABASE B
SERVICE C → DATABASE C
SERVICE D → DATABASE D

Isso ajuda a explicar números como dezenas de milhares de databases em uma empresa como Nubank.

Mas traz outra complexidade:

distributed consistency
cross-service workflows
events
reconciliation
ownership
observability

House escreve no quadro:

MONOLITO:
complexidade interna

MICROSERVIÇOS:
complexidade distribuída

— Escolha onde quer sofrer.


13. Recovery: aqui o velho médico fica sério

Db2 possui uma história monumental de recuperação.

Você tem:

logs
image copies
RECOVER
REORG
RUNSTATS
utilities
PIT recovery
system-level backup
data sharing recovery

Décadas de prática.

Datomic também possui mecanismos de durabilidade, HA, backups e reconstrução, mas o ecossistema operacional é diferente e muito menor.

Se você perguntar:

“Quem conhece todos os detalhes de recuperação do Db2 em produção?”

há um mercado gigantesco de experiência.

Para Datomic:

o universo é muito menor.

Isso é risco.

Não necessariamente falha da tecnologia.

Mas risco de skills e tooling.


14. Operação: o que acontece às 03:17?

Essa talvez seja a diferença mais subestimada.

Db2 tem:

DBA
sysprog
vendor support
utilities
APARs
PTFs
Redbooks
manuals
decades of incidents

Datomic tem:

smaller community
Clojure expertise
specialized knowledge
fewer battle-tested operators

Hoje possui produção gigantesca em Nubank.

Mas não possui a mesma ubiquidade operacional.

House:

— O remédio novo pode ser excelente.

Wilson:

— Mas?

— Se ninguém no hospital sabe dosar, administrar ou tratar efeitos colaterais, isso também entra no diagnóstico.

Exatamente.


15. Skill gap versus obscuridade

Db2:

difícil achar bons especialistas?
sim

mas existem muitos.

Datomic:

especialistas?
existem

mercado?
pequeno

Agora coloque Clojure junto.

Seu pool de recrutamento diminui ainda mais.

Isso pode ser aceitável para uma empresa que constrói cultura própria, treina pessoas e domina a stack.

Pode ser um desastre para uma empresa que terceiriza tudo e troca consultoria a cada dois anos.

Essa é uma consideração organizacional, não apenas técnica.


16. Vendor lock-in: os dois têm, mas de formas diferentes

Db2:

IBM ecosystem
z/OS integration
utilities
features
licensing
skills

Se você explora profundamente recursos específicos, migrar pode ser caro.

Datomic:

Datomic model
Datalog
Clojure ecosystem
API model
temporal semantics

Também cria dependência.

A diferença é que no caso Datomic o ecossistema é menor.

Mas há uma peculiaridade histórica:

Nubank acabou adquirindo Cognitect.

Então:

usuário
  ↓
produto
  ↓
fabricante

vira

usuário + mantenedor

Isso reduz um risco para Nubank.

Não necessariamente para todos.


17. Histórico e auditoria: Datomic brilha

Se seu domínio vive perguntando:

qual era o estado?
quando mudou?
quem introduziu?
qual sequência produziu isso?

Datomic possui uma elegância impressionante.

Isso pode ser ouro em:

fraude
compliance
investigação
reprodução de estado
auditoria
reprocessamento

Db2 faz isso muito bem com ferramentas e recursos adequados.

Mas frequentemente você precisa arquitetar mais explicitamente:

temporal tables
audit columns
CDC
history tables
logs
triggers

Datomic coloca o tempo no centro.

Essa é provavelmente uma das maiores razões para escolhê-lo.


18. Mas histórico custa storage

Datomic preserva fatos.

Além disso, datoms aparecem em múltiplas ordenações de índice.

Então:

mais história
+
mais índices
=
mais storage

Pode haver compressão e atributos noHistory, mas a filosofia continua.

Db2 pode ser mais econômico se o requisito for apenas estado atual e histórico limitado.

Então:

Datomic

“O passado é precioso.”

Db2

“Diga quanto passado você quer e eu configuro.”

House:

— Um é historiador.

— E o outro?

— Contador.


19. Throughput de escrita: aqui Datomic exige respeito

Se seu sistema é:

READS >>> WRITES

Datomic pode se encaixar muito bem.

Se seu problema é:

WRITE FIREHOSE

você precisa medir cuidadosamente.

Porque a serialização transacional por database e background indexing criam limites naturais.

Se a taxa de entrada ultrapassa a capacidade de indexação:

MEMORY INDEX cresce
   ↓
back pressure
   ↓
write throughput reduz

Db2 também possui limites, obviamente.

Locks.

Log throughput.

I/O.

Latches.

Buffer contention.

Mas sua arquitetura e histórico de workloads OLTP de escrita extrema são muito conhecidos.

Para uma central bancária gigantesca, isso pesa.


20. Query analítica: nenhum dos dois substitui tudo

Datomic não deveria virar:

data lake
warehouse
log bucket
BI universal

Da mesma forma, Db2 OLTP não deveria necessariamente ser martelado com qualquer analytics gigantesco sem arquitetura adequada.

No mundo moderno:

SYSTEM OF RECORD
   ↓
CDC/EVENTS
   ↓
ANALYTICS PLATFORM

é frequentemente melhor.

House:

— Então não coloque tudo no mesmo banco?

— Exato.

— Finalmente uma ideia saudável.


21. Mainframe versus cloud: não confunda database com plataforma

Db2 pode existir em várias plataformas, mas para nosso universo Bellacosa, pense em Db2 for z/OS.

Aí você ganha:

IBM Z
z/OS
WLM
Sysplex
RACF
zIIP
SMF
RMF
CICS
IMS
MQ

O database vive dentro de uma infraestrutura extremamente integrada.

Datomic normalmente vive numa arquitetura distribuída/cloud-native:

AWS
compute
storage
DynamoDB/S3 em Datomic Cloud
Clojure
services
Kafka
Kubernetes

Então parte da comparação não é:

Datomic vs Db2

É:

ARQUITETURA DISTRIBUÍDA
vs
PLATAFORMA INTEGRADA

Isso muda custo, skills, observabilidade, DR e operação.


22. Segurança: Db2 herda um castelo

Db2 for z/OS vive num ambiente com:

RACF
SAF
audit
SMF
encryption
TLS
dataset protection
roles
privileges

É um ecossistema de segurança brutalmente maduro.

Datomic depende de sua arquitetura e da cloud:

IAM
network policies
KMS
secrets
AWS controls
application authorization

Ambos podem ser seguros.

Mas segurança no mainframe tende a ser altamente centralizada e conhecida.

No cloud-native, a superfície é mais distribuída.

Mais flexível.

E também mais fácil de configurar errado.


23. Observabilidade: SMF versus mundo distribuído

Db2:

SMF
RMF
IFCID
statistics
accounting traces
performance monitors

Você consegue investigar profundamente.

Datomic + microservices:

metrics
logs
traces
OpenTelemetry
application telemetry
AWS metrics
JVM metrics
GC metrics

O problema moderno é que uma transação pode atravessar dez serviços.

Então observability distribuída vira essencial.

O velho DBA olha para isso e diz:

— Vocês desmontaram o sistema e agora precisam descobrir onde cada pedaço está.

😂

É maldade.

Mas contém um pouco de verdade.


24. Latência: proximidade importa

Db2 for z/OS próximo de CICS:

CICS
 ↓
COBOL
 ↓
Db2

latência muito baixa e altamente previsível dentro da plataforma.

Datomic pode ganhar em leituras locais através de caches/peers.

Mas numa arquitetura cloud existem mais possibilidades de:

network hop
service hop
timeout
retry

Em compensação, você pode escalar serviços independentemente.

Trade-off.

Sempre trade-off.


25. Consistência distribuída: Datomic simplifica algumas coisas e complica outras

Dentro de um database Datomic, consistência é forte e transações são ordenadas.

Mas se você possui:

DB A
DB B
DB C

e um workflow precisa alterar todos:

agora você tem uma questão distribuída.

Pode usar:

events
sagas
reconciliation
idempotency

O velho mainframe pensa:

“Então vocês tiraram a complexidade do banco e colocaram na aplicação?”

Às vezes, sim.

Não por incompetência.

Por escolha arquitetural.


26. Db2 também não é mágico

Agora vamos bater no outro paciente.

Db2 pode virar:

monstro

com:

milhares de tabelas
milhares de índices
stored procedures
triggers
views
packages
utilities
bindings
access paths
partitions

E se ninguém cuida:

RUNSTATS velho
REBIND errado
buffer mal dimensionado
index demais
SQL ruim
locking
tablespace gigante

a criatura degrada.

House:

— Tecnologia madura não cura arquitetura ruim.

Exatamente.


27. Por que eu escolheria Db2?

Se eu tivesse:

core financeiro crítico
alto volume OLTP
equipe mainframe madura
CICS
COBOL
IMS/MQ
necessidade de SQL
forte integração z/OS
ferramentas robustas
auditoria consolidada

Db2 seria uma escolha extremamente natural.

Principalmente quando:

risk tolerance = LOW

e:

operational predictability = VERY HIGH

Você compra não apenas database.

Compra décadas de ecossistema.


28. Por que eu escolheria Datomic?

Se eu tivesse:

greenfield
Clojure
domínio temporal forte
histórico essencial
muitos reads
arquitetura distribuída
microservices
preciso reconstruir estados

Datomic poderia ser extremamente atraente.

Especialmente se minha organização estivesse disposta a dominar:

Clojure
Datalog
capacity model
sharding
observability
cloud operations

Ele pode reduzir complexidade em problemas históricos/temporais que seriam mais trabalhosos em bancos tradicionais.


29. O maior erro: escolher Datomic porque Nubank usa

House escreve:

NUBANK USES IT
≠
YOU SHOULD USE IT

Isso vale para qualquer tecnologia.

Netflix usa algo?

Legal.

Google usa algo?

Interessante.

Banco X usa algo?

Ótimo.

Pergunta:

seu problema é igual?

Provavelmente não.

Arquitetura de referência não é receita de bolo.


30. O segundo maior erro: escolher Db2 só porque “sempre usamos”

Agora House vira para o outro lado.

WE ALWAYS USED DB2
≠
DB2 IS BEST HERE

Se o sistema é novo, isolado, temporal, distribuído e possui requisitos diferentes, talvez Db2 seja exagero ou inadequado economicamente.

Legado pode ser estabilidade.

Mas também pode virar automatismo.

O bom arquiteto pergunta:

por que estamos escolhendo isso?

Não:

“qual tecnologia eu já conheço?”


31. Comparativo direto

TemaDb2Datomic
ModeloRelacionalFatos imutáveis
QuerySQLDatalog
AtualizaçãoUPDATEassert/retract
HistóricoRecursos específicos/logs/temporalNativo ao modelo
TransaçõesACIDACID
EscritasOLTP altamente maduroSerializadas por database
LeiturasMuito escalável, inclusive Data SharingPeers/compute horizontais
CacheBuffer poolsSegments/caches imutáveis
ÍndicesDefinidos pelo schema/workloadEAVT/AEVT/AVET/VAET
EcossistemaGigantescoPequeno
SkillsAmplamente disponíveisNicho
ToolingExtremamente maduroEspecializado
HA/DRDécadas de soluçõesDisponível, arquitetura diferente
Cloud fithíbrido/múltiplas opçõesforte
Mainframe fitnativo em z/OSnão
Temporalidadepoderosa, mas configuradacentral
Vendor riskIBMecossistema Datomic/Nubank
Greenfielddependeforte candidato
Core bancário legadoexcelente fitmigração não trivial

32. Easter egg: House faz o teste do saldo

House escreve:

SALDO INICIAL = 1000

Depois:

COMPRA = 200

Pergunta:

— Db2?

UPDATE CONTA
SET SALDO = 800;

— Datomic?

assert novo saldo 800
retract saldo 1000

House:

— Qual está certo?

Foreman:

— Ambos.

— Finalmente.

Depois:

— Qual consegue dizer que o saldo foi 1000 antes?

Cameron:

— Ambos podem, se o Db2 estiver adequadamente configurado.

House sorri.

— Agora você está aprendendo.


33. O verdadeiro teste não é performance

É falha.

Pergunte:

O que acontece se:
  • storage ficar lento?

  • rede quebrar?

  • processo morrer?

  • região cloud falhar?

  • transaction log encher?

  • buffer pool degringolar?

  • indexing atrasar?

  • GC congelar?

  • deploy inserir bug?

  • schema mudar errado?

  • restore falhar?

  • DR não estiver testado?

Tecnologia não se prova em benchmark.

Prova-se:

quando o mundo fica feio.


34. O diagnóstico final de House

House olha para o quadro.

De um lado:

Db2

Do outro:

Datomic

Ele apaga a palavra:

VERSUS

e escreve:

FOR WHAT?

Porque esse é o diagnóstico.

Db2 não é “velho demais”.

Datomic não é “novo demais”.

Db2 traz:

maturidade
ecossistema
ferramentas
performance OLTP
integração z/OS
skills
previsibilidade

Datomic traz:

imutabilidade
tempo
fatos
histórico
read scaling
arquitetura funcional
modelagem diferente

São propostas distintas.


☕ Epílogo — O paciente sobrevive

São 03h42.

Produção liga.

Foreman atende.

— Temos problema.

House:

— Db2?

— Não.

— Datomic?

— Também não.

— Então?

— A aplicação cobrou o cliente duas vezes.

House olha para o time.

— Infrastructure?

— Tudo verde.

— Database?

— Consistente.

— Logs?

— Perfeitos.

— Então quem errou?

Silêncio.

House aponta para o quadro:

APPLICATION LOGIC

— Everybody lies.

Incluindo código.

O COBOLzeiro no canto toma café.

Porque essa é a verdade que atravessa VSAM, IMS, Adabas, Db2, Datomic, Oracle, PostgreSQL e qualquer banco que ainda inventaremos:

um database pode armazenar perfeitamente a coisa errada.

No final, a pergunta nunca foi:

“Qual database é melhor?”

É:

“Qual arquitetura torna mais difícil errar, mais fácil detectar quando erramos e mais seguro recuperar quando inevitavelmente errarmos?”

Para um core bancário tradicional fortemente integrado ao IBM Z, com décadas de lógica COBOL/CICS e requisitos de altíssimo throughput transacional, Db2 continua sendo uma escolha absurdamente forte.

Para um sistema greenfield, distribuído, fortemente temporal, Clojure-native, com histórico e reconstrução de estado no centro do problema, Datomic pode oferecer uma elegância que o modelo relacional não entrega da mesma maneira sem bastante engenharia adicional.

Mas se alguém entrar na reunião dizendo:

“Vamos usar Datomic porque Nubank usa.”

House deveria expulsá-lo.

E se outro disser:

“Vamos usar Db2 porque sempre usamos.”

House também.

Depois perguntaria:

QUAL É O PROBLEMA?

Só então escolheria o tratamento.

Porque banco de dados, assim como medicina, não é sobre preferência pessoal.

É sobre diagnóstico correto, efeitos colaterais conhecidos e o paciente continuar vivo depois do deploy.

☕ Fim do café.

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...