Translate

Mostrar mensagens com a etiqueta Arquitetura Distribuída. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Arquitetura Distribuída. Mostrar todas as mensagens

segunda-feira, 29 de dezembro de 2025

💥 MQ NÃO É FILA — É O SEGURO DE VIDA DO SEU COBOL

 

Bellacosa Mainframe conheça MQ 

💥 MQ NÃO É FILA — É O SEGURO DE VIDA DO SEU COBOL

O guia definitivo de IBM MQ Fundamentals para quem vive no z/OS

Se você é um dev COBOL experiente, já sabe:
👉 o problema nunca foi o código…
👉 o problema sempre foi integração.

E é exatamente aí que entra o IBM MQ — o componente que transformou o mainframe de “ilha isolada” em coração da arquitetura moderna.


🕰️ ORIGEM — POR QUE O MQ EXISTE?

Antes do MQ:

  • Sistemas conversavam via sockets, arquivos, chamadas diretas
  • Tudo era síncrono
  • Se o destino caía → 💥 tudo quebrava

👉 A IBM criou o MQ (antigo WebSphere MQ) para resolver:

✔ Desacoplamento
✔ Confiabilidade
✔ Escalabilidade
✔ Integração heterogênea

💡 Tradução Bellacosa:

“MQ nasceu para impedir que um sistema derrube o outro.”


🧠 CONCEITO CENTRAL (O QUE MUDA TUDO)

👉 Aplicações não se falam diretamente

Elas falam com filas.


📦 MODELO MENTAL

COBOL A → MQ → COBOL B

✔ A envia
✔ MQ guarda
✔ B consome

👉 Simples… e revolucionário


💥 O TRIO QUE VOCÊ NUNCA ESQUECE

ConceitoPapel
MessageUnidade de dados
QueueArmazenamento
Queue ManagerCérebro

🧠 FRASE DE OURO

“Sem Queue Manager… não existe MQ.”


⚙️ COMO ISSO FUNCIONA (PASSO A PASSO REAL)

🔹 1. Aplicação COBOL envia mensagem

CALL 'MQPUT' USING ...

👉 Não importa:

  • Se o destino está online
  • Onde ele está
  • Qual linguagem usa

🔹 2. MQ armazena na fila

✔ Persistente (disco)
✔ Seguro
✔ Ordenado


🔹 3. Outra aplicação consome

CALL 'MQGET' USING ...

👉 Pode ser:

  • COBOL
  • Java
  • .NET
  • SAP

🔄 ASSÍNCRONO — O PODER REAL

👉 Diferente de CICS sync:

✔ Envia → continua
✔ Não bloqueia
✔ Alta performance

💡 Isso muda tudo em batch + online


💾 PERSISTENT vs NON-PERSISTENT

🔥 Persistent

✔ Gravado em disco
✔ Não perde
✔ Entrega garantida

👉 Use em:

  • Financeiro
  • Débito
  • Liquidação

⚡ Non-persistent

✔ Mais rápido
❌ Pode perder

👉 Use em:

  • Consulta
  • Logs
  • Eventos leves

🔄 UOW — TRANSAÇÃO DE VERDADE

👉 Unit of Work = grupo de mensagens

✔ Tudo ou nada

💡 Exemplo:

  • 4 mensagens
  • 1 falha

👉 MQ faz rollback de todas


💀 DLQ — DEAD LETTER QUEUE

👉 Quando dá ruim:

✔ Mensagem vai para DLQ
✔ Com motivo + código

💡 Easter egg de produção:

DLQ cheia = sistema gritando socorro


🔐 SEGURANÇA (NÍVEL ENTERPRISE)

🧠 OAM (Object Authority Manager)

✔ Controla acesso
✔ Quem pode PUT/GET


🔒 SSL / TLS

✔ Criptografia
✔ Autenticação


🔄 CONVERSÃO DE DADOS (A MÁGICA)

👉 COBOL (EBCDIC) ↔ Java (ASCII)

✔ MQ converte automaticamente

💡 Você nem vê acontecer


⚙️ CUSTOM CONVERSION

👉 Quer regra própria?

✔ Use exits

💡 Muito usado em legado


🧩 PADRÕES DE ARQUITETURA (OURO)


📦 Point-to-Point

✔ 1 → 1
✔ Request/Reply

👉 Clássico COBOL ↔ COBOL


💻 Client/Server

✔ Muitos → 1

👉 Centralização (ex: core bancário)


⚖️ Workload Sharing

✔ 1 fila → vários consumidores

👉 Paralelismo brutal

💡 Padrão:

Competing Consumers


📡 Publish/Subscribe

✔ 1 → muitos
✔ Desacoplado

👉 Base de Event-Driven Architecture


💣 PEGADINHAS QUE DERRUBAM SENIOR

❌ MQ é síncrono → ERRADO
❌ Aplicações se conectam direto → ERRADO
❌ Remote queue armazena mensagem → ERRADO
❌ MQ garante non-persistent → ERRADO


🧠 CENÁRIO REAL (BANCO)

👉 Fluxo típico:

  1. COBOL envia transação (MQPUT)
  2. MQ armazena (persistent)
  3. Workers processam (workload)
  4. Evento dispara (pub/sub)

💥 Tudo via MQ


🔥 CURIOSIDADES (EASTER EGGS)

  • MQ existe desde os anos 90 e ainda domina bancos
  • DLQ handler pode automatizar correções
  • MQ roda em:
    • z/OS
    • Linux
    • Windows
  • Pode transportar até 100MB por mensagem

💥 FRASES QUE DEFINEM MQ

“MQ desacopla no tempo, no espaço e na tecnologia.”

“Se caiu, MQ segura. Se voltou, MQ entrega.”

“COBOL não morreu… ele só ganhou MQ.”


🚀 CONCLUSÃO

Se você domina MQ:

✔ Seus sistemas não quebram fácil
✔ Integração deixa de ser dor
✔ Você pensa como arquiteto


💣 VERDADE FINAL

“MQ não é só middleware…
é o que separa sistemas frágeis de sistemas resilientes.”

 

domingo, 8 de maio de 2022

Os Erros Invisíveis que Destroem um Projeto Antes Mesmo da Primeira Linha de Código

Bellacosa Mainframe e os erros invisivei que destroem um projeto



☕ Um Café no Bellacosa Mainframe

Os Erros Invisíveis que Destroem um Projeto Antes Mesmo da Primeira Linha de Código

"Arquitetura não é desenhar caixas e setas. É antecipar problemas que ainda não aconteceram."

Uma arquitetura pode parecer perfeita em um PowerPoint.

Microservices...
Docker...
Kubernetes...
Event Streaming...
Kafka...
REST...
GraphQL...
Cloud Native...

Tudo muito bonito.

Até o primeiro milhão de usuários.

Até o primeiro pico de Black Friday.

Até o primeiro deadlock.

Até a primeira perda de dados.

É nesse momento que aparecem os erros invisíveis.


1. Ignorar Consistência dos Dados

O erro

Muitos iniciantes acreditam que:

"Eventual Consistency resolve tudo."

Não resolve.

Consistência é uma decisão de negócio.

Não tecnológica.


Exemplo bancário

Imagine uma transferência.

Conta A
Saldo = 1000

↓

Transferir 900

↓

Conta B

Se um serviço atualizar a Conta A...

...e outro atualizar a Conta B alguns segundos depois...

Durante esses segundos:

Conta A = 100

Conta B = 0

O dinheiro "sumiu".

Ou pior...

Uma nova consulta pode permitir outra transferência.

Resultado:

Saldo negativo.


Quando Eventual Consistency funciona

Excelente para:

  • Feed do Instagram

  • Likes

  • Comentários

  • Catálogo de produtos

  • Estatísticas

Alguns segundos de atraso não importam.


Quando NÃO funciona

Nunca utilize em:

  • PIX

  • Bancos

  • Bolsa de Valores

  • Controle de Estoque

  • Reserva de assentos

  • Sistemas médicos

Nestes casos:

Strong Consistency

é obrigatória.


Mainframe

DB2 usa:

  • Commit

  • Rollback

  • Locking

  • Isolation Levels

Há décadas.

Muito antes da moda dos bancos NoSQL.


2. Não Definir Limites do Sistema

Este talvez seja o maior erro.

Imagine uma empresa.

Quem faz RH?

Quem faz Financeiro?

Quem faz Compras?

Agora imagine todos fazendo tudo.

É exatamente isso que acontece em sistemas mal divididos.


Sintoma

Um módulo chamado:

CustomerService

faz:

  • login

  • pagamento

  • envio de email

  • cadastro

  • estoque

  • geração de nota

  • relatórios

Virou um monólito.


Consequência

Qualquer alteração:

quebra tudo.


Boa arquitetura

Cada domínio possui responsabilidade única.

Order Service

Inventory

Billing

Notification

Shipping

Cada um evolui sozinho.


Conceito

Domain Driven Design

Bounded Context

Single Responsibility

Todos nascem desse princípio.


3. Ignorar Latência

Usuários não medem CPU.

Eles medem tempo.


Exemplo

Pesquisa Google

300 ms

Parece instantânea.

Agora imagine:

4 segundos.

Você já fechou a página.


Latência acumulada

Cliente

API Gateway

Auth

Inventory

Recommendation

Payment

Shipping

DB

Cada chamada adiciona:

20 ms

40 ms

80 ms

100 ms

...

No final:

1 segundo

Sem perceber.


Lei importante

Uma arquitetura com 20 microsserviços pode ser MAIS LENTA que um monólito.


Mainframe

Por isso CICS sempre priorizou:

  • poucas chamadas

  • processamento local

  • transações curtas


4. Subestimar a Carga

Outro erro clássico.

O sistema funciona perfeitamente...

...com 50 usuários.

Mas na Black Friday:

200 mil usuários

Tudo trava.


Perguntas importantes

Quantos usuários?

Quantas requisições?

Picos?

Sazonalidade?

Crescimento anual?


Capacidade

Sempre calcule:

Requests/second

Transactions/minute

IOPS

CPU

RAM

Storage

Network

Exemplo

Sistema:

1000 req/s

Promoção:

15000 req/s

Resultado:

Timeout.

Fila.

Erro 500.


5. Fazer Tudo Sincronamente

Imagine um e-commerce.

Cliente compra.

Sistema:

processa pagamento

envia email

gera nota

atualiza estoque

gera cashback

envia SMS

atualiza BI

Tudo esperando.

O usuário fica olhando.


Melhor abordagem

Pagamento

Resposta imediata

Eventos

Email

Nota

BI

Analytics

Machine Learning

Tudo assíncrono.


Tecnologias

Kafka

RabbitMQ

IBM MQ

SQS

Azure Service Bus

Pulsar


Benefícios

Escalabilidade

Baixa latência

Maior throughput

Resiliência


6. Não Planejar Evolução

Todo sistema muda.

Sempre.


Hoje:

Pix

Amanhã:

Pix Parcelado

Depois:

Pix Internacional

Depois:

IA financeira

Se sua arquitetura não suporta mudança...

Ela morre.


Arquitetura deve ser extensível

Open/Closed Principle

Plug-ins

Feature Flags

Configuration Driven

Interfaces

Strategy Pattern


7. Criar Pontos Únicos de Falha (Single Point of Failure)

Imagine:

1 servidor

↓

Banco

↓

Toda empresa

Servidor cai.

Empresa para.


Alta disponibilidade

Sempre pense em:

Load Balancer

Cluster

Replica

Failover

Geo-redundância

Backup


Mainframe

Sysplex

Parallel Sysplex

GDPS

foram criados exatamente para isso.


8. APIs Mal Projetadas

API é um contrato.

Contrato ruim gera caos.


Exemplo ruim

GET /data

Retorna:

qualquer coisa...

Exemplo melhor

GET /customers/{id}

Resposta consistente.

Documentada.

Versionada.


API deve possuir

Versionamento

Idempotência

Paginação

Rate Limit

Autenticação

Observabilidade

Documentação


9. Ignorar Backup e Recuperação

A pergunta não é:

"Meu sistema vai falhar?"

A pergunta correta é:

"Quando ele vai falhar?"


Recovery é parte da arquitetura

Backup

Snapshot

Point-in-Time Recovery

Replication

Disaster Recovery

Multi Region

Chaos Engineering


Conceitos fundamentais

RPO (Recovery Point Objective)

Quanto de dados você pode perder?

0 minutos

5 minutos

1 hora

RTO (Recovery Time Objective)

Quanto tempo o sistema pode ficar indisponível?

30 segundos

5 minutos

2 horas

Essas metas orientam a escolha da estratégia de backup e recuperação.


Um Décimo Erro que Poucos Mencionam: Falta de Observabilidade

Mesmo uma boa arquitetura pode fracassar se você não consegue enxergar o que acontece em produção.

Os três pilares da observabilidade são:

  • Logs: registram eventos e erros.

  • Métricas: mostram CPU, memória, latência, throughput e disponibilidade.

  • Traces distribuídos: acompanham uma requisição passando por vários serviços.

Ferramentas como Prometheus, Grafana, OpenTelemetry, Jaeger e Elastic Stack ajudam a identificar gargalos antes que eles se transformem em incidentes graves.


Um Décimo Primeiro Erro: Esquecer a Segurança Desde o Início

Segurança não deve ser um complemento adicionado ao final do projeto.

Uma arquitetura moderna precisa considerar desde o início:

  • Princípio do menor privilégio (Least Privilege)

  • Autenticação e autorização robustas

  • Criptografia em trânsito (TLS) e em repouso

  • Gestão de segredos

  • Auditoria e rastreabilidade

  • Proteção contra ataques como SQL Injection, XSS e CSRF

  • Rate limiting e proteção contra abuso

No ecossistema IBM Z, RACF, TLS, criptografia por hardware e auditoria integrada são exemplos de recursos que incorporam esses princípios há décadas.


O Que Todo Programador COBOL Padawan Deve Aprender

Uma lição importante é que System Design não é exclusivo de microsserviços ou da nuvem. Os princípios fundamentais são universais:

  • Modelar corretamente o domínio do negócio.

  • Entender os requisitos funcionais e não funcionais.

  • Projetar para disponibilidade, escalabilidade e recuperação.

  • Definir responsabilidades claras entre componentes.

  • Reduzir acoplamento e aumentar coesão.

  • Tratar desempenho, segurança e observabilidade como requisitos de primeira classe.

Os grandes sistemas corporativos escritos em COBOL, CICS, IMS e DB2 continuam processando bilhões de transações diariamente porque foram construídos com esses princípios. A tecnologia evolui, mas os fundamentos da boa arquitetura permanecem os mesmos. Um arquiteto experiente não é aquele que conhece mais ferramentas, e sim aquele que consegue prever os problemas antes que eles aconteçam e projetar sistemas preparados para enfrentá-los.