☕ 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 Sistemas Distribuídos. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Sistemas Distribuídos. Mostrar todas as mensagens

segunda-feira, 27 de abril de 2026

💣🔥 LAB DE GUERRA — FINTECH NO z/OS: TPS REAL, LEDGER CONSISTENTE E MULTI-REGIÃO SEM ILUSÃO 🔥💣

 

Bellacosa Mainframe em Lab TPS 

💣🔥 LAB DE GUERRA — FINTECH NO z/OS: TPS REAL, LEDGER CONSISTENTE E MULTI-REGIÃO SEM ILUSÃO 🔥💣

Aqui não é slide. Aqui é produção simulada.
Você vai montar um fluxo que separa quem roda código de quem segura banco no ar.


⚙️ VISÃO DO LAB (ARQUITETURA)

👉 Dois mundos:

🔴 Região BR (CICS AOR)

  • Entrada da transação
  • Validação
  • Débito local (ledger consistente)

🔵 Região MX (CICS AOR)

  • Recebe evento assíncrono
  • Aplica crédito

⚫ TOR (Terminal Owning Region)

  • Entrada de carga (simulação TPS)

🧠 OBJETIVO DO LAB

Você vai provar na prática:

  • 💰 Ledger consistente localmente
  • ♻️ Idempotência salvando sua vida
  • 🔁 Assíncrono dominando multi-região
  • 📊 TPS ≠ Throughput (medido, não teórico)

📦 COMPONENTES

  • COBOL (CICS)
  • VSAM KSDS (ledger)
  • DB2 (controle/idempotência)
  • TSQ/TDQ (fila assíncrona simulando Kafka)
  • JCL (carga batch TPS)

🧾 1. LEDGER CONSISTENTE (COBOL + VSAM)

💣 Aqui não tem brincadeira: saldo é consistência forte local

Estrutura VSAM

ACCOUNT-ID PIC X(10)
BALANCE PIC S9(15)V99
LAST-UPDATE PIC X(26)

COBOL (CICS - débito)

EXEC CICS READ
FILE('LEDGER')
INTO(WS-ACCOUNT)
RIDFLD(WS-ACCOUNT-ID)
END-EXEC

IF WS-BALANCE < WS-AMOUNT
MOVE 'INSUFFICIENT' TO WS-STATUS
EXEC CICS ABEND END-EXEC
END-IF

SUBTRACT WS-AMOUNT FROM WS-BALANCE

EXEC CICS REWRITE
FILE('LEDGER')
FROM(WS-ACCOUNT)
END-EXEC

🔥 Isso aqui é o seu TPS real
👉 Só conta se COMMITOU


♻️ 2. IDEMPOTÊNCIA (DB2 — ANTI-DUPLICAÇÃO)

💣 Sem isso, retry vira fraude.

Tabela DB2

CREATE TABLE TX_CONTROL (
TX_ID VARCHAR(36) PRIMARY KEY,
STATUS VARCHAR(10),
CREATED_AT TIMESTAMP
);

Lógica COBOL

EXEC SQL
SELECT STATUS INTO :WS-STATUS
FROM TX_CONTROL
WHERE TX_ID = :WS-TX-ID
END-EXEC

IF SQLCODE = 0
MOVE 'DUPLICATE' TO WS-STATUS
GOBACK
END-IF

EXEC SQL
INSERT INTO TX_CONTROL VALUES (:WS-TX-ID, 'NEW', CURRENT TIMESTAMP)
END-EXEC

🔥 Resultado:

  • Retry seguro
  • Zero duplicação
  • TPS protegido

🔁 3. FLUXO ASSÍNCRONO (TSQ/TDQ)

💣 Aqui nasce a escalabilidade.

Após débito (BR)

EXEC CICS WRITEQ TS
QUEUE('TXQUEUE')
FROM(WS-EVENT)
END-EXEC

Consumidor (MX)

EXEC CICS READQ TS
QUEUE('TXQUEUE')
INTO(WS-EVENT)
END-EXEC

🔥 Tradução moderna:

Você acabou de simular Kafka no mainframe raiz.


🌍 4. MULTI-REGIÃO (SIMULADO)

💣 Não existe commit distribuído aqui.

Fluxo:

  1. BR debita (consistente)
  2. Evento vai para fila
  3. MX processa depois
  4. Reconciliação se falhar

👉 Isso evita:

  • lock global
  • latência absurda
  • TPS morto

📊 5. SIMULAÇÃO REAL — TPS vs THROUGHPUT

JCL de carga

//LOADTPS JOB ...
//STEP1 EXEC PGM=TXGEN
//SYSIN DD *
TPS=10000
DURATION=60
/*

Resultado esperado

MétricaValor
Requests/s10.000
TPS real2.500–4.000
Latência50–300ms
Retry5–15%

💣 Interpretação Bellacosa:

  • Throughput alto = sistema ocupado
  • TPS alto = sistema fazendo dinheiro acontecer

⚠️ TESTES DE CAOS (OBRIGATÓRIO)

👉 Derrube o consumidor (MX)

  • TPS local continua alto
  • Fila cresce

👉 Simule duplicação

  • Idempotência segura

👉 Force latência

  • TPS cai se você errar arquitetura

☠️ LIÇÃO FINAL

Sistema financeiro NÃO escala com tecnologia.
Escala com decisão arquitetural consciente.


🔥 FECHAMENTO (NÍVEL PRODUÇÃO)

Se você entendeu esse LAB, você já sabe:

  • Por que Kafka não salva arquitetura ruim
  • Por que consistência custa TPS
  • Por que assíncrono é obrigatório
  • Por que ledger não negocia

sábado, 3 de dezembro de 2022

IBM MQ vs Kafka : Quando um Programador Descobre que Voltar no Tempo é Fácil no DeLorean..

 

Bellacosa Mainframe e uma comparação ibm mq versus kafka

☕ Um Café no Bellacosa Mainframe

IBM MQ vs Kafka sem Mistérios para Programadores COBOL

Quando um Programador Descobre que Voltar no Tempo é Fácil no DeLorean... Difícil Mesmo é Dar Rollback em uma Transação Bancária

"Estradas? Para onde vamos, não precisamos de estradas." — Doc Brown

No universo Bellacosa Mainframe, porém, Doc Brown provavelmente corrigiria sua famosa frase:

"Mensagens? Para onde vamos, não precisamos apenas de mensagens. Precisamos de COMMIT."

Porque existe uma enorme diferença entre viajar pelo tempo e viajar com dados corporativos.

Um erro temporal pode fazer Marty McFly apagar sua própria existência.

Um erro numa transação bancária pode fazer desaparecer milhões de reais.

E é justamente aqui que entram dois dos maiores protagonistas da arquitetura moderna:

IBM MQ e Apache Kafka.

Embora muita gente os coloque no mesmo ringue, como se fossem dois boxeadores disputando o cinturão mundial da mensageria, a verdade é outra.

Eles nasceram para resolver problemas completamente diferentes.

Hoje vamos embarcar no DeLorean do Bellacosa Mainframe para visitar quarenta anos de evolução dos sistemas distribuídos e descobrir por que o IBM MQ continua sendo uma das tecnologias mais importantes do planeta para sistemas críticos.

Aperte o cinto.

Configure o Flux Capacitor para 88 mph.

E cuidado para não provocar um ABEND em 1955.


1985: O primeiro salto temporal

Imagine Marty chegando em Hill Valley.

Ele altera um pequeno evento.

Resultado?

Toda a linha do tempo muda.

Nos computadores acontece exatamente a mesma coisa.

Imagine um banco executando uma transferência.

  1. Debita R$ 10.000 da conta A.

  2. Cai a energia.

  3. Nunca credita a conta B.

Parabéns.

Você acabou de criar uma linha temporal alternativa.

No universo do COBOL isso recebe outro nome:

Estado inconsistente.

É exatamente para impedir esse tipo de paradoxo que existem as transações.


O verdadeiro Flux Capacitor chama-se COMMIT

No filme, o Flux Capacitor garante que Marty chegue inteiro ao passado.

Nos sistemas corporativos existe um equivalente.

Ele chama-se:

COMMIT.

Enquanto o COMMIT não acontece...

Nada realmente existe.

É como se todo o processamento estivesse preso num universo paralelo.

Somente quando o commit é confirmado, aquela realidade passa oficialmente a existir.


Se o COMMIT nunca acontecer...

Imagine Doc Brown ligando o DeLorean.

A viagem começa.

Mas o capacitor falha.

Resultado?

A viagem inteira é cancelada.

É exatamente isso que um rollback faz.

Tudo volta ao estado anterior.

Como se nada tivesse acontecido.


IBM MQ nasceu para impedir paradoxos temporais

Quando a IBM criou o MQSeries (hoje IBM MQ), o objetivo nunca foi ser o software mais rápido do planeta.

O objetivo era outro.

Nunca perder uma mensagem.

Existe uma enorme diferença.

Velocidade é importante.

Confiabilidade é indispensável.


Kafka nasceu em outro universo

Apache Kafka surgiu décadas depois.

O problema era completamente diferente.

LinkedIn precisava registrar:

Bilhões de cliques.

Bilhões de visualizações.

Logs.

Eventos.

Métricas.

Streaming.

Analytics.

Machine Learning.

Não importava se um clique perdido acontecesse ocasionalmente.

O importante era processar milhões por segundo.


A analogia do DeLorean

Imagine dois veículos.

O DeLorean

Transporta uma única missão extremamente importante.

Não pode falhar.

É o IBM MQ.


Um trem-bala japonês

Transporta milhares de passageiros continuamente.

É o Kafka.


Os dois são excelentes.

Mas para objetivos completamente diferentes.


O problema da viagem temporal distribuída

Agora imagine uma viagem muito mais complicada.

Marty precisa alterar cinco épocas diferentes simultaneamente.

1985 Alternativo.

Todas precisam terminar corretamente.

Ou nenhuma pode acontecer.

É exatamente isso que faz uma transação distribuída.


XA Transaction

XA é uma especificação criada para coordenar vários recursos diferentes.

Imagine uma orquestra.

Cada músico representa um sistema.

Db2.

Oracle.

IBM MQ.

IMS.

JMS.

Todos precisam tocar exatamente a mesma música.

No mesmo instante.

Se um violinista errar...

Toda a apresentação para.


Two Phase Commit

Aqui aparece o verdadeiro maestro.

O Transaction Manager.

Ele faz duas perguntas.


Primeira fase

"Todos estão preparados?"

Db2

— Sim.

MQ

— Sim.

Oracle

— Sim.

Ninguém grava nada ainda.

Todos apenas levantam a mão.


Segunda fase

O maestro pergunta novamente.

"Posso executar?"

Agora todos respondem.

Sim.

Somente agora tudo é gravado.

Ou...

Caso alguém responda NÃO...

Todos desfazem absolutamente tudo.


Easter Egg nº 1

No filme, Doc Brown nunca aperta o acelerador antes de conferir o Flux Capacitor.

No mundo corporativo, um arquiteto nunca faz COMMIT antes de verificar se todos os recursos responderam "Prepare".


Porque isso importa?

Imagine pagar um boleto.

A aplicação faz:

Atualiza Db2

↓

Envia mensagem MQ

↓

Atualiza saldo

↓

Gera comprovante

↓

Envia SMS

↓

Atualiza limite

Agora imagine que o servidor reinicie exatamente entre o passo três e quatro.

Sem XA...

Você pode ter:

Dinheiro debitado.

Sem comprovante.

Sem mensagem.

Sem auditoria.

Um pesadelo.


IBM MQ resolve isso elegantemente

Quando o MQ participa de uma transação XA, ele espera o Transaction Manager.

Nada é entregue definitivamente.

Nada desaparece.

Tudo permanece consistente.


Persistent Message

Uma das maiores forças do IBM MQ.

Existem dois tipos de mensagens.

Persistent.

Non Persistent.


Persistent

Antes de responder:

"Mensagem recebida."

O Queue Manager grava tudo em disco.

Mesmo que falte energia.

Mesmo que o servidor exploda.

Mesmo que haja reboot.

A mensagem continua lá.


Curiosidade

Essa característica fez do MQ um dos pilares dos bancos durante décadas.

Enquanto aplicações inteiras eram reiniciadas...

As filas permaneciam intactas.


Rollback

Agora vem uma das maiores mágicas do processamento transacional.

Imagine escrever um cheque.

Assinar.

Carimbar.

Guardar.

Depois descobrir que o saldo é insuficiente.

Rollback significa destruir completamente aquela operação.

Como se ela jamais tivesse existido.


Marty McFly e o Rollback

No primeiro filme, Marty começa a desaparecer da fotografia.

Felizmente consegue corrigir a linha temporal.

No mundo do IBM MQ isso acontece automaticamente.

Rollback restaura a fotografia original.


Kafka pensa diferente

Kafka trabalha com outro paradigma.

Eventos.

Streaming.

Replay.

Histórico.

Retenção.

Consumidores independentes.

É quase uma máquina do tempo.

Os eventos ficam armazenados por dias, semanas ou meses.

Você pode voltar e "reassistir" os acontecimentos.

Essa é uma diferença fascinante.

MQ normalmente preocupa-se com entregar a mensagem.

Kafka preocupa-se também em preservar o histórico de eventos para que consumidores possam relê-los.


Throughput

Throughput significa capacidade de processamento.

Imagine duas rodovias.

Rodovia A.

Passam cem caminhões por minuto.

Rodovia B.

Passam cem mil carros por minuto.

Kafka foi projetado para a segunda situação.


IBM MQ prefere outra pergunta

Não pergunta:

"Quantas mensagens?"

Pergunta:

"Quantas mensagens chegaram corretamente?"

Essa diferença muda completamente a arquitetura.


Exactly Once

Esse termo gera muita confusão.

Existem três possibilidades.

At Most Once

Pode perder.

Nunca duplica.


At Least Once

Nunca perde.

Pode duplicar.


Exactly Once

Nem perde.

Nem duplica.

No IBM MQ isso é obtido por sessões transacionais e commit/rollback.

No Kafka, há recursos de exatamente uma vez dentro do ecossistema Kafka (produtores idempotentes, transações e Kafka Streams), mas quando entram bancos de dados e outros sistemas externos, normalmente usam-se padrões como Transactional Outbox, CDC e Saga, em vez de XA distribuído.


MongoDB

Existe uma observação muito interessante.

MongoDB suporta transações internas.

Mas não participa do padrão XA tradicional.

Por isso arquiteturas modernas normalmente utilizam:

Transactional Outbox.

CDC.

Saga Pattern.

Compensating Transactions.

Tudo isso substitui o velho Two Phase Commit quando múltiplos recursos heterogêneos estão envolvidos.


Alta Disponibilidade

Imagine Hill Valley sendo atingida por um raio.

Mesmo assim.

O sistema continua funcionando.

IBM MQ possui recursos empresariais como:

Multi Instance Queue Manager.

HA.

Disaster Recovery.

Logs.

Journal.

Replicação.

Failover.

No z/OS pode integrar-se ao Parallel Sysplex para disponibilidade extraordinária.


Disaster Recovery

Imagine perder um Data Center inteiro.

Mesmo assim.

As mensagens continuam existindo.

É exatamente isso que faz o Journal do MQ.


Easter Egg nº 2

No filme existe uma torre do relógio.

Ela registra um instante histórico.

No IBM MQ existe o Journal.

Ele registra cada passo importante da vida das mensagens.


JMS

Muitos iniciantes confundem.

JMS NÃO é um broker.

JMS é uma API.

Ela permite que aplicações Java conversem com IBM MQ, ActiveMQ, Artemis e outros provedores de mensageria sem ficarem presas a uma implementação específica.


Spring Boot

Hoje é extremamente comum encontrar:

Spring Boot

IBM MQ

Db2

@Transactional

JTA

Tudo trabalhando junto.

Uma única anotação Java coordena diversos recursos corporativos.

É como Doc Brown sincronizando todos os relógios de Hill Valley.


Onde cada tecnologia vence?

Imagine um banco digital.

Cliente faz PIX.

↓

COBOL no CICS processa.

↓

Db2 grava.

↓

IBM MQ garante entrega.

↓

Kafka distribui eventos.

↓

Machine Learning detecta fraude.

↓

Dashboard atualiza em tempo real.

Percebe?

Nenhuma tecnologia substitui completamente a outra.

Elas cooperam.


Curiosidade histórica

O IBM MQ surgiu como MQSeries, em 1993, para facilitar a comunicação confiável entre aplicações distribuídas em diferentes plataformas. Ao longo das décadas evoluiu para integrar z/OS, AIX, Linux, Windows e ambientes em nuvem, mantendo como principal característica a confiabilidade.

O Apache Kafka nasceu no LinkedIn e foi aberto como projeto da Apache Foundation em 2011. Sua proposta revolucionou o processamento de eventos em larga escala, tornando-se um dos pilares das arquiteturas orientadas a eventos modernas.

São tecnologias de épocas diferentes, criadas para resolver dores diferentes.


Dicas para o Padawan COBOL

Se você está começando no mundo mainframe, siga esta ordem de estudos:

  1. Entenda primeiro o conceito de transação e por que ela existe.

  2. Aprenda os fundamentos de COMMIT e ROLLBACK em Db2 e CICS.

  3. Estude o funcionamento de uma Queue, incluindo mensagens persistentes e não persistentes.

  4. Pratique o envio e recebimento de mensagens com IBM MQ em programas COBOL ou Java.

  5. Compreenda como JMS abstrai o acesso ao MQ em aplicações Java.

  6. Só depois mergulhe em Kafka, Event Streaming, CDC, Outbox e Saga. Você entenderá muito melhor quando conhecer primeiro a base transacional.


O que um arquiteto experiente realmente pergunta?

O iniciante pergunta:

"Qual tecnologia é melhor?"

O arquiteto pergunta:

"Qual problema estou tentando resolver?"

Se o problema é transmitir milhões de eventos para dezenas de consumidores independentes, Kafka provavelmente será a escolha natural.

Se o problema é garantir que uma transferência financeira de R$ 500.000,00 nunca fique pela metade, IBM MQ é uma das respostas mais sólidas já criadas.

Essa mudança de perspectiva separa quem conhece ferramentas de quem entende arquitetura.


O Grande Ensinamento do Dr. Emmett Brown

No final de De Volta para o Futuro, Doc Brown aprende que pequenas mudanças podem alterar completamente a história.

Nos sistemas corporativos acontece exatamente o mesmo.

Uma única mensagem perdida pode gerar:

  • um pagamento duplicado;

  • uma conta inconsistente;

  • um pedido entregue duas vezes;

  • uma reserva aérea inexistente;

  • um prejuízo milionário.

É por isso que bancos, seguradoras, bolsas de valores e governos continuam investindo em tecnologias como IBM MQ mesmo décadas após sua criação.

No Bellacosa Mainframe, existe uma máxima que todo Padawan COBOL deveria gravar como se fosse escrita na lateral do próprio DeLorean:

"Velocidade impressiona. Escalabilidade encanta. Mas é a consistência que mantém a máquina do tempo da empresa funcionando sem criar paradoxos financeiros."

E talvez esse seja o maior segredo da computação corporativa.

No cinema, Doc Brown precisava de 1,21 gigawatts para viajar no tempo.

No mundo dos mainframes, um arquiteto experiente precisa apenas de quatro palavras para evitar um desastre que poderia alterar a história inteira de uma empresa:

COMMIT. ROLLBACK. MQ. CONSISTÊNCIA.


segunda-feira, 14 de setembro de 2015

💣🔥 “CORRUPTED BLOOD” — QUANDO UM MMORPG VIRou UM INCIDENTE DE PRODUÇÃO GLOBAL

 

Bellacosa Mainframe um bug ou experimento social? Corrupted Blood no World Warcraft

💣🔥 “CORRUPTED BLOOD” — QUANDO UM MMORPG VIRou UM INCIDENTE DE PRODUÇÃO GLOBAL


🎮 O cenário do “incidente”

Em 2005, dentro do universo de World of Warcraft, um evento aparentemente “local” saiu completamente do controle: a praga “Corrupted Blood”, criada para ser um debuff limitado ao boss Hakkar the Soulflayer na dungeon Zul’Gurub.

👉 Era para ser simples:

  • Um efeito temporário
  • Contido dentro da raid
  • Removido após sair da área

💥 Só que… alguém “quebrou a lógica do sistema”.


🧪 O BUG que virou pandemia

Aqui entra o clássico caso de falha de boundary + persistência indevida de estado:

🔎 O que aconteceu:

  • Jogadores levaram pets infectados para fora da raid
  • O debuff continuava ativo nos pets (estado não limpo ❌)
  • Ao invocar o pet em cidades → BOOM 💣
  • NPCs também foram infectados (e não morriam → super-spreaders 😱)

Resultado:

🧬 Uma epidemia virtual não controlada
🏙️ Cidades como Stormwind viraram zonas de quarentena
☠️ Jogadores low-level morriam instantaneamente


🧠 Análise estilo Bellacosa Mainframe

Se isso fosse um ambiente z/OS, o diagnóstico seria direto:

📊 Problema raiz

  • Falta de isolamento transacional
  • Estado persistente fora do escopo previsto
  • Ausência de validação de contexto (raid vs mundo aberto)

🧩 Tradução para mainframe:

Isso aqui é praticamente:

  • Um JOB batch que deveria rodar isolado
  • Mas vaza dados para produção online (CICS)
  • E ainda deixa registros contaminados no DB2 😬

💣 Resultado:
👉 “Contaminação sistêmica de ambiente”


🧬 O mais INSANO: comportamento humano real

O evento ficou tão caótico que chamou atenção de cientistas!

Pesquisadores analisaram o caso como modelo de epidemia real. E o que apareceu?

🧠 Tipos de comportamento:

  • 👨‍⚕️ “Curandeiros” → ajudavam infectados
  • 🏃 “Fugitivos” → corriam para áreas remotas
  • 😈 “Griefers” → espalhavam de propósito
  • 🤷 “Negacionistas” → ignoravam o risco

Isso virou estudo sério em epidemiologia 😳
Sim… um BUG virou laboratório científico.


🧨 O equivalente em produção real

Imagina isso no mundo corporativo:

  • Um erro em validação de contexto
  • Um estado persistente indevido
  • Um “objeto” que propaga erro automaticamente

👉 Você não tem um bug…
👉 Você tem um efeito cascata sistêmico

No mainframe seria algo como:

  • RACF liberando acesso indevido
  • CICS replicando erro entre regiões
  • MQ espalhando mensagem contaminada

💀 Resultado: incidente nível “SEV1 global”


🧠 Lições de arquitetura (OURO PURO)

🔥 1. Nunca confie no escopo lógico — valide tecnicamente
🔥 2. Estado precisa ser limpo (stateless sempre que possível)
🔥 3. NPCs = processos batch sem controle → perigo extremo
🔥 4. Usuário SEMPRE vai explorar edge cases
🔥 5. Sistemas complexos geram comportamento emergente


☕ Conclusão no estilo Bellacosa

“Corrupted Blood” não foi só um bug…

Foi:

💣 Um teste de caos não planejado
🧠 Um experimento social real
🧬 Um estudo de arquitetura distribuída
🚨 Um alerta brutal sobre sistemas complexos


🚀 Frase final

👉 “O sistema não quebrou… ele só executou exatamente o que ninguém previu.”


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