☕ 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

quinta-feira, 4 de setembro de 2025

CSI Las Vegas, COBOL e o Caso da Nuvem que Ficou sem Máquinas: quando o Nubank Cresceu até Encontrar os Limites Físicos da AWS

 

Bellacosa Mainframe e o caso da nuvem que evaporou

☕ Um Café no Bellacosa Mainframe

CSI Las Vegas, COBOL e o Caso da Nuvem que Ficou sem Máquinas: quando o Nubank Cresceu até Encontrar os Limites Físicos da AWS

🔬 Datomic, Clojure, Kafka, Kubernetes, sharding, memória, garbage collection, Pangeia, Deriva Continental, 21 mil databases e a investigação do estranho incidente em que o suspeito parecia ser a AWS — até Grissom olhar para a arquitetura e perguntar: “Vocês disseram que a nuvem era infinita. Quem verificou isso?”

São 02h17.

Las Vegas continua acesa.

No laboratório do CSI, Gil Grissom observa silenciosamente uma fotografia ampliada.

Não há sangue.

Não há impressão digital.

Não há cartucho no chão.

Existe apenas uma mensagem:

INSUFFICIENT CAPACITY

Nick Stokes olha para a tela.

— AWS?

Grissom não responde.

Sara Sidle aproxima-se.

— Nubank.

— Quantos clientes?

— Milhões.

Na outra extremidade do laboratório, um velho programador COBOL bebe café diante de um terminal verde.

Ele ouve a conversa.

— Cloud?

Sara confirma.

— Cloud.

O veterano pergunta:

— E acabou recurso?

— Parece que sim.

Ele sorri.

— Então finalmente encontramos o datacenter.

Grissom vira lentamente a cabeça.

— Explique.

O COBOLzeiro coloca a caneca sobre a mesa.

CAFÉ
+
COBOL
=
EVIDÊNCIA

— A nuvem nunca desapareceu com o computador, senhor Grissom.

Pausa dramática.

— Ela apenas colocou o computador atrás de uma API.

YEEEEAAAAHHHH!

Óculos escuros.

Abertura.

Hoje vamos investigar um dos episódios mais fascinantes da engenharia do Nubank: a afirmação, registrada pela própria engenharia da empresa, de que sua estratégia de crescimento chegou a enfrentar situações nas quais a AWS não tinha máquinas disponíveis suficientes para acompanhar o ritmo de scaling exigido pela arquitetura.

Não significa que o Nubank derrubou a Amazon.

Não significa que acabou EC2 no planeta.

E definitivamente não significa que Jeff Bezos encontrou uma fatura roxa e gritou:

S0C4

A história real é tecnicamente muito mais interessante.


🔬 EVIDÊNCIA 001 — A cena do crime começa em 2013

O Nubank foi fundado em 2013 e teve a vantagem — e também o desafio — de construir sua infraestrutura praticamente sem um legado bancário anterior.

Quando Lucas Cavalcanti entrou no Nubank, no fim de 2013, estava entre os primeiros engenheiros da empresa. O relato retrospectivo publicado pelo Nubank em 20 de agosto de 2025 conta que os sistemas iniciais foram construídos principalmente utilizando:

Clojure
+
Datomic
+
AWS
+
CloudFormation
+
AMI

Com o crescimento, vieram Docker, Kubernetes, microsserviços e posteriormente uma arquitetura de Core Banking preparada para múltiplos produtos e países.

10 anos de engenharia no Nubank — 20 de agosto de 2025

Isso já representa uma diferença gigantesca para o banco tradicional.

Um grande banco que começou décadas atrás normalmente acumulou algo parecido com:

                CANAIS
                   |
            MIDDLEWARE/APIs
                   |
          +--------+--------+
          |                 |
        CICS               IMS
          |                 |
        COBOL             COBOL
          |                 |
       Db2/VSAM          IMS DB
          |
          MQ
          |
        BATCH

O Nubank começou muito mais próximo de:

                APP
                 |
                APIs
                 |
            MICROSERVICES
                 |
       +---------+---------+
       |                   |
    DATOMIC              KAFKA
       |                   |
       +---------+---------+
                 |
                AWS

Não pense que um desenho é automaticamente superior ao outro.

São filosofias arquiteturais diferentes.

Mas ambas precisam responder à pergunta que assombra todo sistema financeiro:

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


🔬 EVIDÊNCIA 002 — Clojure e Datomic

Agora Grissom encontra uma pista estranha.

(println "BANCO")

— O que é isso?

Moss, que inexplicavelmente entrou no episódio errado, responde:

— Clojure.

O COBOLzeiro olha.

— Por que tem tantos parênteses?

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

O Nubank fez dela uma tecnologia importante desde seus primeiros sistemas.

Mas ainda mais interessante é Datomic.

Datomic possui uma filosofia muito diferente da imagem clássica que o COBOLzeiro pode ter de um banco SQL.

Em um modelo simplificado:

UPDATE CONTA
   SET SALDO = 800
 WHERE CONTA = 123;

pensamos no estado atual.

Datomic enfatiza fortemente fatos e histórico.

Conceitualmente:

T0 → saldo 1000
T1 → compra -200
T2 → saldo 800

Isso combina maravilhosamente com outra ideia usada pelo Nubank:

Event Sourcing.

Em 11 de fevereiro de 2020, Gustavo Bicalho, então engenheiro de software do Nubank, publicou uma explicação detalhada sobre essa arquitetura.

Em vez de armazenar somente:

SALDO = 800

você pode preservar a sequência que produziu aquele estado:

CONTA CRIADA
     |
     v
+1000
     |
     v
-200
     |
     v
SALDO ATUAL = 800

Isso é extremamente interessante para sistemas financeiros porque histórico, auditoria e reconstrução de estado são requisitos naturais do domínio.

Uma floresta digital: o cache perene — 11 de fevereiro de 2020


🔬 EVIDÊNCIA 003 — O Datomic separa responsabilidades

Aqui precisamos abrir o corpo.

Metaforicamente, naturalmente.

Datomic separa responsabilidades que normalmente imaginamos reunidas em um servidor de banco de dados.

Simplificando:

                  DATOMIC

                    WRITE
                      |
                      v
                 TRANSACTOR
                      |
                      v
                   STORAGE
                      ^
                      |
           +----------+----------+
           |          |          |
         PEER       PEER       PEER
           |          |          |
        QUERY      QUERY      QUERY

Isso oferece características extremamente interessantes.

Mas havia uma pista escondida:

memória.

Os peers podiam manter informações em cache para responder rapidamente às consultas.

Quanto mais dados...

mais cache.

Quanto mais clientes...

mais dados.

Quanto mais requisições...

mais trabalho.

O que poderia dar errado?

Grissom olha para a câmera.

Tudo.


🔬 EVIDÊNCIA 004 — O primeiro cadáver: memória

O artigo de 11 de fevereiro de 2020 registra exatamente o problema.

As máquinas começaram a apresentar:

OUT OF MEMORY

E longas pausas de:

GARBAGE COLLECTION

A primeira reação foi perfeitamente compreensível.

PROBLEMA: MEMÓRIA

SOLUÇÃO:
ADD MORE MEMORY

Funcionou.

Por algum tempo.

Então voltou.

Aumentaram novamente.

Funcionou.

Até que chegaram a instâncias na casa dos 100 GB de memória, segundo o relato técnico, e ainda estavam operando perigosamente próximas do limite.

O velho sysprog olha para Grissom.

— Scale-up.

— Traduza.

— Máquina maior.

32 GB
  |
  v
64 GB
  |
  v
100 GB
  |
  v
???

Existe um problema fundamental.

Não importa quanto dinheiro você tenha.

Em algum ponto:

BIGGEST-MACHINE-AVAILABLE

é realmente a maior máquina disponível.


🔬 EVIDÊNCIA 005 — Por que tanta memória?

A investigação encontrou duas causas particularmente interessantes.

Primeiro, o modelo baseado em eventos exigia carregar bastante informação para o cache em memória dos peers.

Segundo, qualquer instância do serviço poderia receber uma determinada requisição.

Imagine que o mesmo cliente consulta seu saldo quatro vezes.

Poderíamos ter:

REQUEST 1 → INSTANCE A → LOAD CUSTOMER
REQUEST 2 → INSTANCE B → LOAD CUSTOMER
REQUEST 3 → INSTANCE C → LOAD CUSTOMER
REQUEST 4 → INSTANCE D → LOAD CUSTOMER

Quatro máquinas podem acabar fazendo trabalho semelhante.

O próprio artigo técnico descreve esse desperdício: diferentes instâncias carregando repetidamente dados relacionados aos mesmos clientes.

O problema não era simplesmente:

PRECISAMOS DE MAIS RAM

Era:

NOSSO MODELO DE DISTRIBUIÇÃO
FAZ MUITAS MÁQUINAS
REPETIREM TRABALHO

Isso muda completamente o diagnóstico.

CSI chama isso de:

encontrar a causa da morte.

Mainframe chama de:

parar de aumentar REGION e descobrir quem está comendo storage.


🔬 EVIDÊNCIA 006 — 2016: entra o sharding

Segundo a retrospectiva técnica publicada pelo Nubank em 20 de agosto de 2025, o sharding começou a ser introduzido em 2016.

A ideia é dividir.

Em vez de:

                  TODOS
                    |
                    v
              +-----------+
              | DATABASE  |
              +-----------+

temos conceitualmente:

                   CLIENTES
                      |
          +-----------+-----------+
          |           |           |
          v           v           v
       SHARD A     SHARD B     SHARD C

Cada shard responde por uma parcela.

Não sabemos que critério específico é utilizado em todos os sistemas do Nubank, portanto não devemos inventá-lo.

Mas imagine didaticamente:

CLIENTES 000-299 → SHARD A
CLIENTES 300-599 → SHARD B
CLIENTES 600-999 → SHARD C

Agora você pode crescer adicionando shards.

SCALE-UP

      BIGGER
        |
        v
   BIGGER MACHINE

vira:

SCALE-OUT

 SHARD 1
 SHARD 2
 SHARD 3
 SHARD 4
 SHARD 5

Essa mudança é gigantesca.


🔬 EVIDÊNCIA 007 — E então o suspeito vira AWS

O sharding resolveu o problema?

Sim.

Temporariamente.

Essa palavra deveria estar impressa na parede de todo departamento de arquitetura.

NO SOLUTION SCALES FOREVER.

O Nubank continuou crescendo.

A retrospectiva publicada em 2025 relata explicitamente que as soluções de sharding implantadas a partir de 2016 funcionaram durante algum tempo, mas acabaram encontrando limites físicos, inclusive situações nas quais a AWS ficou sem máquinas disponíveis suficientes para acompanhar o ritmo de scaling exigido pelo Nubank.

É aqui que nasceu a história:

“O Nubank quebrou a AWS.”

CSI pede perícia.

Resultado:

AWS GLOBAL OUTAGE ............ NÃO
AWS INTEIRA ESGOTADA ......... NÃO
INTERNET DESTRUÍDA ........... NÃO
CAPACIDADE REQUERIDA
PELO MODELO DE SCALING ....... SIM

A diferença é enorme.


🔬 EVIDÊNCIA 008 — Cloud não é magia

Abra uma instância EC2.

Atrás dela existe:

DATACENTER
   |
   +-- RACK
       |
       +-- SERVER
           |
           +-- CPU
           +-- RAM
           +-- NIC
           +-- STORAGE

Existe eletricidade.

Refrigeração.

Processadores.

Memória.

Rede.

Capacidade.

Cloud é uma extraordinária camada de abstração sobre tudo isso.

Mas:

CLOUD != INFINITE

Se você precisa de uma determinada família de máquinas, em determinada região, com determinada configuração e em grande quantidade, existe capacidade física por trás dessa solicitação.

É por isso que capacity planning não morreu.

Ele apenas colocou camiseta, tênis e começou a falar inglês.


🔬 EVIDÊNCIA 009 — Quotas também existem

Existe outro limite além do hardware.

Quotas.

Em 9 de abril de 2025, o Nubank publicou uma análise dedicada justamente à gestão dos limites da nuvem.

Naquela data, a empresa relatava operar:

+4.000 microsserviços
dezenas de milhares de pods
72 bilhões de eventos Kafka por dia
milhões de requisições por segundo

Tudo orquestrado em enorme escala.

Gerenciando limites na nuvem — 9 de abril de 2025

Existem quotas envolvendo diferentes recursos AWS.

Então capacity engineering passa a perguntar:

QUANTO TEMOS?

QUANTO USAMOS?

QUAL A TAXA DE CRESCIMENTO?

QUANDO CHEGAMOS AO LIMITE?

QUAL LIMITE PODE SER AUMENTADO?

QUAL LIMITE EXIGE REDESIGN?

O velho sysprog levanta a mão.

— Isso é capacity planning.

Silêncio constrangedor.

— Sim.

Ele volta para o café satisfeito.


🔬 EVIDÊNCIA 010 — Pangeia

Agora encontramos um Easter egg maravilhoso.

No começo, boa parte da infraestrutura estava concentrada em poucas e enormes contas AWS.

Internamente o Nubank chamou isso de:

Pangeia.

Sim.

O supercontinente pré-histórico.

                 PANGEIA

      +---------------------------+
      |        AWS ACCOUNT        |
      |                           |
      | service service service   |
      | kafka kubernetes datomic  |
      | service service service   |
      |                           |
      |      TODO MUNDO AQUI      |
      +---------------------------+

Enquanto a empresa era menor, isso era administrável.

Com crescimento gigantesco, surgiram problemas.

Um incidente pequeno poderia ter um blast radius grande.

Separar staging de produção ficava mais difícil.

Deployments podiam ser prejudicados.

Quotas compartilhadas tornavam-se um problema.

A arquitetura tinha criado um supercontinente tecnológico.

Grissom observa o mapa.

— Continentes se movem.

O arquiteto responde:

— Exatamente.


🔬 EVIDÊNCIA 011 — Deriva Continental

A solução ganhou outro nome fantástico:

Continental Drift — Deriva Continental.

Em vez de:

           PANGEIA
              |
       TUDO CONECTADO

passaram para uma estratégia multi-account:

      ACCOUNT A
         |
      DOMAIN A


      ACCOUNT B
         |
      DOMAIN B


      ACCOUNT C
         |
      DOMAIN C

Isso melhora isolamento.

Agora um problema em:

DOMAIN A 💥

não significa necessariamente:

A 💥
B 💥
C 💥
D 💥
TODO MUNDO 💥

O blast radius diminui.

É uma ideia fundamental de resiliência:

não tente apenas impedir falhas; limite o tamanho da destruição quando elas inevitavelmente acontecerem.

Esse princípio vale para AWS.

Vale para Kubernetes.

Vale para CICS.

Vale para Parallel Sysplex.

Vale para compartimentos estanques de navios.

E vale para CSI quando Hodges resolve experimentar alguma substância misteriosa no laboratório.


🔬 EVIDÊNCIA 012 — Sharding virou filosofia

A parte mais interessante é que sharding deixou de ser apenas:

DIVIDIR DATABASE

e passou a influenciar diferentes camadas.

A infraestrutura descrita pelo Nubank envolve particionamento de serviços, Datomic, Kafka e outros componentes para evitar que um único domínio de capacidade vire gargalo.

Conceitualmente:

                         TRAFFIC
                            |
          +-----------------+-----------------+
          |                 |                 |
          v                 v                 v
       SHARD A           SHARD B           SHARD C
          |                 |                 |
     SERVICES A        SERVICES B        SERVICES C
          |                 |                 |
      DATOMIC A         DATOMIC B         DATOMIC C
          |                 |                 |
       KAFKA A           KAFKA B           KAFKA C

Agora crescer pode significar:

ADD SHARD

em vez de:

PROCURE UMA MÁQUINA MAIOR

Essa é uma mudança arquitetural profunda.


🔬 EVIDÊNCIA 013 — 450 milhões de eventos de fraude por dia

Agora o CSI encontra os números que explicam por que tudo isso é necessário.

Na plataforma de análise de risco e fraude, o Nubank divulgou números impressionantes:

~450 milhões de eventos/dia

~5 milhões de requisições internas/minuto

20 shards somente no Brasil

Um único evento, como uma transação Pix, pode desencadear dezenas de processos subsequentes. A stack divulgada para essa plataforma inclui Clojure, Datomic sobre DynamoDB, Kafka e modelos de machine learning em Python, além de logs, traces e métricas em tempo real.

Como o Nubank escalou sua plataforma de defesa contra fraudes

Imagine:

                 PIX
                  |
        +---------+---------+
        |         |         |
      RISCO    FRAUDE    IDENTIDADE
        |         |         |
       ML       RULES     DEVICE
        |         |         |
        +---------+---------+
                  |
                ACTION

Uma operação do cliente não corresponde necessariamente a uma operação interna.

Pode produzir dezenas.

Essa é uma lição fundamental.

Cliente não é unidade de capacidade.

A unidade real pode ser:

EVENTOS
REQUISIÇÕES
TPS
CPU
MEMÓRIA
I/O
NETWORK
STORAGE

🔬 EVIDÊNCIA 014 — 21 mil databases

E então encontramos uma evidência datada de 1º de julho de 2026.

O Nubank informou operar mais de 21 mil databases em produção, distribuídos entre Brasil, México e Colômbia.

Ainda mais curioso: a camada central de bancos de dados é administrada diretamente por uma equipe de apenas cinco engenheiros, apoiada por automação, governança e ownership distribuído entre as equipes.

Como o Nubank opera mais de 21 mil databases — 1º de julho de 2026

COBOLzeiro:

— VINTE E UM MIL?

Sim.

Mas cuidado.

Não pense:

21.000 Db2 Subsystems gigantescos

Microserviços alteram completamente a granularidade.

Muitos serviços possuem seu próprio armazenamento.

O número ilustra outra realidade:

nessa escala, operação manual morreu.

Você não pode ter alguém abrindo terminal e configurando 21 mil databases artesanalmente.

Precisa de:

AUTOMATION
+
POLICY
+
SELF-SERVICE
+
OBSERVABILITY
+
GOVERNANCE

🔬 EVIDÊNCIA 015 — Mainframe versus cloud

Agora Grissom coloca as duas arquiteturas lado a lado.

Filosofia mainframe

              IBM Z
                |
      +---------+---------+
      |         |         |
     CICS      Db2       IMS
      |         |         |
    COBOL      DATA      DATA
      |
      MQ
      |
     JES

Grande capacidade vertical.

Integração profunda.

Centralização.

Controle extraordinário.

Alta confiabilidade.

Filosofia cloud-native

            CLOUD
              |
       KUBERNETES
              |
   +----------+----------+
   |          |          |
SERVICE A  SERVICE B  SERVICE C
   |          |          |
 DATA A     DATA B     DATA C
   |
 EVENTS

Mais distribuição.

Mais componentes.

Mais scale-out.

Mais independência.

Mas também mais rede.

Mais observabilidade.

Mais pontos potenciais de falha.

Não existe almoço grátis.


🔬 EVIDÊNCIA 016 — O COBOLzeiro já conhece metade desses problemas

Faça a tradução:

MAINFRAME             CLOUD

CPU                   vCPU
storage               storage
WLM                   scheduler/autoscaling
SMF/RMF               observability
MQ                    Kafka/event streaming
RACF                  IAM
LPAR                   isolation
capacity planning      capacity engineering
chargeback             FinOps

Essas não são equivalências técnicas perfeitas.

Mas são ótimas pontes mentais.

O iniciante COBOL começa a perceber:

Cloud não inventou disponibilidade, workload, segurança, capacity e auditoria.

Criou novas maneiras de resolvê-los.


🔬 EVIDÊNCIA 017 — Passo a passo para estudar esse caso

Se você está começando COBOL, estude nesta ordem.

1. Aprenda transações.

COMMIT
ROLLBACK
ACID
LOCK
RECOVERY

2. Aprenda CICS.

Entenda task, transaction, program e region.

3. Aprenda Db2.

Entenda buffer, log, index, isolamento e recuperação.

4. Aprenda MQ.

Depois Kafka fica muito mais compreensível.

5. Estude scale-up versus scale-out.

MAQUINA MAIOR

versus:

MAIS MÁQUINAS

6. Aprenda sharding.

Pergunte sempre:

Qual é a chave de particionamento?

7. Estude Kubernetes.

Mas entenda primeiro o problema que ele resolve.

8. Estude observabilidade.

LOGS
METRICS
TRACES

Compare mentalmente com SMF, RMF e traces dos subsistemas.

9. Estude FinOps e capacity.

Porque:

CLOUD RESOURCE

continua significando:

DINHEIRO

10. Faça sempre a pergunta CSI:

Qual é a causa raiz?

Não aceite:

PRECISA MAIS MEMÓRIA

antes de descobrir:

POR QUE PRECISA MAIS MEMÓRIA?

🔬 EVIDÊNCIA FINAL — Então Nubank quebrou a AWS?

Grissom reúne a equipe.

Quadro branco.

Fotos.

Diagramas.

Logs.

A conclusão aparece:

CAUSA DA MORTE:

NÃO FOI AWS DOWN.

NÃO FOI "CLOUD ACABOU".

FOI UMA ARQUITETURA EM HIPERCRESCIMENTO
ENCONTRANDO LIMITES FÍSICOS
DE SUA ESTRATÉGIA DE ESCALA.

O sharding introduzido em 2016 ajudou.

Depois precisou evoluir.

Pangeia precisou fragmentar-se.

Vieram múltiplas contas.

Deriva Continental.

Mais isolamento.

Mais automação.

Mais sharding.

Kubernetes.

Kafka.

Datomic.

Capacity engineering.

Observabilidade.

E uma mudança filosófica fundamental:

NÃO PROCURE
UMA MÁQUINA INFINITA.

CONSTRUA UM SISTEMA
QUE NÃO PRECISE DELA.

☕ Epílogo — 03h42 no laboratório

O caso está encerrado.

Sara guarda as evidências.

Nick fecha o notebook.

Grissom encontra o COBOLzeiro ainda diante do terminal.

— Então o que você aprendeu?

O veterano pensa.

— Que cloud é impressionante.

— Só isso?

— Não.

Ele olha para o diagrama:

CLOJURE
   |
DATOMIC
   |
KAFKA
   |
KUBERNETES
   |
AWS

Depois olha para:

COBOL
 |
CICS
 |
DB2
 |
MQ
 |
IBM Z

— Mudaram quase todas as ferramentas.

— E?

— Os problemas continuam vindo ao mesmo laboratório.

Grissom sorri.

Disponibilidade.

Consistência.

Capacidade.

Memória.

Concorrência.

Performance.

Segurança.

Auditoria.

Recuperação.

Custos.

Falhas.

O COBOLzeiro termina o café.

— Há quarenta anos alguém pergunta:

QUANTO AINDA CABE?

Hoje o cloud engineer pergunta exatamente a mesma coisa.

Só mudou o dashboard.

Ele se levanta.

Na tela aparece uma última mensagem:

CASE CLOSED.

E abaixo:

CLOUD IS SOMEONE ELSE'S
CAPACITY PLANNING PROBLEM.

UNTIL IT BECOMES YOURS.

Fim do café.

☕ Gostou deste café?
Siga o Bellacosa Mainframe e acompanhe os próximos artigos.
SEGUIR O BLOG

Sem comentários:

Enviar um comentário

De Fã para Fã. Conteúdo não oficial produzido como homenagem, comentário, análise ou paródia. Personagens, marcas e obras eventualmente mencionados pertencem aos seus respectivos titulares.
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...