☕ 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

quarta-feira, 13 de março de 2019

O Relógio Invisível do CICS : Quando você Descobriu que Milhões de Transações Dependiam de um Tempo que Ninguém Conseguia Enxergar

 

Bellacosa Mainframe e o relogio invisivel do cics

☕ Um Café no Bellacosa Mainframe

O Relógio Invisível do CICS

Quando um Jovem Programador COBOL Descobriu que Milhões de Transações Dependiam de um Tempo que Ninguém Conseguia Enxergar

"Toda investigação começa com uma pergunta. No mundo do CICS, ela quase sempre é a mesma: exatamente quando isso aconteceu?"

O velho relógio da parede marcava 02h17 da madrugada.

No CPD, apenas o zumbido constante dos refrigeradores quebrava o silêncio. As luzes fluorescentes lançavam sombras longas sobre os armários metálicos, enquanto dezenas de fitas magnéticas repousavam como livros esquecidos em uma biblioteca de segredos.

Era a primeira semana de trabalho de Eduardo, um jovem programador COBOL recém-chegado ao banco.

Seu primeiro incidente parecia simples.

Um cliente afirmava que uma transferência de R$ 28.750,00 havia desaparecido.

O dinheiro saiu da conta.

Nunca chegou ao destino.

Ou pelo menos era isso que todos acreditavam.

O analista mais experiente do departamento, um senhor de cabelos grisalhos chamado apenas de Alberto, aproximou-se calmamente.

Sem olhar para o código perguntou:

— Você já perguntou ao CICS que horas eram?

Eduardo estranhou.

— Mas eu sei a hora...

Alberto sorriu.

— Não...

— Você sabe a hora que o relógio mostra.

— Eu quero saber a hora que o CICS acredita que era.

Naquele instante começava uma das maiores lições da carreira daquele jovem programador.

E também a nossa.


O Mistério do Tempo Invisível

Todo iniciante acredita que obter a data é algo extremamente simples.

Em Java existe:

LocalDateTime.now()

No Python:

datetime.now()

No C#:

DateTime.Now

Então por que o CICS inventou dois comandos?

  • ASKTIME

  • FORMATTIME

Por que não retornar simplesmente:

29/07/2026

10:45:22

A resposta está escondida dentro da própria arquitetura do CICS.

E ela é muito mais elegante do que parece.


O Tempo Não Existe

Parece estranho.

Mas, para um computador, datas não existem.

Nem horas.

Nem calendários.

Nem domingos.

Nem julho.

Muito menos sexta-feira.

Tudo isso é invenção humana.

O computador entende apenas números.

É exatamente por isso que o CICS criou um idioma próprio.

Esse idioma chama-se:

ABSTIME


ABSTIME: O Relógio Secreto do Mainframe

ABSTIME significa:

Absolute Time

Não é uma data.

Não é uma hora.

Não é um calendário.

É simplesmente um número gigantesco que representa um instante exato da existência do sistema.

Imagine uma régua infinita.

--------------------------------------------------------------->

Cada ponto representa um momento.

O ABSTIME é exatamente um desses pontos.

Ele não diz:

Quinta-feira.

Ele diz:

O instante número XXXXXXX desde a referência temporal usada pelo CICS.

É uma forma extremamente eficiente de representar o tempo.


Por que isso é genial?

Imagine duas operações bancárias.

Primeira:

10:45:10

Segunda:

10:45:15

Quanto tempo passou?

Nós fazemos mentalmente.

Cinco segundos.

Mas o computador precisaria interpretar:

  • dia

  • mês

  • ano

  • hora

  • minuto

  • segundo

Depois calcular.

Com ABSTIME?

Basta fazer:

Fim

-

Início

Pronto.

É matemática pura.

Nenhum calendário envolvido.


ASKTIME — Perguntando ao Universo

ASKTIME é um dos comandos mais simples do CICS.

E justamente por isso muitos subestimam sua importância.

EXEC CICS
     ASKTIME
     ABSTIME(WS-ABS-TIME)
END-EXEC.

Parece pequeno.

Mas ele acabou de conversar diretamente com o relógio do z/OS.

Imagine um funcionário indo até a sala onde fica o relógio atômico do banco.

Ele pergunta:

— Qual é o instante atual?

O relógio responde.

Mas responde em um idioma interno.

Não em português.

Nem inglês.

Responde em ABSTIME.


FORMATTIME — O Tradutor

Agora entra o segundo personagem.

FORMATTIME.

Ele olha para aquele número enorme e diz:

— Ah...

Já entendi.

Isso corresponde a:

29/07/2026

10:45:22

Ou então:

FRIDAY

Ou:

JULY

Ou:

2026

Tudo depende do formato solicitado.

Ele não cria informação.

Apenas traduz.


Uma Analogia Bellacosa

Imagine uma antiga máquina Enigma da Segunda Guerra Mundial.

O operador recebe:

YTRXKMQ

Para qualquer pessoa aquilo parece lixo.

Mas basta colocar na máquina correta.

Resultado:

ATAQUE AO AMANHECER

ABSTIME é a mensagem criptografada.

FORMATTIME é a máquina que decifra.


O Fluxo Completo

O caminho do tempo dentro do CICS é extremamente elegante.

Relógio do Hardware

↓

z/OS

↓

CICS

↓

ASKTIME

↓

ABSTIME

↓

FORMATTIME

↓

29/07/2026

10:45:22

Observe que o relógio nunca entrega diretamente uma data legível.

Existe uma camada de abstração.

Isso torna todo o sistema mais eficiente.


O Erro dos Programadores Iniciantes

É muito comum encontrar algo assim:

ASKTIME

FORMATTIME

...

ASKTIME

FORMATTIME

...

ASKTIME

FORMATTIME

Tudo dentro da mesma transação.

Isso é desperdício.

O relógio praticamente não mudou.

O correto geralmente é:

ASKTIME

↓

Guardar ABSTIME

↓

Reutilizar

É uma pequena otimização.

Mas imagine milhões de transações por dia.

Cada microssegundo economizado vira horas de processamento ao longo do ano.

É exatamente assim que os grandes sistemas sobrevivem durante décadas.


Um Caso Real de Auditoria

Imagine um PIX.

Às 14h15m22s.

O cliente afirma:

Nunca fiz essa transferência.

O banco consulta o log.

Encontra:

Data

Hora

Terminal

IP

Operador

Transação

Programa

Usuário RACF

Tudo isso nasceu de um único comando.

ASKTIME

Sem ele...

Toda a investigação estaria comprometida.


A Ciência do Tempo

Existe outro detalhe interessante.

Datas são péssimas para cálculos.

Imagine descobrir quanto tempo um programa levou para executar.

Com datas formatadas:

10:45:22

↓

10:45:24

É preciso interpretar texto.

Com ABSTIME:

Final

-

Inicial

=

2 segundos

Muito mais simples.

Muito mais rápido.


Curiosidade Histórica

Nos primeiros sistemas comerciais, muitos programas armazenavam datas apenas com dois dígitos para o ano.

Foi daí que nasceu o famoso Bug do Milênio (Y2K).

Quando chegou o ano 2000, vários sistemas interpretaram "00" como 1900.

O CICS, com sua abordagem baseada em ABSTIME e formatação controlada, ajudou a reduzir vários desses problemas em aplicações bem projetadas.

Essa história é um lembrete de que o tratamento correto do tempo nunca foi um detalhe trivial.


O Poder do DATESEP

Pouca gente presta atenção nisso.

DATESEP('/')

Resultado:

29/07/2026

DATESEP('-')

Resultado:

29-07-2026

DATESEP('.')

Resultado:

29.07.2026

Sem separador:

29072026

Extremamente útil para integrações.

Principalmente arquivos batch.


O Dia da Semana

FORMATTIME também sabe dizer:

MONDAY

TUESDAY

FRIDAY

Imagine um relatório.

Você quer saber:

Quantas transações aconteceram aos domingos?

Não precisa calcular.

FORMATTIME entrega.


O Nome do Mês

Também pode retornar:

JANUARY

FEBRUARY

MARCH

Parece detalhe.

Mas relatórios gerenciais adoram isso.

Imagine entregar ao diretor:

07

Agora compare com:

JULY

Muito mais amigável.


A Grande Diferença Entre Registrar e Medir

Um erro conceitual comum é acreditar que ASKTIME existe apenas para colocar data em relatórios.

Na verdade existem dois grandes usos.

Primeiro:

Registrar eventos.

Segundo:

Medir tempo.

Imagine:

ASKTIME

↓

Processamento

↓

ASKTIME

Agora basta comparar os dois ABSTIMEs.

Você descobre quanto tempo a rotina levou.

É exatamente assim que muitas medições de desempenho são realizadas em aplicações CICS.


Performance e Escalabilidade

Grandes bancos executam dezenas de milhares de transações por segundo.

Pequenas decisões fazem enorme diferença.

Capturar um único ABSTIME no início da Unidade de Trabalho e reutilizá-lo evita chamadas repetidas ao relógio do sistema, reduz overhead e mantém todos os registros daquela transação com a mesma referência temporal.

Esse cuidado também facilita auditorias, pois cada etapa compartilha o mesmo instante de origem quando isso faz sentido para o negócio.


Curiosidade

Muitos programadores COBOL passam anos utilizando ASKTIME sem nunca descobrir que o verdadeiro protagonista é o ABSTIME.

O comando parece apenas pegar a hora.

Na realidade ele captura um timestamp extremamente preciso utilizado internamente pelo CICS para cálculos temporais.

FORMATTIME é apenas o intérprete.


Dica de Ouro

Quando estiver projetando uma aplicação CICS, faça sempre estas perguntas:

  • Vou precisar apenas exibir a data?

  • Vou calcular intervalos entre eventos?

  • O mesmo horário deve representar toda a transação?

  • Existe um padrão corporativo para datas?

  • Os logs precisam ser comparados com Db2, VSAM, MQ ou outros sistemas?

Essas respostas influenciam diretamente a forma como você utilizará ASKTIME e FORMATTIME.


O Easter Egg do Bellacosa Mainframe 🕵️

Existe um velho comentário entre programadores veteranos:

"Quando um problema parece impossível de reproduzir, pergunte primeiro ao relógio."

Não é superstição.

Muitos incidentes em produção acabam sendo explicados apenas quando alguém reconstrói a sequência exata dos acontecimentos usando os timestamps registrados pela aplicação.

Em inúmeros casos, o "culpado" não era o programa COBOL, mas uma condição de corrida, um bloqueio temporário, uma transação concorrente ou uma diferença de poucos milissegundos entre operações críticas.

O relógio não mente.

Ele apenas registra.

Quem interpreta a história são os engenheiros.


Arquivo Confidencial nº 32 — O Caso do Relógio Invisível

Quando Eduardo finalmente terminou sua investigação, descobriu algo inesperado.

A transferência nunca desaparecera.

Dois programas distintos registraram o mesmo evento utilizando horários capturados em momentos diferentes. Um deles consultou o relógio logo no início da transação; o outro, segundos depois, após uma espera por bloqueio de recurso. Os logs pareciam contraditórios, mas o dinheiro havia seguido exatamente o fluxo esperado.

Na manhã seguinte, Alberto fechou o relatório, tomou um gole de café e disse:

— Está vendo por que nunca perguntamos apenas "que horas são"?

— Perguntamos "qual foi o instante registrado pelo CICS".

Eduardo sorriu.

Naquela madrugada ele deixou de ser apenas um programador COBOL.

Começava a pensar como um investigador de sistemas.

E desde então, sempre que escrevia um novo programa, lembrava-se de uma regra silenciosa que parecia ecoar pelos corredores do CPD:

"Os usuários enxergam datas. Os programadores enxergam horas. Mas o CICS enxerga apenas instantes."

Talvez seja por isso que, em todo grande mainframe, o relógio mais importante nunca aparece na parede. Ele vive escondido, contando silenciosamente a história de bilhões de transações — um ABSTIME de cada vez.

terça-feira, 12 de março de 2019

🧭 PROTOCOLO BELLACOSA PARA REDUZIR A CORRERIA MENTAL

 

Bellacosa Mainframe e o protocolo para reduzir a correria mental

🧭 PROTOCOLO BELLACOSA PARA REDUZIR A CORRERIA MENTAL

(Um pequeno manual para quem vive correndo até quando está parado)


☀️ 1. START SLOW – O início define o ritmo

Acorde sem pressa.
Antes de abrir o celular, abra os olhos para o dia.
Observe a luz, o som, o cheiro do café.
Quem começa em silêncio mantém o controle do scheduler interno.

A pressa na largada rouba a paz do percurso.


🧘‍♂️ 2. CHECK VITALS – Faça login em si mesmo

Pergunte-se: “como estou hoje?”
Não o que tenho pra fazer, mas quem eu sou agora.
Cansado? Tranquilo? Irritado?
Essa verificação é o IPL da consciência: sem ela, o sistema roda em automático.


💬 3. LIMIT INTERRUPTS – Reduza notificações, aumente presença

Cada distração é um interrupt request que derruba o foco.
Defina janelas de tempo para mensagens, redes, e-mails.
O cérebro precisa de CPU exclusiva para pensar, sentir e existir.

Foco é o firewall da paz mental.


🌿 4. REFRESH LOOP – Saia do script diário

Mude o trajeto, o sabor do almoço, o fundo musical, o horário da caminhada.
Pequenas mudanças impedem o loop mental infinito que gera tédio e ansiedade.

O novo não precisa ser grandioso — basta ser diferente.


💻 5. PROCESS LESS, LIVE MORE

Não abrace mais jobs do que cabe na CPU do seu dia.
A cada “sim” que você dá para os outros, veja se não está dando um “no” para si mesmo.

Produtividade sem propósito é apenas processamento inútil.


🌙 6. END OF DAY – Feche o log, não só os olhos

Antes de dormir, faça um log review emocional:
O que te fez sorrir hoje? O que drenou energia?
Agradeça, perdoe, solte.
Só então desligue o terminal.

Dormir com a alma leve é o melhor tipo de shutdown.


🪞 7. MAINTENANCE WEEKLY – O ritual da realocação emocional

  • Um dia sem relógio.

  • Um passeio sem destino.

  • Uma conversa sem propósito produtivo.

  • Um momento de arte, música ou contemplação.

  • Um café em silêncio, apenas pra saborear o presente.

A vida precisa de pausas de sistema. É nelas que o coração se reindexa.


☕ Epílogo Bellacosa

No fundo, não queremos parar o tempo — queremos apenas andar no mesmo ritmo que ele.
Viver não é correr contra o relógio, é aprender a compilar emoções, tarefas e sonhos sem abend.
E talvez o segredo esteja em algo simples:

“Quem desacelera não perde tempo — ganha existência.” 💻❤️

 

segunda-feira, 11 de março de 2019

🥙 A Esfiha Paulista – Do Deserto à Esquina da Padaria

 

Bellacosa Mainframe e a delicia arabe paulistana a esfiha

🥙 A Esfiha Paulista – Do Deserto à Esquina da Padaria
(Por Vagner Bellacosa ☕ — Bellacosa Mainframe / El Jefe Midnight Lunch Edition)


Há sabores que viajam o mundo em silêncio, cruzando oceanos e culturas até encontrar um novo lar.
E poucos se aclimataram tão bem no Brasil quanto a esfiha, esse pequeno triângulo de massa que conquistou o coração (e o estômago) do paulistano.

Na São Paulo dos anos 1950, o trânsito era tímido, o bonde ainda tocava o sino, e nas portas das colônias libanesas e sírias começava a se espalhar um aroma que ninguém conseguia identificar, mas todo mundo queria provar.
Era o começo da lenda da esfiha paulista — a comida de rua que aprendeu a falar “ô, meu!” com sotaque do Brás.




🏺 Das areias do Levante ao balcão da padaria

A esfiha original vem da Síria e do Líbano — chamada sfiha (صفيحة), “massa fina” em árabe.
No Oriente Médio, era uma massa aberta, coberta com carne temperada, cebola, pimenta e um toque de iogurte azedinho.
Assada em forno de pedra, era comida comunitária, de festa, servida em bandejas grandes, sempre acompanhada de chá forte e conversa longa.

Mas quando os imigrantes árabes chegaram ao Brasil — especialmente ao bairro do Brás, à Rua 25 de Março e à região da Aclimação, — perceberam que aqui o forno era outro, o gosto era outro, e o público... era faminto.

Foi assim que a esfiha mudou de sotaque:
ficou mais gordinha, mais suculenta e ganhou recheios que nenhum libanês imaginaria — frango com catupiry, calabresa, queijo e até chocolate.
Era o nascimento da esfiha paulista, genuinamente híbrida, com alma árabe e coração de padaria brasileira.




🏠 A lenda da primeira esfiha “à brasileira”

Dizem que tudo começou com a família Abdo, na década de 1930, que vendia esfihas abertas no centro de São Paulo.
Mas foi só nos anos 1950 que o jogo virou: surge o lendário Ragazzo primitivo — o Habib’s original das padarias, um modelo de negócio familiar, com fornadas rápidas e preços populares.

Os imigrantes perceberam que o paulistano gostava de comer com pressa, mas bem.
E a esfiha, com seu tamanho portátil e sabor explosivo, encaixou-se perfeitamente na rotina do trabalhador urbano.

💡 Curiosidade Bellacosa: o primeiro forno de esfiha em São Paulo era movido a carvão e adaptado de uma antiga fornalha de pães italianos.
Multiculturalismo em nível de BIOS.





🍕 Quando a esfiha virou fast food

Nos anos 1980, o empresário Alberto Saraiva, filho de portugueses, criou o império Habib’s, que transformou a esfiha em fenômeno popular.
Custando o equivalente a um cafezinho, o quitute se espalhou por todos os bairros, democratizando o sabor árabe e tornando-o oficialmente brasileiro.

E assim nasceu o mito da esfiha de R$ 1, o lanche do estudante, do motoboy e do programador de COBOL das madrugadas.
Uma instituição paulistana.




🌯 As adaptações do Brasil tropical

  • Esfiha fechada: o modelo “pastel árabe”, perfeito pra viagem.

  • Recheio de frango com catupiry: invenção puramente paulista, e quase patrimônio cultural da zona norte.

  • Esfiha doce: banana com canela, chocolate com morango — um heresia deliciosa.

  • Mini-esfihas de festa: microversão criada pra caber no pratinho de aniversário infantil dos anos 90.

💬 Diz a lenda que o Habib’s chegou a testar uma esfiha de feijoada — e que um protótipo ainda existe em um servidor frio no Tatuapé.


🧠 Cultura de padoca e o dialeto da massa

A esfiha é o elo perdido entre o pastel e o kibe — mistura de imigrantes e improviso, da mesma linhagem que criou o hot dog paulista com purê e o yakisoba de trailer.
Na padaria, ela é sempre a primeira a acabar.
E ninguém chama de sfiha, claro. Aqui é “me vê duas esfiha fechada e um pingado, chefe!

Esse é o verdadeiro idioma da convivência paulistana: árabe temperado com português de balcão.


Bellacosa comenta:

A esfiha paulista é a metáfora perfeita da cidade que nunca dorme:
tem raízes no Oriente, coração no Brás e alma no balcão da esquina.
Nasceu artesanal, virou fast food e, no processo, se tornou símbolo de convivência — o lanche universal que atravessa classes, religiões e bairros.

No mainframe da memória gustativa paulistana, ela é um job eterno rodando em background:
sempre pronta, sempre quente, sempre ali — firme como um commit de sabor que nunca dá erro.


💡 Dica do El Jefe Midnight Lunch

  • Quer sentir o sabor raiz? Procure esfiharias antigas da Rua Vergueiro e da Vila Mariana — forno de pedra, carne temperada com limão e aquele toque de pimenta síria.

  • Quer nostalgia 90s? Peça uma dúzia no Habib’s drive-thru e ouça “Khaled – Aïcha” no rádio.

  • Quer cultura? Sirva esfihas com café forte, conte histórias e veja a madrugada se transformar em memória.


No fim, a esfiha não é só comida.
É a prova viva de que São Paulo é um sistema operacional que roda todas as culturas.
E enquanto houver padoca aberta às 3 da manhã,
a esfiha paulista seguirá quente — e reinando.

🧾 Capítulo 2 — Minha Vida como Office-Boy

 


🧾 Capítulo 2 — Minha Vida como Office-Boy

Ser office-boy nos anos 80 não era pra qualquer um.
Precisava ter desenvoltura, perspicácia e um toque de loucura — além da eterna urgência de pagar os boletos.

Filho de uma mulher divorciada, com dois irmãos pequenos, eu carregava mais que pastas: carregava responsabilidade.
Cada vale-transporte, cada cesta básica, cada ajuda contava.

Com a pasta abarrotada de documentos e uma lista de lugares a visitar, eu cruzava a cidade.
Enfrentava filas intermináveis em bancos, cartórios, correios.
E de volta ao escritório, virava faz-tudo: comprava lanches, resolvia pendências, datilografava contratos em máquinas de escrever mecânicas, e quando o destino permitia, “pilotava” um terminal 3270 — a joia tecnológica do escritório.

O som das teclas ecoava como trilha sonora da minha juventude.
Tec-tec da Olivetti, o clique do teclado IBM, o burburinho dos colegas.
Era a música do trabalho.

Entre uma entrega e outra, levava comigo sempre um livro.
Lia no ônibus, estudava no trem, rabiscava anotações no papel amassado do caderno.
E ao final do expediente, corria feito louco pra chegar a tempo no colégio.


💼 Foram






anos duros — mas preciosos.
Ali aprendi o valor do esforço, da paciência e da dignidade.
E talvez, sem perceber, estava programando o primeiro sistema da minha vida:
o da persistência.




📘 Continua…
Próximo capítulo:
“Entre o 3270 e o XT – o despertar do programador”
💡 Onde o office-boy começa a decifrar o código da própria vida.


domingo, 10 de março de 2019

☕💥 A Jornada do Padawan COBOL – Parte 3 Desvendando o Universo dos CALLs no Mainframe

 

Bellacosa Mainframe apresenta o CALL em Cobol Pàrte III

☕💥 A Jornada do Padawan COBOL – Parte 3

Desvendando o Universo dos CALLs no Mainframe

RETURN-CODE, GOBACK, Dumps, CEEDUMP, IPCS e os Segredos Jedi do Troubleshooting

Ou como descobrir que um simples S0C4 pode transformar uma madrugada tranquila em uma aventura digna de um RPG de nível 99

Por Vagner Bellacosa – Bellacosa Mainframe


O momento em que o Padawan encontra seu primeiro ABEND

Todo desenvolvedor Mainframe possui uma história.

Normalmente começa assim:

Segunda-feira.

02h47.

Janela de produção.

Telefone toca.

Gerente pergunta:

O batch das contas correntes caiu.

Você responde:

Qual erro?

Resposta:

S0C4.

Silêncio.

Você pega café.

Abre SDSF.

Começa a aventura.


O universo do RETURN-CODE

Uma das coisas mais elegantes do COBOL é a comunicação entre programas.

Nem tudo precisa explodir com um ABEND.

Podemos retornar informações.

Exemplo:

Programa Chamador

CALL 'VALIDA'

USING WS-CLIENTE


IF RETURN-CODE NOT = 0

DISPLAY "ERRO"

END-IF

Subprograma

IF CPF-INVALIDO

MOVE 8 TO RETURN-CODE

GOBACK

END-IF

Convenção mais utilizada

RCSignificado
0Sucesso
4Aviso
8Erro
12Erro Grave
16Fatal

Exemplo elegante

Subprograma

EVALUATE TRUE


WHEN CLIENTE-INATIVO

MOVE 4 TO RETURN-CODE


WHEN CPF-INVALIDO

MOVE 8 TO RETURN-CODE


WHEN SALDO-NEGATIVO

MOVE 12 TO RETURN-CODE


WHEN OTHER

MOVE 0 TO RETURN-CODE


END-EVALUATE

Por que isso é importante?

Evita ABEND.

Permite tratamento.

Sistema continua vivo.


GOBACK vs EXIT PROGRAM

Padawan adora copiar.

Mestre entende diferença.


STOP RUN

STOP RUN

Finaliza tudo.

Acabou.

Batch morre.


GOBACK

GOBACK

Retorna.

Educado.

Seguro.


EXIT PROGRAM

Muito usado em subprogramas.

EXIT PROGRAM

Volta ao chamador.


O preferido da IBM

GOBACK

Sempre.


O grande vilão

S0C4

O Darth Vader dos ABENDS.


O que significa?

Violação de armazenamento.


Tentou acessar

memória inválida.


Exemplo

CALL 'ROTINA'

USING WS-NOME

ROTINA

espera

LK-NOME


LK-ID


LK-DATA

Recebe apenas um.

Kaboom.


Como ocorre

CPU acessa

endereço inexistente.


Exemplo

00000000

ou

FFFFFFFF

Crash.


S0C7

Outro inimigo.


Exemplo

Campo contém

ABC

Programa espera

999

Código

ADD 1 TO WS-VALOR

ABEND.


S806

Muito comum.

Programa não encontrado.


Verificar

STEPLIB

JOBLIB

LNKLST

APF


U4038

Erro do LE.

Language Environment.


Normalmente

problemas de parâmetros.

Heap.

Stack.

Storage.


O CEEDUMP

Ferramenta dos Mestres.

Poucos usam.

Deveriam usar.

Muito.


Compilar

TEST

ou

LIST

Executar

gera

CEEDUMP


Possui

Stack

Registers

Storage

Offsets

Variáveis

Call Stack


Exemplo

MAIN


↓

VALIDA


↓

CPFCHK


↓

FORMATA


↓

ABEND

Melhor que adivinhar.


IPCS

Ferramenta lendária.

Poucos dominam.


Permite

abrir dump.

Examinar memória.

Ver registradores.

Offsets.

TCB.

PSW.


O segredo do Offset

Mensagem

IGZ0035S


OFFSET X'01A2'

LISTING

0001A2 MOVE WS-ID

Achou erro.


Capturando problemas

Técnica Bellacosa 1

Log antes.

DISPLAY 'ENTRADA'


DISPLAY WS-ID


DISPLAY WS-NOME

Técnica 2

Log depois.

DISPLAY 'RETORNO'

Técnica 3

Interface versionada

05 LK-VERSAO.


PIC X(02).

Técnica 4

Validar ponteiros

IF PTR = NULL

DISPLAY 'ERRO'

END-IF

Técnica 5

Checksum

Estruturas críticas.


Técnica 6

Tamanho esperado

IF LENGTH OF LK-AREA


NOT = 256

Descobrindo loops

CALL

A

B

C

A

B

C


CPU

100%


Usar

SMF

RMF

Strobe

APA


Detectando corrupção

Antes

MOVE WS-BLOCO TO WS-BKP

Depois

Comparar.

IF WS-BKP


NOT = WS-BLOCO

Monitorando produção

SMF 30

SMF 110

RMF


Dica Bellacosa

Nunca faça:

MOVE 16 TO RETURN-CODE
CONTINUE

E ignore.


Faça

IF RETURN-CODE > 0

DISPLAY MSG


PERFORM LOG


END-IF

Easter Egg Mainframe

Existe em praticamente todos os bancos:

Programa

GENCALL

ou

UTIL0001

Possui:

7000 linhas.

300 CALLs.

120 IFs.

47 GO TO.

3 autores.

Última alteração:

Documentação:

Nenhuma.


Produção:

Executa há vinte anos.


Ninguém mexe.


É conhecido como:

O Boss Final do Mainframe™


Checklist Jedi de Troubleshooting

✅ Verificar RETURN-CODE

✅ Conferir parâmetros

✅ Conferir ordem

✅ Conferir tamanho

✅ Conferir LISTING

✅ Conferir CEEDUMP

✅ Conferir Offset

✅ Conferir STEPLIB

✅ Conferir Binder

✅ Conferir RENT

✅ Conferir Work-Storage

✅ Conferir Local-Storage

✅ Conferir ponteiros

✅ Conferir versão da interface

✅ Conferir quantidade de cafés consumidos


A Filosofia Jedi do CALL – Parte 3

O Padawan iniciante acredita:

"O programa caiu."

O desenvolvedor intermediário pensa:

"Preciso achar a linha."

O Mestre Mainframe sabe:

O programa nunca cai sozinho.

Ele deixa pistas.

Offsets.

PSW.

CEEDUMP.

Registers.

SMF.

IPCS.

RETURN-CODE.

Storage.

Call Stack.

E o verdadeiro Jedi do z/OS aprende que depurar um problema em produção não é apenas corrigir um bug.

É fazer arqueologia digital em sistemas que processam bilhões de transações por dia, compreender contratos invisíveis entre programas escritos ao longo de décadas e transformar um assustador S0C4 das 3 da manhã em apenas mais uma história para contar tomando um café no Bellacosa Mainframe.


Na Parte 4, o Padawan enfrentará o conteúdo avançado: Reentrância, RENT/NORENT, Thread Safety, HEAP, STACK, CICS, LE, AMODE 31/64, otimização extrema de CALLs, microbenchmarks e os segredos utilizados pelos arquitetos de sistemas IBM Z para executar milhões de chamadas por segundo com segurança.


sábado, 2 de março de 2019

🪽 HERMES E AS MENSAGENS QUE NÃO PODIAM SE PERDER

 

Bellacosa Mainframe e o sistema de menssegeria no ibm mainframe.

☕ Um Café no Bellacosa Mainframe

🪽 HERMES E AS MENSAGENS QUE NÃO PODIAM SE PERDER

IBM MQ, COBOL, CICS, filas, tópicos, Kafka, eventos, persistência, commit, rollback, retry, DLQ, idempotência, observabilidade — e o dia em que Hermes descobriu que entregar uma mensagem aos deuses era muito mais complicado do que simplesmente correr pelo Olimpo.



🎬 PRÓLOGO — O jovem programador e o mensageiro dos deuses

Imagine nosso jovem programador COBOL chegando para trabalhar.

08:07.

Café na mão.

ISPF aberto.

Nenhum ABEND.

Por enquanto.

Seu programa recebe uma transação, atualiza algumas informações no Db2 e precisa avisar outro sistema de que determinada operação aconteceu.

Ele pensa:

— Fácil. Eu chamo o outro programa.

Uma voz surge atrás dele:

— E se ele estiver fora do ar?

O jovem vira a cadeira.

Ali está um sujeito usando sandálias aladas, segurando um caduceu e olhando para o terminal 3270 como se aquilo fosse perfeitamente normal.

— Quem é você?

— Hermes.

Na mitologia grega, Hermes era o mensageiro dos deuses. Circulava entre diferentes mundos levando informações, ordens e notícias.

Em nossa história, portanto, ele conseguiu um emprego novo:

Arquiteto de Integração do Olimpo.

Hermes aponta para a tela.

— Padawan, você está cometendo o primeiro pecado da integração distribuída.

— Qual?

— Acreditar que todo mundo estará disponível quando você precisar.

E assim começa nossa viagem pela mensageria e integração assíncrona no mainframe.



🏛️ CAPÍTULO 1 — O OLIMPO NÃO É UMA ILHA

Durante muito tempo, quem começa a estudar mainframe pode desenvolver uma visão semelhante a esta:

COBOL
  │
  ├── JCL
  ├── CICS
  ├── Db2
  ├── VSAM
  └── IMS

Parece um ecossistema fechado.

Mas o mainframe moderno está conectado a praticamente tudo:

                    MAINFRAME
                        │
        ┌───────────────┼───────────────┐
        ▼               ▼               ▼
      Cloud           Mobile          Web
        │               │               │
        ├───────────────┼───────────────┤
        ▼               ▼               ▼
    APIs             Kafka          Analytics
        │                               │
        ▼                               ▼
 Microservices                    Data Platforms

Bancos, seguradoras, empresas aéreas, varejistas, indústrias e governos possuem aplicações construídas em tecnologias e épocas completamente diferentes.

Um programa COBOL pode precisar conversar com:

Java.

Python.

SAP.

Linux.

Windows.

Cloud.

Aplicações móveis.

Microsserviços.

Sistemas parceiros.

Plataformas analíticas.

Hermes sorri.

— Finalmente um trabalho digno de um mensageiro dos deuses.

Mas surge uma questão:

Como fazemos tantos mundos diferentes conversarem de maneira confiável?

Uma das respostas é mensageria.



⚡ CAPÍTULO 2 — ZEUS QUER UMA RESPOSTA AGORA

Antes de entender integração assíncrona, precisamos entender integração síncrona.

Imagine:

PROGRAMA A
    │
    │ REQUEST
    ▼
PROGRAMA B
    │
    │ PROCESSAMENTO
    ▼
 RESPONSE
    │
    ▼
PROGRAMA A

A envia uma solicitação.

A espera.

B processa.

B responde.

A continua.

Isso é perfeitamente adequado para inúmeras situações.

Quando você consulta o saldo bancário, por exemplo, normalmente quer a resposta naquele momento.

Zeus pergunta:

— Quanto tenho na conta?

Você dificilmente responderia:

— Senhor dos trovões, sua solicitação foi aceita. Talvez eu responda amanhã.

Talvez seja seu último dia no Olimpo.

Portanto, integração síncrona não é ruim.

O problema aparece quando fazemos tudo dessa maneira.



⏳ CAPÍTULO 3 — E SE APOLO ESTIVER FORA DO AR?

Considere:

CICS
 │
 └────────► SISTEMA B
               │
               X
             OFFLINE

Agora temos perguntas interessantes.

Quanto tempo o CICS deve esperar?

Cinco segundos?

Trinta?

Um minuto?

O que acontece com a transação?

Tentamos novamente?

Quantas vezes?

O usuário fica esperando?

Fazemos rollback?

É aí que Hermes coloca sobre a mesa uma pequena caixa.

— O que é isso?

— Uma fila.

O programador olha desconfiado.

Hermes escreve uma mensagem:

PEDIDO 4711

e coloca dentro da caixa.

— Agora posso ir embora.

— Mas ninguém recebeu!

— Ainda.

Essa palavra muda tudo.



📬 CAPÍTULO 4 — A CAIXA POSTAL DO OLIMPO

A arquitetura agora é:

PRODUTOR
    │
    │ mensagem
    ▼
┌───────────────┐
│     QUEUE     │
│               │
│ MSG 4711      │
└───────┬───────┘
        │
        ▼
   CONSUMIDOR

O produtor não precisa necessariamente esperar que o consumidor processe naquele instante.

Ele entrega a mensagem à infraestrutura de mensageria.

Esse conceito é fundamental:

DESACOPLAMENTO TEMPORAL

Produtor e consumidor não precisam necessariamente estar disponíveis simultaneamente.

Imagine um sistema CICS produzindo mensagens durante uma indisponibilidade temporária do consumidor.

CICS
 │
 ├── MSG 1001 ──► QUEUE
 ├── MSG 1002 ──► QUEUE
 ├── MSG 1003 ──► QUEUE
 └── MSG 1004 ──► QUEUE

                   CONSUMIDOR
                      OFFLINE

Posteriormente:

CONSUMIDOR ONLINE

QUEUE
 │
 ├── MSG 1001
 ├── MSG 1002
 ├── MSG 1003
 └── MSG 1004
       │
       ▼
PROCESSAMENTO

Esse princípio é conhecido como store-and-forward.

Hermes comenta:

— Finalmente inventaram algo melhor que minhas pernas.


🟦 CAPÍTULO 5 — HERMES CONHECE IBM MQ

No universo IBM Z, um dos grandes protagonistas dessa história é o IBM MQ.

Para nosso Padawan, vamos começar pelo modelo mais simples:

┌──────────────┐
│ COBOL / CICS │
└──────┬───────┘
       │
       │ MQPUT
       ▼
┌─────────────────────┐
│       IBM MQ        │
│                     │
│   Queue Manager     │
│         │           │
│         ▼           │
│       QUEUE         │
└─────────┬───────────┘
          │
          │ MQGET
          ▼
┌─────────────────────┐
│     CONSUMIDOR      │
└─────────────────────┘

Guarde inicialmente duas palavras:

MQPUT coloca uma mensagem.

MQGET obtém uma mensagem.

Claro que IBM MQ é muito maior que isso.

Mas todo Jedi começou segurando um sabre de treinamento.


💳 CAPÍTULO 6 — HERMES COMPRA UM CAFÉ

Hermes desce do Olimpo e compra um café.

R$ 12.

Uma simples compra pode provocar vários processamentos:

COMPRA
 │
 ├── autorização
 ├── registro financeiro
 ├── antifraude
 ├── notificação
 ├── cashback
 ├── analytics
 └── histórico

Agora imagine executar tudo sincronamente:

COMPRA
 │
 ├──► ANTIFRAUDE
 ├──► NOTIFICAÇÃO
 ├──► CASHBACK
 ├──► ANALYTICS
 └──► HISTÓRICO

Analytics ficou indisponível.

Devemos impedir Hermes de tomar café?

Provavelmente não.

Aqui surge uma importante decisão arquitetural:

O que precisa acontecer antes da resposta e o que pode acontecer depois?

Podemos ter:

                 COMPRA
                    │
                    ▼
              AUTORIZAÇÃO
                    │
                   OK
                    │
          ┌─────────┴─────────┐
          ▼                   ▼
     RESPONDE AO POS        EVENTO
                               │
                               ▼
                           MENSAGERIA
                               │
                 ┌─────────────┼─────────────┐
                 ▼             ▼             ▼
             Analytics     Cashback      Notificação

Agora estamos pensando como arquitetos.

Mensageria não é simplesmente colocar informações em uma fila.

É decidir onde podemos remover dependências.


🔖 CAPÍTULO 7 — O PERGAMINHO 4711

Integração assíncrona não significa necessariamente ausência de resposta.

Imagine que Hermes entregue:

REQUEST-ID = 4711

O consumidor processa e posteriormente envia:

CORRELATION-ID = 4711

Assim podemos relacionar:

REQUEST 4711
     │
     ▼
 processamento
     │
     ▼
RESPONSE 4711

Isso é correlação.

Imagine milhares de solicitações circulando pelo Olimpo.

Sem identificadores seria caos.

Correlation IDs também são extremamente úteis para observabilidade.

Quando alguém disser:

— Minha transação desapareceu!

você poderá procurar o identificador através das diferentes etapas.

Hermes chama isso de:

rastreamento do pergaminho sagrado.

O pessoal de observabilidade prefere chamar de tracing.


💾 CAPÍTULO 8 — A MENSAGEM NÃO PODE DESAPARECER

Nem toda mensagem possui a mesma importância.

Considere:

CPU = 43%

Talvez perder uma amostra de telemetria seja tolerável.

Agora considere:

TRANSFERENCIA
ORIGEM=123
DESTINO=456
VALOR=50000

A conversa muda.

Mensageria empresarial permite trabalhar com diferentes requisitos de persistência e confiabilidade.

Mas isso envolve trade-offs.

Persistência e garantias adicionais possuem custos.

Portanto a pergunta não é simplesmente:

"Persistente é melhor?"

A pergunta correta é:

"Qual nível de garantia o negócio exige?"

Essa mudança de pergunta é uma característica importante de engenharia.


🔄 CAPÍTULO 9 — HERMES ENTREGA A MESMA CARTA DUAS VEZES

Chegamos a uma das partes mais perigosas.

Uma mensagem diz:

PAGAR R$ 100
TRANSACTION-ID = ABC123

O consumidor processa.

PAGAMENTO OK

Mas alguma falha ocorre no momento errado.

A infraestrutura pode, dependendo do desenho e das garantias adotadas, apresentar a mensagem novamente.

O programa recebe:

PAGAR R$ 100
TRANSACTION-ID = ABC123

e paga novamente.

Agora temos:

R$100 + R$100 = R$200

E alguém recebe um telefonema às:

03:17.

Easter egg encontrado. ☕

A palavra mágica é:

IDEMPOTÊNCIA

O consumidor deve conseguir reconhecer que:

ABC123

já produziu seu efeito de negócio.

Por exemplo:

ABC123 JÁ PROCESSADA?

SIM ──► não repetir efeito
NÃO ──► processar

Esse assunto é fundamental quando ouvimos a expressão exactly-once.

Sempre pergunte:

Exactly-once onde?

No broker?

No transporte?

No consumidor?

No banco?

No efeito financeiro final?

Sistemas distribuídos adoram transformar frases simples em problemas profundamente interessantes.


☠️ CAPÍTULO 10 — MEDUSA ENTROU NA FILA

Agora temos:

MSG 001 → OK
MSG 002 → OK
MSG 003 → ERRO
MSG 004
MSG 005

Tentamos MSG 003 novamente.

Erro.

Novamente.

Erro.

Novamente.

Erro.

Ela petrifica qualquer consumidor que tente processá-la.

Hermes olha para a fila.

— Medusa.

Na engenharia chamamos algo semelhante de poison message.

Precisamos impedir ciclos infinitos:

GET
 │
 ▼
ERROR
 │
 ▼
ROLLBACK
 │
 ▼
GET
 │
 ▼
ERROR

Uma arquitetura madura estabelece políticas de retry e tratamento de mensagens problemáticas.

Depois de determinado tratamento ou número de tentativas, a mensagem pode ser direcionada para análise.

Entram em cena mecanismos associados a Dead-Letter Queues.

QUEUE
  │
  ▼
PROCESSAMENTO
  │
  ├──────────────► OK
  │
  ▼
 ERROR
  │
  ▼
 RETRY
  │
  ▼
continua falhando
  │
  ▼
 DLQ

Mas atenção:

DLQ não é cemitério.

Uma DLQ que ninguém monitora é apenas um lugar elegante para esconder incidentes.


⏱️ CAPÍTULO 11 — NÃO ATAQUE UM SISTEMA QUE JÁ ESTÁ CAÍDO

Retry também pode causar desastre.

Imagine 100 mil mensagens falhando.

Todas tentam novamente imediatamente.

100.000
   │
   ▼
 RETRY
   │
   ▼
SERVIÇO DOENTE

O serviço tenta recuperar-se enquanto recebe uma avalanche.

Podemos utilizar estratégias de backoff:

tentativa 1
    │
    ▼
espera
    │
tentativa 2
    │
    ▼
espera maior
    │
tentativa 3

Também pode haver jitter, introduzindo variação para evitar que milhares de clientes façam retry exatamente no mesmo instante.

Hermes resume:

— Se a porta do templo está quebrada, mandar dez mil pessoas baterem nela simultaneamente dificilmente vai consertá-la.


🔐 CAPÍTULO 12 — HADES DESCOBRE COMMIT E ROLLBACK

Agora entramos em território profundamente mainframe.

Imagine:

CICS
 │
 ├── UPDATE Db2
 │
 └── MQPUT

Queremos consistência.

Uma situação perigosa seria:

Db2 = COMMIT
MQ  = ROLLBACK

Ou o inverso:

Db2 = ROLLBACK
MQ  = COMMIT

Dependendo da arquitetura e dos recursos envolvidos, CICS, Db2 e MQ podem participar de unidades de trabalho coordenadas.

Conceitualmente:

┌─────────────────────────────┐
│        UNIT OF WORK         │
│                             │
│ UPDATE DB2                  │
│ MQPUT                       │
│                             │
│ COMMIT / ROLLBACK           │
└─────────────────────────────┘

E aqui existe uma deliciosa curiosidade histórica.

Muita gente olha para arquiteturas modernas distribuídas como se problemas de consistência tivessem sido descobertos ontem.

Mainframeiros olham para aquilo segurando uma xícara de café e pensam:

— Interessante. Estamos discutindo commit, rollback, recovery e integridade há algumas décadas.


📢 CAPÍTULO 13 — HERMES DESCOBRE O PUB/SUB

Fila e tópico não são a mesma coisa.

No modelo clássico de queue:

PRODUTOR
    │
    ▼
  QUEUE
    │
    ▼
CONSUMIDOR

Agora imagine um acontecimento:

PAYMENT.APPROVED

Muitos sistemas estão interessados.

                  PAYMENT.APPROVED
                         │
                         ▼
                       TOPIC
                         │
             ┌───────────┼───────────┐
             ▼           ▼           ▼
         Marketing   Analytics   Notificação

Entramos em Publish/Subscribe.

O produtor publica algo.

Interessados assinam.

Isso permite diminuir determinado tipo de acoplamento.

Em vez de:

A conhece B
A conhece C
A conhece D
A conhece E

podemos ter:

A
│
▼
"PAYMENT.APPROVED"
│
▼
BROKER

A informa que algo aconteceu.

Os interessados decidem o que fazer.


📜 CAPÍTULO 14 — COMANDO NÃO É EVENTO

Hermes recebe dois pergaminhos.

Primeiro:

GENERATE-INVOICE

Segundo:

INVOICE-GENERATED

Parecem semelhantes.

Semanticamente são diferentes.

O primeiro é uma intenção ou comando:

Faça alguma coisa.

O segundo descreve um fato:

Alguma coisa aconteceu.

Compare:

COMMAND
└──► SHIP-ORDER

com:

EVENT
└──► ORDER-SHIPPED

Essa distinção é extremamente importante em arquiteturas orientadas a eventos.

Um evento deve representar algo significativo que ocorreu no domínio.


🐘 CAPÍTULO 15 — ZEUS PERGUNTA: "E KAFKA?"

É inevitável.

Alguém menciona mensageria.

Cinco minutos depois:

Kafka.

Apache Kafka é uma plataforma de event streaming distribuído.

Mas não devemos resumir a discussão a:

Kafka = MQ novo

ou:

MQ = Kafka velho

É uma simplificação ruim.

Como primeiro mapa mental:

IBM MQ
 │
 ├── queues
 ├── reliable messaging
 ├── integração empresarial
 ├── routing
 └── forte tradição transacional

Enquanto Kafka trabalha fortemente com conceitos como:

Kafka
 │
 ├── topics
 ├── partitions
 ├── offsets
 ├── retention
 ├── replay
 └── event streaming

No Kafka, podemos imaginar:

TOPIC
 │
 ├── PARTITION 0
 │      ├── EVENT 0
 │      ├── EVENT 1
 │      └── EVENT 2
 │
 └── PARTITION 1
        ├── EVENT 0
        └── EVENT 1

Consumidores acompanham posições usando offsets.

Dependendo da retenção e arquitetura, eventos podem ser relidos.

Isso abre possibilidades interessantes para:

analytics,

event streaming,

integração,

reprocessamento,

data platforms,

event-driven architectures.


🤝 CAPÍTULO 16 — MQ E KAFKA NÃO PRECISAM DUELAR

Hermes coloca IBM MQ de um lado.

Kafka do outro.

Zeus prepara um raio.

— Que vença o melhor!

Hermes responde:

— Não funciona assim.

Podemos perfeitamente encontrar arquiteturas contendo:

              IBM Z
                │
        COBOL / CICS
        Db2 / IMS
                │
                ▼
              IBM MQ
                │
       ┌────────┴────────┐
       ▼                 ▼
 Sistemas            Integração
 corporativos             │
                          ▼
                        Kafka
                          │
             ┌────────────┼────────────┐
             ▼            ▼            ▼
          Cloud       Analytics      Data

Não precisamos transformar tecnologia em religião.

A pergunta profissional é:

Qual problema estou tentando resolver?


📚 CAPÍTULO 17 — O COPYBOOK ENCONTRA O JSON

Mensageria precisa de contratos.

Imagine:

{
  "customer": 123,
  "amount": 500
}

Alguém altera para:

{
  "customerId": 123,
  "amount": 500,
  "currency": "BRL"
}

Consumidores antigos podem ter problemas.

O programador COBOL deveria imediatamente reconhecer o conceito.

Veja:

01 CUSTOMER-RECORD.
   05 CUSTOMER-ID       PIC 9(10).
   05 CUSTOMER-NAME     PIC X(40).
   05 CUSTOMER-STATUS   PIC X.

Copybooks também representam contratos estruturais entre programas e dados.

No ecossistema distribuído encontramos mecanismos como:

JSON Schema,

Avro,

Protocol Buffers.

Todos enfrentam questões familiares:

estrutura,

tipos,

campos,

versões,

compatibilidade,

evolução.

Portanto, quando alguém disser que contratos de dados são uma inovação moderna, não discuta.

Tome um café.

Mostre um copybook de 1987.

Continue trabalhando.


📈 CAPÍTULO 18 — A FILA COMEÇA A ENGORDAR

Agora Hermes encontra:

PRODUTOR
10.000 mensagens/s

CONSUMIDOR
6.000 mensagens/s

Temos:

10.000 - 6.000
=
4.000 mensagens/s

acumulando.

Em uma hora:

4.000 × 3.600
=
14.400.000 mensagens

Nenhum programa necessariamente sofreu ABEND.

Nenhum servidor necessariamente caiu.

Mesmo assim temos um incidente crescendo.

Esse fenômeno nos leva ao conceito de backpressure.

PRODUÇÃO
10.000/s
    │
    ▼
████████████████████████████
            QUEUE
              │
              ▼
           6.000/s
         CONSUMIDOR

Agora precisamos pensar em capacidade.

Podemos aumentar consumidores?

Existe processamento paralelo?

Precisamos preservar ordenação?

Qual o tamanho das mensagens?

Quanto podemos acumular?

Qual é o SLA?

Qual é o limite operacional?


🔭 CAPÍTULO 19 — HERMES INSTALA OBSERVABILIDADE NO OLIMPO

Mensageria sem observabilidade pode virar uma caixa-preta.

Precisamos conhecer coisas como:

queue depth
message age
throughput
consumer rate
processing latency
error rate
retry count
DLQ depth
end-to-end latency

Existe uma armadilha particularmente interessante.

Uma fila contendo:

100.000 mensagens

pode estar saudável se processar centenas de milhares rapidamente.

Enquanto outra contendo:

37 mensagens

pode estar em situação crítica se a mensagem mais antiga estiver esperando quatro horas.

Portanto:

QUEUE DEPTH NÃO CONTA TODA A HISTÓRIA.

Precisamos observar também message age.

Pergunte:

Qual é a idade da mensagem mais antiga?

Essa simples pergunta pode revelar problemas invisíveis.


🔢 CAPÍTULO 20 — A ORDEM DOS PERGAMINHOS

Considere:

1 CUSTOMER.CREATED
2 CUSTOMER.UPDATED
3 CUSTOMER.DELETED

Esperamos:

1 → 2 → 3

Mas sistemas distribuídos e processamento paralelo exigem cuidado com ordenação.

Imagine:

1 → 3 → 2

Agora tentamos atualizar algo depois de excluí-lo.

Surge outra grande decisão arquitetural:

Onde realmente precisamos preservar ordem?

Ordenação global pode limitar paralelismo e throughput.

Por isso tecnologias modernas trabalham com conceitos como:

partition,

key,

grouping,

sequence.

Às vezes precisamos preservar ordem apenas para determinado cliente:

CUSTOMER 123
1 → 2 → 3

enquanto outro cliente pode ser processado independentemente:

CUSTOMER 999
1 → 2 → 3

Isso permite paralelismo sem abandonar a ordem relevante para o negócio.


🕸️ CAPÍTULO 21 — O ESPAGUETE ASSÍNCRONO

Hermes abre um diagrama antigo.

A → Q1 → B
    │
    └── Q2 → C
              │
              Q7
              │
              ▼
              D → Q13
                   │
                   ▼
                   E → Q29
                        │
                        ▼
                        ???

— Quem criou Q29?

Silêncio.

— Quem consome?

Silêncio.

— Podemos remover?

Um velho programador COBOL levanta lentamente a cabeça:

— Está aí desde 2004.

Hermes:

— E?

— Melhor não mexer.

Bem-vindo à arqueologia corporativa.

Mensageria também pode produzir spaghetti architecture.

Por isso precisamos de:

documentação,

ownership,

catálogo de interfaces,

contratos,

versionamento,

observabilidade,

governança,

naming standards,

políticas de retenção,

procedimentos de recuperação.

Tecnologia excelente sem governança continua capaz de produzir caos excelente.


🌉 CAPÍTULO 22 — MODERNIZAR NÃO SIGNIFICA DEMOLIR O TEMPLO

Existe uma visão simplista:

MODERNIZAÇÃO
=
tirar COBOL

Não.

Modernização pode significar:

             COBOL
               │
        negócio crítico
               │
       ┌───────┴────────┐
       ▼                ▼
      API              MQ
       │                │
       ▼                ▼
  síncrono          assíncrono
       │                │
       └────────┬───────┘
                ▼
           ECOSSISTEMA
                │
       ┌────────┼────────┐
       ▼        ▼        ▼
     Cloud    Kafka    Mobile

O COBOL pode continuar executando perfeitamente a lógica crítica.

Mudamos a maneira como essa lógica participa do ecossistema.

Isso também é modernização.

Talvez o problema nunca tenha sido o programa COBOL.

Talvez fosse o acoplamento em torno dele.


🧭 CAPÍTULO 23 — PASSO A PASSO DO PADAWAN

Se você está começando agora, não tente aprender IBM MQ inteiro em um fim de semana.

Hermes recomenda uma trilha.

Passo 1 — Entenda produtor e consumidor.

Quem cria a mensagem?

Quem processa?

Passo 2 — Entenda queue.

Aprenda o modelo básico:

PRODUCER → QUEUE → CONSUMER

Passo 3 — Estude PUT e GET.

No universo MQ:

MQPUT
MQGET

Passo 4 — Estude persistência.

O que acontece se alguma coisa cair?

Passo 5 — Estude unidade de trabalho.

COMMIT
ROLLBACK

Passo 6 — Provoque erros mentalmente.

Pergunte sempre:

E SE?

E se o consumidor cair?

E se a rede cair?

E se receber duas vezes?

E se a mensagem estiver inválida?

E se 10 milhões chegarem?

E se ficarem seis horas esperando?

Passo 7 — Estude correlação.

Aprenda a seguir uma transação ponta a ponta.

Passo 8 — Estude retry e DLQ.

Falha não é exceção em sistemas distribuídos.

Falha faz parte do projeto.

Passo 9 — Estude idempotência.

Pergunte:

Posso executar isso duas vezes sem cobrar duas vezes o cliente?

Passo 10 — Aprenda Pub/Sub.

Depois diferencie:

COMMAND

de:

EVENT

Passo 11 — Estude Kafka.

Somente então compare modelos.

Passo 12 — Aprenda observabilidade.

Não basta entregar mensagens.

Precisamos provar que foram entregues e saber o que aconteceu quando não foram.


🧠 CAPÍTULO 24 — AS PERGUNTAS QUE TRANSFORMAM O PROGRAMADOR EM ENGENHEIRO

Quando receber uma integração para desenvolver, não pergunte apenas:

Qual COPYBOOK?

Pergunte:

Precisa ser síncrona?

Pode ser assíncrona?

Podemos receber duplicatas?

Precisamos preservar ordem?

Qual é o SLA?

Quanto tempo podemos acumular?

Qual é a unidade de trabalho?

Quem faz commit?

O que acontece no rollback?

Existe retry?

Qual política de backoff?

Existe DLQ?

Quem monitora a DLQ?

Existe correlation ID?

Como fazemos tracing?

O contrato possui versão?

Quem é o owner?

Como recuperamos mensagens?

Como sabemos que a recuperação terminou?

Essas perguntas valem muito mais do que simplesmente decorar uma API.


🏛️ EPÍLOGO — HERMES ENTREGA A ÚLTIMA MENSAGEM

Anoitece no Olimpo.

Nosso Padawan fecha o ISPF.

Hermes guarda seu caduceu.

O jovem programador finalmente percebe que passou o dia inteiro estudando filas, tópicos, mensagens, eventos, MQ, Kafka, commit, rollback, idempotência, DLQ, retry e observabilidade.

Mas aprendeu algo maior.

Mensageria não é sobre transportar bytes.

É sobre administrar dependências entre sistemas que inevitavelmente falharão em momentos diferentes.

Uma arquitetura síncrona pergunta:

"Você está disponível agora?"

Uma arquitetura assíncrona pode dizer:

"Tenho algo importante para você. Pegue quando puder, dentro das regras que estabelecemos."

Essa diferença permite construir sistemas extraordinariamente resilientes.

Hermes coloca sobre a mesa seu último pergaminho:

MESSAGE-ID: HERMES-0001
PERSISTENCE: YES
CORRELATION-ID: BELLACOSA
STATUS: DELIVERED

O Padawan pergunta:

— Então finalmente entendi IBM MQ?

Hermes ri.

— Não.

— Não?!

— Você entendeu algo mais importante.

— O quê?

Hermes aponta para o mainframe.

Por que ele existe.

Porque sistemas críticos não vivem em um universo perfeito.

Redes caem.

Serviços param.

Consumidores atrasam.

Mensagens chegam duplicadas.

Dados mudam.

Filas crescem.

Aplicações sofrem rollback.

Máquinas reiniciam.

Deploys dão errado.

E eventualmente alguém faz alguma coisa inexplicável numa sexta-feira à tarde.

Engenharia de sistemas críticos não consiste em acreditar que nada disso acontecerá.

Consiste em construir sistemas preparados para continuar corretos quando acontecer.

Talvez seja justamente por isso que conceitos de mensageria combinam tão bem com o mundo mainframe.

O mainframe nunca foi construído partindo da pergunta:

"Como fazemos uma demonstração bonita?"

Ele nasceu em um mundo que perguntava:

"O que acontece se isso der errado?"

Essa pergunta atravessou gerações.

Do batch ao CICS.

Do VSAM ao Db2.

Do terminal 3270 às APIs.

Do MQ ao Kafka.

Do datacenter à cloud.

As tecnologias mudaram.

A responsabilidade permaneceu.

Hermes calça novamente suas sandálias aladas.

Antes de partir, olha uma última vez para nosso jovem programador COBOL:

— Amanhã estudaremos uma coisa chamada event-driven architecture.

O Padawan sorri:

— Parece moderno.

Hermes também sorri.

— É. Mas traga café.

— Por quê?

— Porque os humanos inventaram um nome novo para algo que vai nos fazer discutir commit, rollback, entrega, ordenação e recuperação outra vez.

E desaparece pelos corredores do Olimpo.

No terminal permanece apenas uma mensagem:

***************************************
* HERMES MESSAGE DELIVERY SYSTEM      *
***************************************

MESSAGE ......... BELLACOSA-0317
STATUS .......... DELIVERED
QUEUE DEPTH ..... 00000000
OLDEST MSG AGE .. 00:00:00
DLQ DEPTH ....... 00000000

ALL SYSTEMS NORMAL.

***************************************
* NEVER TRUST "ALL SYSTEMS NORMAL".   *
***************************************

Nosso Padawan olha para o relógio.

03:17.

Em algum lugar do datacenter, uma fila começa lentamente a crescer.

QUEUE DEPTH: 00000001

Hermes já havia ido embora.

Mas a aula seguinte acabara de começar.


☕ Moral do Bellacosa Mainframe

Mensageria não é colocar uma mensagem numa fila.

É saber:

quem envia, quem recebe, quando recebe, quantas vezes pode receber, em qual ordem, durante quanto tempo podemos esperar, o que acontece se ninguém receber, como recuperamos, como impedimos duplicidade, como observamos o caminho e como mantemos o negócio correto quando alguma peça inevitavelmente falhar.

Quando o programador COBOL começa a fazer essas perguntas, deixa de enxergar apenas programas.

Passa a enxergar sistemas.

Quando começa a enxergar sistemas, deixa de tratar MQ como apenas mais uma API.

Passa a compreender arquitetura.

E quando entende arquitetura, finalmente percebe por que Hermes, mensageiro dos deuses, teria se sentido perfeitamente em casa diante de um IBM Z:

uma mensagem só cumpriu sua missão quando chegou ao destino certo, no contexto certo, com integridade — e existe evidência suficiente para provar isso.

Bem-vindo ao Bellacosa Mainframe. Onde até os deuses precisam respeitar COMMIT e ROLLBACK.

sexta-feira, 1 de março de 2019

DATE A LIVE III — A TEMPORADA QUE ABRIU O CÓDIGO-FONTE DA REALIDADE E DESCOBRIU QUE OS ESPÍRITOS ERAM APENAS O SINTOMA DE UMA FALHA MUITO MAIOR

 

Bellacosa Mainframe e a terceira temporada Date a Live 

☕💣⏳🌌 OPERADOR, O SYSLOG DO UNIVERSO ACABOU DE REVELAR UM ERRO CRÍTICO DE ORIGEM!

DATE A LIVE III — A TEMPORADA QUE ABRIU O CÓDIGO-FONTE DA REALIDADE E DESCOBRIU QUE OS ESPÍRITOS ERAM APENAS O SINTOMA DE UMA FALHA MUITO MAIOR


Ficha Técnica

Título Original: デート・ア・ライブIII (Date A Live III)

Obra Original: Light Novel Date A Live

Autor: Kōshi Tachibana

Ilustrações: Tsunako

Diretor: Keitaro Motonaga

Estúdio: Production IMS

Exibição Original: 11 de janeiro de 2019 a 29 de março de 2019

Quantidade de Episódios: 12

Gêneros:

  • Romance

  • Harém

  • Ficção Científica

  • Fantasia

  • Ação

  • Drama

  • Mistério

  • Sobrenatural

Classificação Indicativa:
16 anos


O Fim de Uma Era

Date A Live III ocupa uma posição muito peculiar dentro da franquia.

A primeira temporada apresentou os Espíritos.

A segunda expandiu a infraestrutura emocional da história.

A terceira começa a desmontar o ambiente inteiro para mostrar os bastidores do sistema.

Na prática, ela funciona como a temporada responsável por mudar a pergunta central da obra.

Antes:

Como conter os Espíritos?

Agora:

Quem criou os Espíritos e por quê?

Essa simples mudança altera completamente a narrativa.


Sinopse

Após selar diversos Espíritos e reduzir a frequência dos Spacequakes, Shido acredita que a situação está relativamente sob controle.

Mas novos incidentes começam a surgir.

Enquanto a Ratatoskr continua executando operações de contenção, segredos enterrados no passado começam a emergir.

Linhas temporais entram em conflito.

Memórias são alteradas.

Identidades são questionadas.

E a verdadeira origem dos Espíritos começa lentamente a aparecer.


Resumo da História

A terceira temporada adapta principalmente os volumes centrais da light novel.

Os destaques são:

Arco de Natsumi

Arco de Origami

Revelações sobre a Origem dos Espíritos

São justamente esses eventos que transformam Date A Live de uma simples comédia romântica sobrenatural para uma trama de ficção científica cada vez mais complexa.


Arco de Natsumi Kyouno

A Espírito das Máscaras

Natsumi possui a capacidade de alterar:

  • aparência

  • idade

  • identidade

  • forma física

Ela pode literalmente se tornar qualquer pessoa.

Mas existe um problema.

Ela odeia sua verdadeira aparência.


A Leitura Psicológica do Arco

Natsumi representa:

  • insegurança

  • baixa autoestima

  • comparação social

  • medo de rejeição

Ela é uma personagem extremamente moderna.

Sua história dialoga diretamente com uma geração acostumada a filtros, avatares e identidades digitais.


Visão Bellacosa Mainframe

Natsumi é um sistema altamente virtualizado.

Possui centenas de interfaces.

Mas perdeu o acesso à configuração original.

O desafio não é corrigir o software.

É aceitar o hardware.


Arco de Origami Tobiichi

O Melhor Arco da Temporada

Se existe um momento que eleva Date A Live III acima das temporadas anteriores, é o arco de Origami.

Aqui a série mergulha profundamente em:

  • viagem temporal

  • culpa

  • arrependimento

  • causalidade

Origami descobre informações devastadoras sobre o passado.

Ao tentar corrigir determinados eventos, acaba produzindo consequências ainda maiores.


O Paradoxo Temporal

Pela primeira vez a franquia explora seriamente:

  • linhas temporais alternativas

  • mudanças históricas

  • efeitos borboleta

O resultado é um dos arcos mais emocionantes da obra.


Principais Personagens

Shido Itsuka

Continua sendo o principal agente de estabilização do ambiente.

Porém agora atua menos como mediador romântico e mais como solucionador de crises existenciais.


Origami Tobiichi

A grande estrela da temporada.

Sua evolução emocional é uma das melhores da franquia.


Natsumi Kyouno

Responsável por um dos retratos mais interessantes sobre autoaceitação vistos em Date A Live.


Tohka Yatogami

Mantém sua importância como centro emocional da história.


Kurumi Tokisaki

Mesmo sem dominar toda a temporada, sua presença continua moldando os eventos centrais da franquia.

Cada aparição gera impacto.


Kotori Itsuka

Segue coordenando as operações da Ratatoskr.

Na visão Bellacosa:

A gerente do NOC interdimensional.


O Que Há de Diferente em Date A Live III?

A resposta é simples:

Menos encontros.

Mais mistério.

As duas primeiras temporadas focavam principalmente em:

  • romance

  • humor

  • interação entre personagens

A terceira direciona seus esforços para:

  • origem dos Espíritos

  • conspirações

  • viagens temporais

  • revelações do universo

O anime torna-se mais maduro.

Mais sombrio.

Mais filosófico.


Temáticas Profundas

Identidade

Quem somos quando retiramos todas as máscaras?

Natsumi representa exatamente essa questão.


Culpa

Origami vive aprisionada pelo peso do passado.


Aceitação

Grande parte dos personagens precisa aprender a conviver com suas próprias falhas.


Destino

Até que ponto podemos alterar eventos predestinados?


Consequências

Toda decisão produz efeitos.

Mesmo as melhores intenções podem gerar tragédias.


As Aventuras da Temporada

Operação Natsumi Recovery

Objetivo:

Restaurar a autoestima de uma Espírito que perdeu a confiança em si mesma.


Operação Temporal Origami

Objetivo:

Corrigir falhas históricas sem destruir a consistência do ambiente.


Investigação da Origem dos Espíritos

Objetivo:

Executar análise forense nos eventos que deram origem ao sistema inteiro.


Gerenciamento de Incidentes Temporais

Objetivo:

Evitar corrupção de dados na linha histórica da realidade.


As Mensagens Ocultas

Date A Live III possui muito mais profundidade do que aparenta.


As Pessoas Mostram Apenas Parte de Quem São

Natsumi é a metáfora perfeita para isso.

Todos possuem máscaras.


O Passado Não Pode Ser Apagado

Ele pode ser compreendido.

Mas não eliminado.


A Culpa Pode Se Tornar Uma Prisão

Origami demonstra como uma única tragédia pode consumir uma vida inteira.


Conhecimento Nem Sempre Liberta

Algumas verdades são difíceis de aceitar.


Compreensão Continua Sendo a Melhor Ferramenta

A principal mensagem da franquia permanece intacta.


Houve Censura?

Sim.

Como nas temporadas anteriores:

  • pequenos cortes

  • escurecimento de cenas

  • ajustes em enquadramentos de fan service

As versões Blu-ray apresentaram várias dessas cenas sem as limitações da transmissão televisiva.

Contudo, a censura nunca impactou significativamente a narrativa principal.


Impacto Cultural

Date A Live III foi uma temporada extremamente importante.

Apesar de algumas críticas relacionadas ao ritmo acelerado da adaptação, ela foi responsável por:

  • expandir a mitologia da franquia

  • aprofundar Origami

  • consolidar Kurumi como figura central

  • preparar o terreno para as temporadas 4 e 5

Sem Date A Live III, a franquia dificilmente teria alcançado o nível narrativo das temporadas posteriores.


Análise Bellacosa Mainframe

Date A Live III é o momento em que os operadores finalmente recebem autorização para acessar os logs restritos do sistema.

Até então todos acreditavam que os Espíritos eram o problema.

Mas a auditoria revela algo surpreendente.

Os Espíritos não são a falha.

Eles são apenas os alertas.

O verdadeiro erro está enterrado nas camadas mais profundas da arquitetura da realidade.

A temporada abandona parcialmente a estrutura tradicional de harém e começa a se transformar em uma investigação sobre identidade, trauma, causalidade e livre-arbítrio.


Veredito Final Bellacosa Mainframe

CritérioNota
História9,5
Arco de Origami10
Desenvolvimento de Personagens9,5
Drama9,5
Mistério9,5
Ficção Científica9,0
Romance8,5
Impacto na Franquia10

Nota Final: 9,4/10

Date A Live III é a temporada que deixou de monitorar alarmes e iniciou uma investigação completa no banco de dados da existência. Ao abrir os arquivos ocultos do universo, descobrimos que os Espíritos nunca foram o problema principal — eles eram apenas os registros de erro de uma realidade que estava prestes a entrar em colapso. ☕💣⏳🌌


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