☕ 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 escalabilidade. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta escalabilidade. Mostrar todas as mensagens

sábado, 2 de agosto de 2025

Boas Praticas em Performance e otimização uma primeira olhada.

 

Boas Praticas em Performance e otimização uma primeira olhada.

4,424 followers

Falando sobre performance e otimização.

Salve jovem padawan, no artigo de hoje conversemos sobre um assunto pantanoso, que derruba 7 em 10 programadores, estou falando de performance e otimização de programas, infelizmente a pressa é inimiga da perfeição.

Como veremos no decorrer do artigo, o grande problema sempre é o fator tempo, somos todos coelhos da Alice: atrasados e fugindo da Rainha Louca, ops Rainha de Copas e no final quem paga é o programa implementado na máxima velocidade de desenvolvimento dentro possível, com uma qualidade mediana, atendendo o MVP.


Pense antes de codificar

Rascunhe seu programa em lápis e papel, desta forma consegue ter uma visão do todo, uma noção do caminho crítico e para o teste de mesa, num primeiro momento consegue-se visualizar pontos passiveis de melhoria e pontos onde o programa não se comporta da maneira espera.

Existem inúmeras ferramentas visuais no mercado, que auxiliam na depuração calculando o uso de memória, uso de CPU e gargalos do sistema, para o ambiente Mainframe existe o Omegamon e o APA. Ferramentas que em seus relatórios apresentam estatísticas fabulosas sobre os problemas encontrado no código, pontos de gargalo e tempo de execução.


Uso de memória

Cuidado ao codificar, não crie variáveis em excesso, lembre-se sempre de inicializar as variáveis no princípio do código, desta forma economizam-se ciclos de CPU gastos desnecessariamente, forçando paradas no processamento para inicializar as variáveis. Lembre-se I/O seja em acessos a discos e sub-programas externo estouram o Time.

Cuidado ao utilizar arrays e vetores, pois ao criar grandes tabelas internas estará consumindo memoria desnecessariamente e prejudicara o bom funcionamento do seu programa, principalmente em escala, quantos mais usuários maior queda de performance.

Verifique as variáveis não utilizadas, que gastam espaço em memória, pense num programa utilizado por milhares de usuários, com centenas de milhares de requisição, ao final de um ano, quanto de memória poderia ter sido economizado, quanto de processamento ou ciclos de CPU, gasto em gerenciamento de memória desnecessário. Imagine a pegada ecológica, gasto de eletricidade e CO2 liberado.


Ciclos de CPU

A pressa é inimiga da perfeição, muitas vezes criamos logica em que o programa consome desnecessariamente processamento, movendo variáveis semi-utilizadas ou mesmo sem nenhuma utilização, atente-se a código morto e rotinas que entram e saem sem agregar nenhum valor ao processo.

Pense no custo em CPU de chamadas repetida a functions, arrow-functions e programas externo, a cada parada de processo e pulo para outro programa e o próprio retorno ao programa chamador.

Trabalhe apenas com os campos da tabela que serão utilizados em outputs ou cálculos, o trafego de dados além da memória, gera gasto de CPU indevidos. Muitas vezes é mais produtivo, usar arquivo sequencial da tabela, através de unload, usar aplicativos específicos para ETL, a exemplo SORT do Mainframe.


Espaço em Disco

Em tempos de cloud computer e processamento distribuído, desvalorizávamos o impacto do processamento, em gravar dados desnecessariamente em disco, informações que nunca serão utilizadas e degradam o ambiente, obrigando a adquirir mais e mais espaço em disco.

Fazendo o programa perder milissegundos cruciais na busca da informação num disco imenso e cada vez mais abarrotado, uma política de dados é importante para evitar esse viés.


Os perigos de laços estilo While

Quando codificar While cuidado com os laços infinitos. Às vezes um teste de mesa incompleto deixa uma situação onde o FLAG de saída, pode parecer obvio, mas grandes programadores caíram em situação semelhante, um IF mal planejado e um FLAG descontrolado e surge o caos, com looping infinito ou anomalias de difícil reprodução.


Os perigos de laço estilo FOR

O perigo do FOR não é tão drástico quanto o While, mas devido a sua quantidade de uso é muito prejudicial a longo prazo, obrigando a aquisição de mais hardware inutilmente, uma solução bem simples é sair do laço assim que a solução for encontrada.


Os perigos de IF inúteis

Muitas vezes o programador está cheio de boas intenções e cria uma sequência sem fim de IFs. Mas para garantir a qualidade dos dados e o controle de fluxo do programa, porem muitas vezes são desnecessários, procure pensar numa lógica do IF master e somente se ele funciona gerar os outros testes em IF, quanto menos paradas para decisão mais performático e melhor será seu programa.

Use comandos em estilo EVALUATE, SWITCH para um controle de fluxo mais eficiente e atente-se a não usar ELSEs em demasia, dificultam muito a análise e ajudam a gerar erros de simpatia, pois às vezes confundimos o lugar do ELSE e no teste pulamos o IF.

Outro grande problema e a quantidade de paradas no processamento, obrigando o programa a funcionar como conta gostas.


Espionando programas em Mainframe

Como disse anteriormente existem algumas ferramentas fabulosas em ambiente Z/OS, o OMEGAMON e o APA monitoram e acompanham a performance de programas em ambiente Mainframe, indicando os custos de CPU / Memória e rotinas em looping e consumos/acessos diversos. Vale a pena conhecer o manual técnico e explorar esta ferramenta.

Em banco de dados DB2 existe o comando Explain que gera estatísticas de acesso e caminhos para melhorias tais como criar índices, reorg de tabelas, partição de ambientes e etc, auxiliando o DEV a criar querys mais performáticas.


Conclusão

Caro padawan, reconheço que fui superficial e que deixei pontos a esclarecer, mas o objetivo deste artigo. Foi fazê-lo pensar, a ter cuidado quando codifica, apesar das máquinas terem caído o custo, em quantidade, o uso de memória e CPU desnecessário tiram a competitividade da empresa, gerando custos ocultos e gerando prejuízos a longo prazo.

Como exercício de imaginação, pense um Banco com milhares de agências e milhões de clientes, usando os serviços 24 horas por dia, 7 dias por semana e 365 dias no ano. Quanto custara ao final do ano alguns IFs desnecessários e 2 segundos desperdiçados em loops inúteis?

Por isso pense bem ao codificar, faça teste de mesa, use papel e lápis para ajudar em seu trabalho, verifique os IF e loopings, não use campos de tabelas desnecessariamente e boa sorte.

Espero ter ajudado. Bom curso a todos.


Article content


Article content

Mais momento jabá, quem diria que já passou retrospectiva do meu 44° aniversario, tantas aventuras, tantos momentos únicos, memórias em imagens de momentos mágicos da vida do Tiozão visite meu vídeo e veja para onde fui desta vez: https://www.youtube.com/watch?v=sBgA0nvtpdU


Bom curso a todos.

Article content

https://www.linkedin.com/in/vagnerbellacosa/


Article content

https://github.com/VagnerBellacosa/

Pode me dar uma ajudinha no YouTube?

Article content

https://www.youtube.com/user/vagnerbellacosa


sexta-feira, 21 de julho de 2023

A Segunda Temporada de Kami-tachi ni Hirowareta Otoko: O Manual Definitivo de Como Escalar um Sistema sem Derrubar a Produção

 

Bellacosa Mainframe e a segunda temporada do mais fofo domador de slimes Kami tachi ni Hirowareta otoko

☕ Um Café no Bellacosa Mainframe

A Segunda Temporada de Kami-tachi ni Hirowareta Otoko: O Manual Definitivo de Como Escalar um Sistema sem Derrubar a Produção

"A primeira temporada mostrou como construir um ambiente estável. A segunda ensina como fazê-lo crescer sem perder a simplicidade. É exatamente o desafio que todo arquiteto de sistemas IBM Z enfrenta."

Muitos animes isekai acreditam que evolução significa enfrentar inimigos cada vez mais poderosos.

Kami-tachi ni Hirowareta Otoko 2 segue outro caminho.

Aqui, a evolução não é medida pelo tamanho da espada, mas pela capacidade de administrar pessoas, processos e conhecimento.

Sob a ótica do Bellacosa Mainframe, a segunda temporada é praticamente um curso de Capacity Planning, Governança, Escalabilidade e Automação Empresarial disfarçado de anime.


Ficha Técnica

Título Original

神達に拾われた男2

(Kami-tachi ni Hirowareta Otoko 2)

Título Internacional

By the Grace of the Gods – Season 2

Autor

Roy

Ilustrações

Ririnra

Light Novel

HJ Novels

Estúdio

Maho Film

O mesmo estúdio da primeira temporada, mantendo a identidade visual e o ritmo contemplativo da série.

Direção

Yoshiaki Yanagida

Roteiro

Kazuyuki Fudeyasu

Exibição

Janeiro de 2023

até

Março de 2023

Episódios

12

Cada episódio possui aproximadamente 24 minutos.


Gêneros

  • Isekai

  • Fantasia

  • Slice of Life

  • Iyashikei

  • Administração

  • Aventura

  • Comédia leve

Classificação indicativa:

12 anos

Quase não existe violência gráfica.

O foco continua sendo desenvolvimento humano.


Sinopse

Depois de consolidar sua lavanderia utilizando slimes, Ryoma percebe que o verdadeiro desafio não era criar um negócio.

Era fazê-lo crescer.

Clientes aumentam.

Funcionários aparecem.

Novas cidades entram na rota.

A demanda cresce.

Novas espécies de slimes surgem.

Novos contratos aparecem.

Agora Ryoma deixa de ser apenas um pesquisador.

Ele se torna um administrador.


Resumo da Segunda Temporada

Enquanto a primeira temporada era praticamente uma história de sobrevivência e descoberta, a segunda acompanha Ryoma administrando as consequências do próprio sucesso.

Ele precisa:

  • expandir a lavanderia;

  • formar novos funcionários;

  • abrir filiais;

  • lidar com logística;

  • organizar produção;

  • continuar pesquisando slimes;

  • manter relações com guildas e nobres.

É uma mudança interessante: o conflito deixa de ser "como sobreviver?" e passa a ser "como crescer sem perder qualidade?".


A História Vista por um Analista Mainframe

Imagine que a primeira temporada foi a implantação de um novo sistema COBOL em produção.

Tudo funciona.

Os usuários adoram.

Agora chega o problema real.

O banco compra outra instituição.

O volume de transações dobra.

Novas agências aparecem.

Mais integrações são exigidas.

O SLA fica mais rígido.

É exatamente isso que acontece com Ryoma.

Sua lavanderia passa a atender muito mais pessoas.

Isso exige:

  • novos processos;

  • treinamento;

  • padronização;

  • documentação;

  • delegação.

Ou seja...

Ele deixa de ser apenas programador.

Vira gerente de produção.


O Grande Tema da Temporada

Se a primeira temporada falava sobre reiniciar a vida, a segunda fala sobre escalar responsabilidades.

Ryoma aprende que crescer não significa trabalhar mais.

Significa trabalhar melhor.

É um conceito extremamente moderno.


Personagens

Ryoma Takebayashi

Continua sendo um protagonista extremamente raro.

Não busca fama.

Não procura reconhecimento.

Seu prazer continua sendo aprender.

Nesta temporada ele demonstra maior maturidade como líder.


Eliaria

Sua amizade com Ryoma continua evoluindo.

Ela amadurece emocionalmente e passa a compreender melhor as responsabilidades da nobreza.

A relação permanece delicada e natural, sem forçar um romance precoce.


Família Jamil

Reinhart, Elise e os demais seguem apoiando Ryoma.

Funcionam como um conselho administrativo que oferece recursos, contatos e estabilidade.


Guildas

As guildas ganham maior importância.

Representam instituições, regras e integração entre diferentes setores da sociedade.


Os Slimes

Mais uma vez roubam a cena.

Novas espécies aparecem.

Outras evoluem.

Algumas demonstram comportamentos inesperados.

O trabalho científico continua sendo um dos maiores diferenciais da série.


O Que Existe de Diferente na Segunda Temporada?

A mudança principal é de escala.

Na primeira temporada:

  • sobrevivência;

  • descoberta;

  • experimentação.

Na segunda:

  • gestão;

  • expansão;

  • liderança;

  • processos;

  • qualidade;

  • continuidade.

É praticamente a diferença entre escrever um programa COBOL e administrar um datacenter inteiro.


As Aventuras

Embora continue sendo um anime tranquilo, Ryoma participa de diversas atividades.

Expansão da lavanderia

Seu maior projeto.

Envolve logística, contratação, treinamento e qualidade.


Novas pesquisas com slimes

Ele continua catalogando espécies.

Cada descoberta gera novas aplicações.

Sob uma ótica moderna, lembra pesquisa e desenvolvimento (P&D).


Viagens

Ryoma visita novas regiões.

Conhece diferentes culturas.

Amplia sua rede de contatos.


Missões da guilda

Ainda existem aventuras tradicionais.

Mas servem mais para desenvolvimento pessoal do que para ação.


Os Slimes São um Datacenter Vivo

Sob a visão Bellacosa Mainframe:

Cada slime é um serviço.

Cada serviço possui responsabilidade única.

Quando novos slimes aparecem, Ryoma não pensa em combate.

Pensa em:

  • integração;

  • reaproveitamento;

  • eficiência;

  • automação.

É praticamente arquitetura orientada a serviços (SOA).


Mensagens Ocultas

1. Escalabilidade

Todo sistema pequeno funciona.

O difícil é crescer mantendo estabilidade.


2. Liderança

Ryoma aprende que ninguém administra tudo sozinho.

Delegar é obrigatório.


3. Documentação

Todo experimento é registrado.

Nada depende da memória.

Todo Sysprog experiente sabe o valor dessa prática.


4. Melhoria Contínua

Nunca existe versão final.

Sempre existe uma otimização possível.

É a filosofia Kaizen aplicada a um mundo de fantasia.


5. Saúde Mental

Mesmo com o crescimento do negócio, Ryoma preserva momentos de descanso, curiosidade e convivência.

A série reforça que produtividade sustentável depende de equilíbrio.


O Que a Segunda Temporada Diz Sem Falar

Existe uma crítica silenciosa ao ambiente corporativo moderno.

Ryoma jamais cresce sacrificando pessoas.

Nunca exige jornadas absurdas.

Nunca explora funcionários.

Nunca transforma eficiência em pressão.

Sua empresa cresce porque:

  • automatiza;

  • organiza;

  • ensina;

  • compartilha conhecimento.

É praticamente o oposto de muitas empresas reais.


Qualidade da Animação

A Maho Film manteve:

  • cores suaves;

  • iluminação aconchegante;

  • trilha sonora relaxante;

  • ritmo contemplativo.

A animação não impressiona pela quantidade de quadros, mas pela consistência.

Ela reforça a proposta de conforto da obra.


Impacto Cultural

A segunda temporada não alcançou a popularidade de fenômenos como Mushoku Tensei ou Re:Zero, mas consolidou Kami-tachi ni Hirowareta Otoko como uma referência entre os fãs de Slow Life Isekai e Iyashikei Fantasy. A série continua sendo frequentemente recomendada para quem busca histórias acolhedoras, focadas em crescimento pessoal, empreendedorismo e resolução de problemas cotidianos, em vez de grandes guerras ou conflitos épicos.


Houve Censura?

Não há registros relevantes de censura internacional ou cortes impostos por emissoras.

As diferenças percebidas pelos leitores da light novel decorrem principalmente da adaptação:

  • alguns acontecimentos foram condensados;

  • várias explicações técnicas sobre magia e ecologia dos slimes foram simplificadas;

  • certos conflitos foram suavizados para manter o tom leve e otimista.

Essas mudanças são consideradas decisões criativas de adaptação, e não censura.


Vale a Pena Assistir?

Sem dúvida, especialmente para quem apreciou a primeira temporada.

Se a primeira parte ensina como construir um sistema estável, a segunda mostra como fazê-lo crescer sem perder qualidade, simplicidade e humanidade.


☕ Conclusão Bellacosa Mainframe

Na maioria dos isekais, a evolução do protagonista é medida pelo nível, pelas habilidades ou pelo poder de combate.

Em Kami-tachi ni Hirowareta Otoko 2, ela é medida por algo muito mais difícil: a capacidade de criar processos sustentáveis, formar pessoas, documentar conhecimento e construir um ambiente onde todos prosperam.

Para um profissional de IBM Z, Ryoma lembra o arquiteto que implantou um sistema COBOL impecável e, anos depois, conseguiu expandi-lo para milhões de transações diárias sem perder estabilidade. Não há explosões, espadas lendárias ou batalhas contra reis demônios — apenas engenharia, disciplina, melhoria contínua e a convicção de que os melhores sistemas, assim como as melhores vidas, são aqueles que evoluem de forma consistente.

No fim, a maior magia da segunda temporada não está nos slimes. Está na demonstração de que automação, resiliência e liderança são as verdadeiras habilidades "lendárias" capazes de sustentar qualquer mundo — seja um reino medieval ou um datacenter IBM Z. ☕🟢


sexta-feira, 16 de junho de 2023

Os Assassinos Silenciosos do System Design

 

Bellacosa Mainframe e os assassinos sileciosos do system design

☕ Um Café no Bellacosa Mainframe

Os Assassinos Silenciosos do System Design

O guia do Programador COBOL Padawan para construir sistemas que não explodem quando chegam à produção

Existe um momento muito perigoso na vida de todo projeto de software.

Não é quando o programa apresenta erro de compilação.

Não é quando o JCL retorna JCL ERROR.

Não é quando o COBOL encerra com um S0C7, um S0C4 ou um S806.

O momento mais perigoso acontece muito antes disso.

Acontece naquela reunião aparentemente inocente em que alguém diz:

“É um sistema simples. Vamos começar a programar e depois ajustamos os detalhes.”

Nesse instante, caro Programador COBOL Padawan, uma perturbação surge na Força.

Ou, para os oficiais da Frota Estelar, os sensores da ponte detectam uma anomalia arquitetural se formando perto do núcleo de dobra.

Muitos sistemas não fracassam porque seus programadores desconhecem sintaxe. Eles fracassam porque começaram sem requisitos claros, cresceram sem planejamento, acumularam complexidade desnecessária, ignoraram segurança, não prepararam mecanismos de recuperação e foram colocados em produção sem monitoramento adequado.

No início, tudo parece funcionar.

O sistema cadastra clientes.

A API responde.

O batch termina.

A tela CICS abre.

O SELECT retorna dados.

Todos comemoram.

Entretanto, meses depois, a quantidade de usuários aumenta, o banco de dados cresce, as integrações se multiplicam e aquela pequena aplicação começa a mostrar rachaduras.

As respostas ficam lentas.

O banco atinge níveis perigosos de utilização.

Ninguém consegue localizar os erros.

A equipe tem medo de alterar o código.

Uma mudança de configuração exige nova compilação.

Um servidor cai e leva todo o sistema junto.

O que parecia ser um pequeno cargueiro espacial agora está tentando operar como a USS Enterprise, mas foi construído sem escudos, sem sensores e sem plano de evacuação.

Este artigo é uma viagem completa pelos principais erros de System Design, explicando como eles surgem, por que são perigosos e como evitá-los. A missão é traduzir os conceitos de arquitetura para quem está começando em COBOL, mainframe e sistemas corporativos.

Prepare seu café, ajuste o comunicador e assuma seu posto na ponte.

Temos uma arquitetura para salvar.


1. O que é System Design?

System Design, ou projeto de sistemas, é o processo de decidir como uma solução será estruturada para atender a determinados objetivos.

Não se resume a desenhar caixas e setas em um diagrama.

Também não significa apenas escolher:

  • linguagem de programação;

  • banco de dados;

  • framework;

  • servidor;

  • provedor de nuvem.

O projeto de sistemas procura responder perguntas muito mais profundas:

  • Quem utilizará o sistema?

  • Quantos usuários serão atendidos?

  • Qual volume de dados será processado?

  • O sistema precisa funcionar 24 horas por dia?

  • O que acontece quando um componente falha?

  • Como os dados serão protegidos?

  • Como o ambiente será monitorado?

  • Como a solução crescerá?

  • Como uma versão será implantada?

  • Como recuperar o sistema após um desastre?

  • Quanto custará manter tudo funcionando?

Em um ambiente mainframe, essas perguntas aparecem há décadas.

Um sistema COBOL corporativo normalmente não é apenas um programa. Ele pode envolver:

  • transações CICS;

  • programas batch;

  • JCL;

  • arquivos VSAM;

  • tabelas Db2;

  • filas IBM MQ;

  • segurança RACF;

  • logs SMF;

  • gerenciamento de carga pelo WLM;

  • rotinas de recuperação;

  • interfaces com sistemas externos.

Portanto, System Design é a arte de transformar requisitos de negócio em uma estrutura técnica capaz de funcionar com segurança, desempenho, disponibilidade e possibilidade de evolução.

Um bom projeto não tenta prever o futuro inteiro.

Ele cria uma base suficientemente sólida para que o sistema possa se adaptar sem precisar ser destruído e reconstruído a cada nova necessidade.


2. O primeiro assassino silencioso: começar sem requisitos claros

Um dos erros mais graves é iniciar a programação antes de compreender o problema.

A frase normalmente soa assim:

“Vamos codificar logo para ganhar tempo.”

Na prática, esse atalho costuma produzir o efeito contrário.

Quando os requisitos são vagos, cada pessoa imagina um sistema diferente.

O gestor imagina um portal.

O cliente imagina um aplicativo.

O desenvolvedor imagina uma API.

A infraestrutura imagina uma solução em nuvem.

O analista mainframe imagina uma integração com CICS e Db2.

Todos estão trabalhando, mas cada um está construindo uma nave diferente.

Um exemplo simples

O cliente solicita:

“Precisamos modernizar o sistema de pagamentos.”

A palavra “modernizar” pode significar muitas coisas:

  • substituir telas 3270 por uma interface web;

  • expor transações COBOL como APIs;

  • migrar programas para outra plataforma;

  • reorganizar o código;

  • melhorar desempenho;

  • automatizar implantação;

  • atualizar a segurança;

  • criar acesso por dispositivos móveis;

  • simplesmente documentar o legado.

Sem esclarecimento, a equipe pode passar meses resolvendo o problema errado.

Requisitos funcionais e não funcionais

Os requisitos funcionais descrevem o que o sistema deve fazer.

Exemplos:

  • cadastrar clientes;

  • consultar saldo;

  • emitir boleto;

  • processar pagamento;

  • gerar relatório;

  • cancelar uma transação.

Os requisitos não funcionais descrevem como o sistema deve se comportar.

Exemplos:

  • responder em menos de dois segundos;

  • atender dez mil usuários simultâneos;

  • manter disponibilidade de 99,99%;

  • criptografar dados sensíveis;

  • registrar todas as operações;

  • recuperar o serviço em até quinze minutos.

Muitos projetos documentam apenas as funcionalidades e ignoram os requisitos não funcionais.

Depois descobrem, tarde demais, que o sistema funciona — porém é lento, inseguro ou impossível de operar.

Passo a passo antes de programar

Antes de escrever o primeiro IDENTIFICATION DIVISION, procure responder:

  1. Qual problema de negócio será resolvido?

  2. Quem são os usuários?

  3. Qual volume inicial de dados?

  4. Qual crescimento esperado?

  5. Quais integrações existem?

  6. Qual horário de funcionamento?

  7. Qual nível de indisponibilidade é aceitável?

  8. Quais dados são sensíveis?

  9. Como os erros serão tratados?

  10. Quem dará suporte em produção?

Clareza no início não elimina mudanças.

Ela apenas impede que a equipe viaje em dobra máxima para o quadrante errado.


3. Ignorar escalabilidade desde cedo

Escalabilidade é a capacidade de um sistema continuar funcionando quando sua carga aumenta.

Um projeto pode começar com cem usuários e atingir cem mil.

Uma tabela pode começar com dez mil registros e chegar a bilhões.

Um processo batch que inicialmente trabalha com vinte arquivos pode, anos depois, receber milhares.

O erro está em pensar:

“Quando crescer, nós resolvemos.”

Às vezes isso é possível.

Em outras situações, a solução inicial cria limitações tão profundas que o crescimento exige uma reescrita completa.

Escala vertical e escala horizontal

Escala vertical significa tornar uma máquina mais poderosa:

  • mais CPU;

  • mais memória;

  • mais armazenamento;

  • processadores mais rápidos.

Escala horizontal significa adicionar mais máquinas ou instâncias para dividir o trabalho.

Em ambientes distribuídos, a escala horizontal é comum.

No mainframe, há décadas existem mecanismos sofisticados de expansão e gerenciamento de carga, como:

  • múltiplas LPARs;

  • Parallel Sysplex;

  • WLM;

  • compartilhamento de dados;

  • filas;

  • particionamento de workloads;

  • recursos especializados.

O importante não é defender uma única estratégia.

É reconhecer que o crescimento precisa ser considerado.

Exemplo de programa COBOL

Imagine um batch que processa um arquivo sequencial inteiro usando apenas uma etapa e um programa.

No começo:

  • 50 mil registros;

  • execução em três minutos.

Cinco anos depois:

  • 500 milhões de registros;

  • execução em nove horas;

  • janela batch insuficiente.

Talvez o projeto devesse ter considerado:

  • particionamento;

  • processamento paralelo;

  • checkpoints;

  • retomada após falha;

  • divisão por faixas;

  • utilização de banco com índices adequados;

  • filas de trabalho.

Escalabilidade não significa construir uma arquitetura gigante no primeiro dia.

Significa evitar escolhas que impossibilitem o crescimento.


4. Overengineering: quando a solução é maior que o problema

Overengineering acontece quando criamos uma solução excessivamente complexa para uma necessidade simples.

É o famoso caso de utilizar um torpedo de fótons para abrir uma lata de conservas.

Imagine uma aplicação interna usada por vinte pessoas.

A equipe decide criar:

  • quinze microsserviços;

  • três bancos de dados;

  • um cluster Kubernetes;

  • Kafka;

  • Redis;

  • Elasticsearch;

  • Service Mesh;

  • Event Sourcing;

  • CQRS;

  • múltiplos pipelines;

  • dezenas de dashboards.

Tudo isso para cadastrar fornecedores.

A arquitetura parece impressionante em uma apresentação.

Mas agora exige:

  • mais servidores;

  • mais especialistas;

  • mais monitoramento;

  • mais segurança;

  • mais custos;

  • mais pontos de falha.

Complexidade não é sinônimo de maturidade.

O princípio KISS

KISS significa:

Keep It Simple.

Ou, em português:

Mantenha a solução simples.

Uma solução simples tende a ser:

  • mais fácil de entender;

  • mais barata;

  • mais testável;

  • mais confiável;

  • mais rápida de corrigir.

Isso não significa escrever código descuidado.

Significa usar apenas a complexidade necessária.

Monólito não é palavrão

Muitas equipes tratam qualquer monólito como tecnologia ultrapassada.

Entretanto, um monólito modular pode ser excelente para diversos cenários.

O problema não é o monólito.

O problema é um monólito sem organização, com dependências caóticas e responsabilidades misturadas.

Da mesma forma, microsserviços não são automaticamente modernos.

Um ambiente de microsserviços mal projetado pode se tornar um monólito distribuído, mais difícil de depurar e mais caro de operar.

A melhor arquitetura não é a mais elegante no diagrama.

É a que atende aos requisitos com o menor nível razoável de complexidade.


5. Negligenciar tolerância a falhas

Todo componente falha.

Discos falham.

Redes falham.

Servidores param.

Programas recebem dados inválidos.

APIs externas ficam indisponíveis.

Filas enchem.

Bancos bloqueiam recursos.

Pessoas cometem erros.

O arquiteto maduro não pergunta:

“Será que vai falhar?”

Ele pergunta:

“Quando falhar, o que acontecerá?”

Falha não pode virar desastre

Uma falha local deveria permanecer local.

Se uma API de consulta de endereço estiver indisponível, isso não deveria necessariamente derrubar todo o sistema de cadastro.

Se um servidor parar, outra instância deveria assumir.

Se um programa batch interromper após processar 80% do arquivo, deveria ser possível retomar do ponto correto.

Padrões importantes

Timeout

Nenhuma chamada deveria esperar eternamente.

Um timeout define quanto tempo o sistema aguardará antes de considerar a operação malsucedida.

Retry

Algumas falhas são temporárias.

Uma nova tentativa pode resolver.

Entretanto, repetir sem controle é perigoso. Mil clientes realizando cinco tentativas podem transformar uma pequena lentidão em colapso completo.

Circuit Breaker

Funciona como um disjuntor.

Quando um serviço começa a falhar repetidamente, o sistema interrompe temporariamente as chamadas para evitar sobrecarga.

Failover

Quando um componente principal falha, outro assume.

Checkpoint

Um processo longo salva pontos de progresso para poder continuar após interrupção.

Dead Letter Queue

Mensagens que não podem ser processadas são desviadas para uma fila de análise, evitando que bloqueiem todo o fluxo.

A tradição do mainframe

A tolerância a falhas está no coração dos ambientes IBM Z.

Conceitos como:

  • Parallel Sysplex;

  • Coupling Facility;

  • GDPS;

  • replicação;

  • recuperação de logs;

  • commit e rollback;

  • reinício de jobs;

  • journaling;

  • gerenciamento de workload;

existem porque sistemas bancários, governamentais e de companhias aéreas não podem simplesmente parar e aguardar alguém reiniciar o computador.

A lição é simples:

Falhar é inevitável. Falhar sem plano é opcional.


6. Ignorar estratégias de cache

Cache é uma camada de armazenamento rápido utilizada para evitar processamento ou acesso repetitivo a fontes mais lentas.

Imagine que dez mil usuários consultem a mesma tabela de códigos de países.

Sem cache, cada requisição pode acessar o banco.

Com cache, a informação pode ser lida uma vez e reutilizada.

Isso reduz:

  • latência;

  • carga no banco;

  • consumo de CPU;

  • tráfego de rede;

  • custos.

Tipos de cache

O cache pode existir:

  • no navegador;

  • na aplicação;

  • em memória;

  • em servidores como Redis;

  • em proxies;

  • em CDNs;

  • em estruturas internas do banco;

  • em subsistemas mainframe.

O lado difícil

Cache traz um problema delicado:

Como garantir que os dados não fiquem desatualizados?

Se o preço de um produto mudar no banco, quando o cache será atualizado?

Estratégias comuns incluem:

  • tempo de expiração;

  • invalidação explícita;

  • atualização após gravação;

  • leitura através do cache;

  • atualização antecipada.

Existe uma velha piada entre programadores:

Há duas coisas difíceis em computação: invalidar cache, nomear coisas e erros de contagem.

Sim, a frase diz duas coisas e lista três.

Esse é o easter egg clássico.

Cache não conserta consulta ruim

Adicionar cache sobre uma arquitetura defeituosa pode apenas esconder o problema.

Primeiro, ajuste:

  • índices;

  • consultas;

  • modelo de dados;

  • volume retornado.

Depois, utilize cache onde houver benefício real.


7. Projeto ruim de banco de dados

O banco de dados frequentemente se torna o coração e o gargalo do sistema.

Um modelo mal projetado pode causar:

  • consultas lentas;

  • duplicidade;

  • inconsistência;

  • bloqueios;

  • dificuldade de manutenção;

  • crescimento descontrolado.

Erros comuns

Falta de índices

Uma consulta por CPF em uma tabela com milhões de registros pode exigir varredura completa se não houver índice adequado.

Índices demais

Índices aceleram leitura, mas também ocupam espaço e aumentam o custo de inserções, atualizações e exclusões.

Uso indiscriminado de SELECT *

Buscar todas as colunas desperdiça:

  • I/O;

  • memória;

  • rede;

  • CPU.

Solicite apenas os dados necessários.

Tipos inadequados

Armazenar datas como texto ou valores numéricos como caracteres cria problemas de validação, ordenação e desempenho.

Ausência de integridade

Chaves primárias, estrangeiras, restrições e validações ajudam a impedir dados inválidos.

Transações longas

Uma transação aberta por muito tempo pode manter locks e afetar outros usuários.

No Db2

O programador COBOL precisa conhecer a importância de:

  • índices;

  • EXPLAIN;

  • RUNSTATS;

  • REORG;

  • planos de acesso;

  • cardinalidade;

  • commits;

  • níveis de isolamento;

  • cursores;

  • tabelas particionadas.

Um SQL correto do ponto de vista sintático pode ser desastroso do ponto de vista operacional.

A consulta retorna o resultado.

Mas talvez consuma milhões de leituras para localizar vinte linhas.

O banco não deve ser tratado como um depósito onde jogamos dados.

Ele é um motor que precisa ser modelado, observado e ajustado.


8. Ignorar segurança

Segurança não deve ser adicionada no final do projeto como um acessório.

Ela precisa acompanhar todo o ciclo de vida.

Cada atalho pode criar uma superfície de ataque.

Autenticação e autorização

Autenticação responde:

Quem é você?

Autorização responde:

O que você pode fazer?

Uma pessoa pode estar corretamente autenticada e ainda assim não possuir permissão para consultar salários, alterar limites ou excluir registros.

Princípio do menor privilégio

Cada usuário, programa ou serviço deve receber apenas as permissões necessárias.

Nada além disso.

Uma aplicação que precisa apenas consultar uma tabela não deveria ter permissão para apagá-la.

Criptografia

Dados precisam ser protegidos:

  • em trânsito;

  • em repouso;

  • durante backups;

  • em arquivos temporários;

  • em logs.

Segredos não pertencem ao código

Senhas, tokens e chaves não devem aparecer em programas ou repositórios.

Nada de:

01 WS-PASSWORD PIC X(20) VALUE 'ADMIN123'.

Além de inseguro, isso transforma qualquer troca de senha em alteração de código.

Mainframe e segurança

No IBM Z, a proteção pode envolver:

  • RACF;

  • SAF;

  • perfis de recursos;

  • MFA;

  • TLS;

  • ICSF;

  • Crypto Express;

  • auditoria SMF;

  • separação de funções.

Entretanto, possuir ferramentas poderosas não garante segurança.

Configuração incorreta, privilégios excessivos e ausência de revisão continuam sendo riscos.

Segurança é tecnologia, processo e disciplina.


9. Não ter monitoramento, logs e observabilidade

Um sistema sem monitoramento é como a Enterprise atravessando uma nebulosa com os sensores desligados.

Talvez a nave esteja bem.

Talvez esteja a segundos de uma colisão.

Sem telemetria, ninguém sabe.

Logs

Logs registram eventos importantes:

  • início e fim de processamento;

  • erros;

  • decisões;

  • identificadores;

  • mensagens recebidas;

  • duração de operações.

Um bom log precisa ser útil.

Mensagens como:

“Erro inesperado.”

ajudam muito pouco.

Melhor seria registrar:

  • operação;

  • horário;

  • módulo;

  • código do erro;

  • contexto;

  • identificador da transação.

Naturalmente, sem expor senhas ou dados sensíveis.

Métricas

Métricas mostram valores ao longo do tempo:

  • CPU;

  • memória;

  • transações por segundo;

  • tempo médio de resposta;

  • quantidade de erros;

  • tamanho de fila;

  • uso de conexões;

  • duração do batch.

Tracing

Em sistemas distribuídos, uma única operação pode atravessar diversos serviços.

Tracing permite acompanhar a jornada da requisição.

Observabilidade no mainframe

Podemos relacionar esse universo a:

  • SMF;

  • RMF;

  • OMEGAMON;

  • SDSF;

  • logs do CICS;

  • estatísticas do Db2;

  • mensagens JES;

  • registros de MQ;

  • relatórios de WLM.

O objetivo é responder:

  • O que aconteceu?

  • Quando aconteceu?

  • Onde aconteceu?

  • Qual componente foi afetado?

  • Quantos usuários sofreram impacto?

  • Qual foi a causa?

  • O problema está piorando?

Se a equipe só descobre uma falha quando o cliente telefona, o sistema não está verdadeiramente monitorado.


10. Configurações hardcoded

Hardcoding ocorre quando valores específicos de ambiente são gravados diretamente no código.

Exemplos:

  • endereço de servidor;

  • senha;

  • diretório;

  • fila;

  • porta;

  • nome de banco;

  • limite operacional;

  • e-mail;

  • URL.

Por que isso é ruim?

Porque o código fica preso ao ambiente.

Para mover de desenvolvimento para teste, talvez seja necessário alterar e recompilar.

Para trocar um servidor, nova mudança.

Para ajustar timeout, novo deploy.

Isso aumenta riscos e reduz flexibilidade.

Estratégia correta

Separar:

  • código;

  • configuração;

  • segredo.

Configurações podem ficar em:

  • arquivos externos;

  • variáveis de ambiente;

  • tabelas de parâmetros;

  • sistemas de gestão de configuração;

  • cofres de segredos;

  • propriedades de runtime.

No mundo COBOL e mainframe, essa separação também pode envolver:

  • PARM de JCL;

  • SYSIN;

  • DDs;

  • arquivos de controle;

  • tabelas Db2;

  • variáveis simbólicas;

  • parâmetros de transação.

O mesmo programa pode operar em vários ambientes sem alteração do fonte.

Essa é uma característica valiosa de sistemas bem projetados.


11. Não testar em escala realista

O notebook do desenvolvedor não é a produção.

No ambiente local:

  • há poucos dados;

  • apenas um usuário;

  • quase nenhuma concorrência;

  • rede rápida;

  • banco vazio;

  • recursos disponíveis.

Em produção:

  • milhares de usuários;

  • milhões de registros;

  • chamadas simultâneas;

  • períodos de pico;

  • integrações lentas;

  • falhas intermitentes.

Um sistema pode funcionar perfeitamente no teste funcional e colapsar sob carga.

Tipos de teste

Teste de carga

Verifica o comportamento sob volume esperado.

Teste de estresse

Aumenta a carga até localizar o limite.

Teste de pico

Simula aumento repentino de uso.

Teste de longa duração

Avalia vazamentos de memória, degradação e acúmulo de recursos.

Teste de concorrência

Identifica condições de corrida, locks e conflitos.

Teste de recuperação

Confirma se o sistema volta corretamente após falha.

Chaos Engineering

Introduz falhas controladas para verificar a resiliência.

Por exemplo:

  • derrubar uma instância;

  • atrasar uma chamada;

  • bloquear uma dependência;

  • simular perda de rede;

  • encher uma fila.

No mainframe, também é essencial testar:

  • grandes massas;

  • duração da janela batch;

  • contenção Db2;

  • transações CICS;

  • reinício de jobs;

  • checkpoints;

  • indisponibilidade de datasets;

  • falha de comunicação MQ.

Produção não deveria ser o primeiro teste de escala.

Quando isso acontece, o cliente se torna parte involuntária da equipe de QA.


12. O erro invisível: monitorar tecnologia, mas ignorar o negócio

Muitas equipes monitoram CPU, memória e disco.

Mas não sabem responder:

  • Quantos pagamentos foram processados?

  • Quantas vendas foram perdidas?

  • Quantos clientes abandonaram a operação?

  • Quantas transações falharam por regra de negócio?

  • Qual valor financeiro ficou represado?

O sistema pode estar tecnicamente saudável e ainda assim falhar na missão.

Imagine que todos os servidores estejam verdes no painel, mas uma regra errada esteja rejeitando metade dos pedidos.

A infraestrutura diz:

“Tudo normal.”

O negócio diz:

“Estamos perdendo dinheiro.”

Por isso, métricas técnicas e de negócio precisam caminhar juntas.

A ponte da Enterprise não monitora apenas o motor de dobra.

Ela também monitora destino, tripulação, missão e ameaças.


13. O custo também faz parte da arquitetura

Uma arquitetura pode funcionar e ainda assim ser inviável financeiramente.

Recursos ociosos, bancos superdimensionados, tráfego excessivo, logs sem retenção controlada e componentes desnecessários aumentam despesas.

Na nuvem, cada decisão pode gerar custo recorrente:

  • processamento;

  • armazenamento;

  • transferência;

  • chamadas;

  • serviços gerenciados;

  • licenciamento.

No mainframe, também existem questões de:

  • consumo de CPU;

  • MSU;

  • janelas;

  • classes de serviço;

  • licenças;

  • capacidade;

  • uso de processadores especializados.

Um bom arquiteto não pensa apenas:

“Funciona?”

Ele também pergunta:

“É sustentável?”

A melhor solução equilibra:

  • desempenho;

  • confiabilidade;

  • segurança;

  • simplicidade;

  • custo.


14. Um roteiro prático para projetar melhor

Aqui está um pequeno plano de missão para o Programador COBOL Padawan.

Etapa 1 — Compreenda o problema

Converse com usuários e responsáveis pelo negócio.

Evite começar pela tecnologia.

Etapa 2 — Levante requisitos funcionais

Liste as operações que o sistema deverá executar.

Etapa 3 — Levante requisitos não funcionais

Defina:

  • desempenho;

  • volume;

  • disponibilidade;

  • segurança;

  • recuperação;

  • auditoria.

Etapa 4 — Identifique dados e integrações

Pergunte:

  • De onde os dados vêm?

  • Onde serão armazenados?

  • Quem poderá acessá-los?

  • Quais sistemas dependem deles?

Etapa 5 — Desenhe uma solução simples

Comece com a menor arquitetura capaz de atender aos requisitos.

Etapa 6 — Mapeie pontos de falha

Para cada componente, pergunte:

“O que acontece se ele parar?”

Etapa 7 — Planeje observabilidade

Defina logs, métricas, alertas e painéis antes da produção.

Etapa 8 — Separe configuração do código

Prepare a solução para múltiplos ambientes.

Etapa 9 — Teste com volume realista

Não teste apenas o caminho feliz.

Etapa 10 — Revise segurança

Aplique menor privilégio, criptografia e auditoria.

Etapa 11 — Documente decisões

Registre por que determinada alternativa foi escolhida.

Isso evita que, anos depois, alguém veja uma solução estranha e a substitua sem compreender o contexto.

Etapa 12 — Evolua gradualmente

Arquitetura não é um monumento congelado.

Ela deve ser revisada conforme o negócio e a tecnologia evoluem.


15. Curiosidades da sala de máquinas

Curiosidade 1 — Mainframes já faziam “cloud” antes do nome existir

Compartilhamento de recursos, virtualização, isolamento e gerenciamento centralizado são práticas antigas no mainframe.

O termo mudou.

Muitos princípios permaneceram.

Curiosidade 2 — Filas não são novidade

Mensageria assíncrona parece moderna, mas sistemas corporativos utilizam filas e processamento desacoplado há décadas.

IBM MQ é um exemplo clássico dessa filosofia.

Curiosidade 3 — O batch continua vivo

Mesmo com APIs e eventos, processamento batch continua essencial para:

  • fechamento financeiro;

  • faturamento;

  • conciliação;

  • geração de relatórios;

  • tratamento de grandes volumes.

A diferença é que batch moderno pode ser integrado a pipelines, APIs e eventos.

Curiosidade 4 — Simplicidade exige experiência

Criar algo complicado é relativamente fácil.

Criar uma solução simples que atenda aos requisitos exige entendimento profundo.

É como a ponte da Enterprise: o painel parece organizado porque uma enorme complexidade foi cuidadosamente controlada abaixo do convés.


16. Easter egg da Frota Estelar

Em muitos episódios de Star Trek, a Enterprise encontra tecnologias extremamente poderosas construídas por civilizações avançadas.

Entretanto, o perigo raramente está apenas na tecnologia.

O problema aparece quando:

  • ninguém compreende os limites;

  • não existem controles;

  • a tripulação ignora sinais;

  • alguém tenta obter poder rapidamente;

  • uma falha pequena se propaga.

Isso é System Design.

Uma arquitetura sofisticada sem compreensão pode ser mais perigosa que uma solução simples.

O melhor oficial de engenharia não é aquele que instala mais componentes.

É aquele que mantém a nave funcionando, conhece seus limites e sabe exatamente o que fazer quando uma luz vermelha aparece no painel.

Como diria Montgomery Scott em espírito:

Você não pode mudar as leis da física, capitão.

Na engenharia de software, também não podemos ignorar:

  • latência;

  • concorrência;

  • falhas;

  • volume;

  • capacidade;

  • custo.

Podemos administrá-los.

Nunca eliminá-los por decreto.


Conclusão — O sistema não quebra de repente

Os grandes problemas arquiteturais raramente chegam anunciados.

Eles crescem silenciosamente.

Uma consulta sem índice parece inofensiva enquanto a tabela é pequena.

Uma configuração hardcoded parece conveniente enquanto existe apenas um ambiente.

A ausência de cache não incomoda enquanto há poucos usuários.

A falta de logs passa despercebida enquanto nada falha.

A inexistência de failover parece aceitável enquanto o servidor está funcionando.

Depois, um dia, tudo converge.

O tráfego aumenta.

O banco fica lento.

A aplicação gera timeout.

Os retries sobrecarregam ainda mais o sistema.

A fila cresce.

Os logs são insuficientes.

A equipe não consegue identificar a causa.

A direção pede uma previsão.

O cliente reclama.

E alguém diz:

“Precisamos reescrever tudo.”

Na realidade, o desastre começou meses ou anos antes, em pequenas decisões que pareciam não ter importância.

O verdadeiro objetivo de System Design não é criar diagramas bonitos nem utilizar todas as tecnologias da moda.

É construir sistemas capazes de:

  • cumprir sua missão;

  • resistir a falhas;

  • crescer com controle;

  • proteger dados;

  • ser observados;

  • ser mantidos;

  • evoluir sem caos.

Para o Programador COBOL Padawan, compreender arquitetura é o passo que transforma alguém que apenas escreve programas em um profissional que entende sistemas.

O COBOL pode processar a regra.

O JCL pode executar o job.

O Db2 pode armazenar os dados.

O CICS pode receber a transação.

O MQ pode transportar a mensagem.

Mas é o projeto de sistemas que faz todas essas partes trabalharem juntas.

Na Frota Estelar, uma nave não é apenas o motor de dobra.

É a combinação de propulsão, sensores, escudos, comunicação, suporte à vida, segurança, comando e uma tripulação treinada.

No mundo corporativo, a arquitetura também depende de integração, observabilidade, resiliência, dados, processos e pessoas.

Antes de liberar a próxima versão, pare diante do painel e faça a pergunta mais importante:

“Estamos construindo apenas algo que funciona hoje, ou um sistema capaz de sobreviver à missão de amanhã?”

Porque o melhor sistema não é aquele que nunca falha.

É aquele que foi projetado para continuar sua jornada quando o inesperado inevitavelmente aparecer no horizonte.

Vida longa e próspera aos seus programas, aos seus jobs e às suas arquiteturas.

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