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


terça-feira, 14 de outubro de 2014

💣🔥 SYSTEM DESIGN — O DIA EM QUE O COBOL DEIXA DE SER PROGRAMA… E VIRA ARQUITETURA DE PODER 🔥💣

 

Bellacosa Mainframe introduz o System Design

💣🔥 SYSTEM DESIGN — O DIA EM QUE O COBOL DEIXA DE SER PROGRAMA… E VIRA ARQUITETURA DE PODER 🔥💣

Se você programa em COBOL e acha que “system design” é coisa de arquiteto engravatado fazendo diagrama bonito… cuidado.

Você pode estar executando jobs perfeitos… dentro de um sistema mal projetado.

E aí não tem abend que denuncie o problema.


🧠 O QUE É SYSTEM DESIGN (TRADUZINDO PARA COBOL MENTAL)

System Design não é código.

É decidir antes do código existir:

  • Onde o dado nasce
  • Como ele trafega
  • Quem processa
  • Quem valida
  • Quem garante consistência
  • E quem aguenta o tranco quando tudo dá errado

👉 Em linguagem de mainframe:

System Design é o JCL invisível da arquitetura inteira


🏛️ ORIGEM — ANTES DO COBOL, ANTES DO SEU JOB

System Design nasce junto com a computação moderna.

  • Anos 60–70: Mainframes da IBM dominam o mundo corporativo
  • Surge o conceito de processamento batch vs online
  • Sistemas passam a lidar com:
    • milhões de registros
    • concorrência
    • consistência de dados

É aqui que entra o design.

Porque sem design…

👉 o sistema vira um monte de programas que “funcionam”… mas não escalam.


⚙️ A ERA DE OURO DO DESIGN: CICS, DB2 E O NASCIMENTO DA ARQUITETURA

Quando surgem tecnologias como:

  • CICS
  • DB2

o problema muda:

Antes:

Rodar programa

Depois:

Orquestrar milhares de transações simultâneas

E aí nasce o System Design moderno:

  • controle transacional
  • isolamento de dados
  • rollback
  • filas
  • throughput

👉 Isso não é mais programação.
👉 Isso é engenharia de sistema.


🔥 ANALOGIA BELLACOSA

Você, programador COBOL:

  • escreve o programa = módulo
  • escreve JCL = execução
  • usa VSAM/DB2 = armazenamento

Mas o System Design pergunta:

“E quando 10 milhões de clientes acessarem ao mesmo tempo… o que acontece?”


🧩 COMPONENTES DE UM SYSTEM DESIGN (TRADUZIDO PARA MAINFRAME)

1. Entrada de dados

  • Arquivo VSAM?
  • MQ?
  • API REST via z/OS Connect?

2. Processamento

  • Batch (JCL)
  • Online (CICS)
  • Híbrido

3. Persistência

  • DB2
  • VSAM
  • GDG

4. Consistência

  • Commit / Rollback
  • Controle de concorrência

5. Escalabilidade

  • Paralelismo de jobs
  • Balanceamento de carga

6. Resiliência

  • Restart automático
  • Checkpoints
  • Logs (SMF, JES)

🧪 EXEMPLO PRÁTICO — SISTEMA BANCÁRIO

Imagine:

👉 Transferência entre contas

Sem design:

  • Um programa COBOL atualiza conta A
  • Outro atualiza conta B

💣 Problema:
Se cair no meio → dinheiro some


Com System Design:

  • Transação controlada no CICS
  • Commit só ocorre quando tudo está consistente
  • Rollback garante integridade

👉 Isso é design salvando o sistema.


🧬 PASSO A PASSO — COMO PENSAR COMO UM ARQUITETO (MESMO SENDO COBOL)

🔹 1. Entenda o fluxo

Antes de codar:

  • de onde vem o dado?
  • para onde vai?
  • quem usa?

🔹 2. Modele falhas

Pergunte:

  • e se cair?
  • e se duplicar?
  • e se atrasar?

🔹 3. Separe responsabilidades

  • programa A = valida
  • programa B = processa
  • programa C = grava

👉 Não misture tudo (anti-pattern clássico COBOL 😄)


🔹 4. Pense em volume

  • 100 registros ≠ 100 milhões

🔹 5. Pense em concorrência

  • 1 usuário ≠ 10.000 simultâneos

🚀 COMO COMEÇAR (CAMINHO REALISTA)

Se você é COBOL:

Aprenda:

  • Conceitos de arquitetura distribuída
  • Filas (MQ)
  • APIs
  • Transações
  • Design patterns

Pratique:

  • Simule um sistema de pagamentos
  • Modele falhas
  • Crie fluxo batch + online

Evolua:

  • Integração com APIs modernas
  • Event-driven architecture
  • Observabilidade

🧠 O QUE VOCÊ PRECISA ENTENDER (DE VERDADE)

System Design não é ferramenta.

É mentalidade.

Você precisa dominar:

  • consistência vs performance
  • acoplamento vs flexibilidade
  • disponibilidade vs integridade

👉 Isso é trade-off.
👉 Isso é engenharia.


🕵️ CURIOSIDADES (QUE POUCOS CONTAM)

  • Muitos sistemas bancários de hoje ainda rodam design criado nos anos 80
  • O que mudou foi a interface, não o core
  • Mainframe já fazia “alta escala” antes da nuvem existir

🥚 EASTER EGG (NÍVEL MAINFRAME ROOT)

O conceito moderno de:

  • microserviços
  • filas
  • event-driven

👉 já existia, de forma conceitual, dentro do mainframe

Só com nomes diferentes:

  • programa = serviço
  • fila = dataset / MQ
  • evento = transação CICS

⚠️ ERRO CLÁSSICO DE PROGRAMADOR COBOL

Achar que:

“Se o programa funciona… o sistema está certo”

Errado.

👉 Um sistema pode estar funcionando perfeitamente… e ainda assim estar errado em design


💣 FRASE FINAL (ESTILO PRODUÇÃO CRÍTICA)

“Código resolve problema local.
Design decide se o sistema sobrevive.”

 

terça-feira, 2 de setembro de 2014

💣🔥 MONOPLEX vs SYSPLEX — QUANDO O SISTEMA PARA DE SER UMA MÁQUINA E VIRA UM ORGANISMO 🔥💣

 

Bellacosa Mainframe monoplex e sysplex o poder do hardware

💣🔥 MONOPLEX vs SYSPLEX — QUANDO O SISTEMA PARA DE SER UMA MÁQUINA E VIRA UM ORGANISMO 🔥💣


🧾 Expansão Comentada

Se você já trabalhou com mainframe, provavelmente já ouviu os termos monoplex e sysplex.
Mas a diferença entre eles vai muito além de arquitetura.

👉 Não é tecnologia. É mentalidade operacional.


🧠 MONOPLEX — O REINO DO “UMA MÁQUINA SÓ”

✔ Tradução direta:

Um monoplex é um único sistema mainframe rodando de forma independente.

💡 Expansão Bellacosa:

Você tem:

  • Um único z/OS ativo
  • Recursos locais
  • Controle centralizado
  • Tudo dependendo de UMA instância

👉 É como um JOB crítico rodando sem checkpoint:

  • Se falhar… volta do zero
  • Se parar… para tudo

⚠️ Limitações reais (que pouca gente fala):

  • Janela de manutenção obrigatória
  • Escala vertical cara (mais CPU, mais memória, mais $$$)
  • Ponto único de falha lógica
  • Isolamento entre workloads

💣 Analogia mainframe raiz:

Monoplex é um batch gigante rodando sozinho na fila JES2.
Se ele ABENDA… não tem fallback.


⚙️ SYSPLEX — QUANDO O MAINFRAME APRENDE A TRABALHAR EM EQUIPE

✔ Tradução direta:

Um sysplex conecta múltiplos mainframes em um ambiente cooperativo unificado.

💡 Expansão Bellacosa:

Aqui o jogo muda completamente:

  • Vários sistemas z/OS trabalhando juntos
  • Workload distribuído dinamicamente
  • Recursos compartilhados em tempo real
  • Sistema se comporta como UMA entidade lógica

🧩 Componentes que fazem a mágica acontecer:

  • Workload Manager (WLM) → decide quem executa o quê
  • Coupling Facility → cérebro compartilhado
  • XCF → comunicação entre sistemas

💣 Analogia Bellacosa:

Sysplex é um cluster de jobs cooperando via checkpoint compartilhado em memória.
Um falha… outro continua de onde parou.


🔥 O PONTO MAIS IMPORTANTE (E MAIS IGNORADO)

Você disse:

“No monoplex, disponibilidade é uptime de uma máquina
No sysplex, disponibilidade é projetada no sistema”

💥 Isso aqui é ouro.

Mas vamos aprofundar:

🧠 Monoplex:

  • Alta disponibilidade = evitar falhar

⚙️ Sysplex:

  • Alta disponibilidade = falhar sem impacto

👉 Isso muda tudo.


⚡ ESCALABILIDADE — O PULO DE MATURIDADE

Monoplex:

  • Scale-up (vertical)
  • Limite físico inevitável

Sysplex:

  • Scale-out (horizontal)
  • Adição de nós sem parada

💣 Analogia moderna:

  • Monoplex = subir a máquina no cloud (vertical scaling)
  • Sysplex = cluster Kubernetes antes do Kubernetes existir

💥 FALHA: O TESTE FINAL DE ARQUITETURA

Monoplex:

  • Falha = incidente
  • Recovery = reativo

Sysplex:

  • Falha = evento esperado
  • Recovery = automático

🧨 Exemplo real (nível produção):

Imagine:

  • Banco rodando CICS + DB2
  • Milhares de transações por segundo

👉 Em monoplex:

  • IPL → sistema indisponível

👉 Em sysplex:

  • Uma LPAR cai
  • WLM redistribui carga
  • Usuário nem percebe

🧬 O SEGREDO DO SYSPLEX (QUE O CLOUD AINDA PERSEGUE)

O sysplex resolve um problema que até hoje dá dor de cabeça em arquitetura distribuída:

👉 Consistência + disponibilidade + performance

Com ajuda do:

  • Coupling Facility (lock, cache, list structures)

💣 Traduzindo brutalmente:

Enquanto sistemas modernos brigam com:

  • cache inconsistente
  • race condition
  • eventual consistency

👉 O sysplex já fazia:

  • lock global
  • cache coerente
  • sincronização em hardware

⚠️ VERDADE QUE NINGUÉM TE CONTA

Sysplex NÃO é mágico.

Se mal projetado:

  • CF vira gargalo
  • WLM mal configurado gera desequilíbrio
  • Links saturam

👉 Ou seja:

Sysplex ruim é pior que monoplex bem feito.


🌍 O INSIGHT FINAL (O MAIS IMPORTANTE DE TODOS)

Você falou:

“o futuro já estava aqui”

💥 Vamos elevar isso:

O mainframe não ficou ultrapassado.
Ele resolveu cedo demais problemas que o resto da indústria só entendeu depois.


🚀 FRASE PRA CRAVAR

Monoplex é força.
Sysplex é estratégia.