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

sexta-feira, 28 de fevereiro de 2025

O Guia do Programador COBOL Padawan para Entender por que Inteligência Artificial em Produção é uma Frota Inteira — e não Apenas uma Nave

 

Bellacosa Mainframe e plataformas de ia escalaveis sem misterios

☕ Um Café no Bellacosa Mainframe

Plataformas de IA Escaláveis sem Mistérios

O Guia do Programador COBOL Padawan para Entender por que Inteligência Artificial em Produção é uma Frota Inteira — e não Apenas uma Nave

Imagine a seguinte cena.

Você está sentado diante de um terminal 3270, com uma caneca de café ao lado do teclado, observando um programa COBOL que processa milhões de registros todas as noites. De repente, um jovem programador chega correndo pela sala e anuncia:

— Bellacosa, encontrei o melhor modelo de inteligência artificial do mercado! Agora nossa plataforma está pronta!

Você olha calmamente para o monitor, toma mais um gole de café e responde:

— Padawan, encontrar um bom modelo de IA é como encontrar um excelente motor de dobra. Isso não significa que você já construiu a USS Enterprise.

O motor de dobra pode ser impressionante. Pode gerar textos, resumir documentos, escrever código, responder perguntas e analisar informações. Contudo, para atravessar a galáxia em segurança, uma nave precisa de muito mais:

  • computadores de bordo;

  • sensores;

  • escudos;

  • sistemas de comunicação;

  • controle de energia;

  • navegação;

  • diagnóstico;

  • redundância;

  • manutenção;

  • oficiais preparados;

  • protocolos de emergência.

Uma plataforma de inteligência artificial funciona exatamente assim.

O modelo é importante, mas ele representa apenas uma parte do sistema.

Em uma demonstração de laboratório, talvez seja suficiente enviar uma pergunta diretamente para um modelo e exibir a resposta. Em produção, entretanto, surgem usuários simultâneos, documentos internos, custos, privacidade, auditoria, segurança, latência, picos de utilização, falhas, limites de contexto, respostas incorretas e necessidade de monitoramento.

É nesse momento que muitos projetos descobrem uma verdade pouco glamorosa:

Uma aplicação de IA pode funcionar perfeitamente durante uma apresentação e desmoronar completamente quando encontra o primeiro dia real de produção.

Neste café, vamos explorar os principais componentes que transformam um modelo isolado em uma verdadeira plataforma de IA escalável. E, como toda boa missão da Frota Estelar, vamos fazer isso com mapas, analogias, exemplos, alertas, curiosidades e alguns easter eggs escondidos pelo caminho.

Prepare seu café, ajuste o comunicador e confirme se os escudos estão operacionais.

A missão começou.


1. O grande engano: acreditar que o modelo é o sistema

Nos primeiros contatos com inteligência artificial generativa, é comum imaginar uma arquitetura muito simples:

USUÁRIO
   |
   v
MODELO DE IA
   |
   v
RESPOSTA

Esse desenho funciona em testes pequenos.

Um usuário faz uma pergunta, o modelo responde e todos ficam impressionados.

Porém, uma plataforma corporativa de verdade precisa responder perguntas muito mais difíceis:

  • Quem é o usuário?

  • Ele possui autorização para acessar determinado documento?

  • Qual modelo deve atender essa solicitação?

  • O contexto enviado é realmente relevante?

  • A resposta deve ser armazenada em cache?

  • O conteúdo precisa ser filtrado?

  • Quanto custou a interação?

  • A informação utilizada estava atualizada?

  • O sistema consegue explicar de onde veio a resposta?

  • O que acontece quando chegam dez mil requisições ao mesmo tempo?

  • Como detectar uma regressão depois da troca de modelo?

  • Como impedir vazamento de dados confidenciais?

  • Como observar uma falha que acontece apenas em um caso entre cem mil?

O modelo não resolve sozinho nenhuma dessas questões.

Ele se parece mais com um programa COBOL dentro de uma arquitetura empresarial. O programa pode conter a lógica principal, mas depende de JCL, datasets, Db2, CICS, IMS, RACF, JES2, WLM, bibliotecas, logs, monitoramento e processos operacionais.

Nenhum profissional experiente de mainframe diria:

“O sistema bancário é apenas aquele módulo COBOL.”

Da mesma maneira, ninguém deveria dizer:

“Nossa plataforma de IA é apenas aquele LLM.”

Uma plataforma escalável é um conjunto coordenado de camadas.


2. Model Inference: quando o motor realmente entra em funcionamento

A inferência é o momento em que o modelo recebe uma entrada e produz uma saída.

Em termos simples:

PROMPT + CONTEXTO
        |
        v
      MODELO
        |
        v
     RESPOSTA

Essa é a camada de execução.

Para um programador COBOL, podemos comparar a inferência à execução de um programa depois da compilação e da linkedição. O load module está pronto, os parâmetros foram fornecidos e agora a lógica será processada.

Entretanto, a inferência possui um grande desafio: equilibrar latência, vazão e custo.

Latência

Latência é o tempo necessário para começar ou concluir uma resposta.

Em um chatbot, o usuário espera uma reação quase imediata.

Em uma rotina batch que analisa dois milhões de contratos durante a madrugada, alguns minutos extras podem ser aceitáveis.

Throughput

Throughput, ou vazão, representa quantas requisições o sistema consegue processar em determinado período.

Um modelo pode responder muito rápido para um único usuário e ainda assim apresentar péssimo desempenho quando recebe milhares de chamadas simultâneas.

É como um programa COBOL que executa bem com cem registros, mas enfrenta gargalos quando recebe um arquivo com quinhentos milhões.

O triângulo da engenharia de IA

Quase toda decisão de inferência envolve três fatores:

QUALIDADE
   /\
  /  \
 /    \
CUSTO----VELOCIDADE

Um modelo maior pode produzir respostas melhores, porém costuma exigir mais recursos.

Um modelo menor pode ser rápido e econômico, mas talvez não resolva tarefas complexas.

A missão da arquitetura não é escolher o “melhor modelo do mundo”. É escolher o modelo adequado para cada tipo de operação.

O Sr. Spock provavelmente diria:

“Utilizar um modelo gigantesco para responder perguntas triviais seria ilógico.”

E ele estaria absolutamente correto.


3. Tokenização: a linguagem secreta dos modelos

Um modelo de linguagem não lê exatamente palavras da mesma maneira que um ser humano.

Antes de processar o texto, ele o divide em unidades chamadas tokens.

Uma palavra pode corresponder a:

  • um token;

  • vários tokens;

  • parte de um token;

  • uma combinação diferente conforme o idioma e o modelo.

Por exemplo, a expressão:

MAINFRAME

pode ser interpretada como uma unidade ou dividida em partes semelhantes a:

MAIN
FRAME

Já termos muito específicos, nomes técnicos, códigos COBOL, caracteres especiais e palavras em português podem consumir uma quantidade maior de tokens.

Por que o programador precisa se importar?

Porque tokens influenciam diretamente:

  • custo;

  • limite de entrada;

  • tamanho da resposta;

  • desempenho;

  • capacidade de contexto;

  • quantidade de documentos processados.

Considere este prompt:

Explique COBOL.

Ele é pequeno.

Agora considere:

Leia estes 800 manuais, compare todas as versões do compilador,
analise os exemplos, identifique divergências, gere uma tabela,
inclua recomendações e produza um relatório detalhado.

A segunda solicitação pode consumir uma quantidade enorme de tokens antes mesmo de o modelo começar a responder.

Em muitas plataformas comerciais, o custo é calculado com base nos tokens de entrada e saída.

Portanto, desperdiçar contexto é semelhante a executar repetidamente um job caro sem necessidade.

Dica do Bellacosa

Não envie para o modelo tudo o que existe.

Envie o que ele realmente precisa.

Um prompt gigantesco não é necessariamente um prompt melhor. Muitas vezes, é apenas um SYSIN desorganizado com documentos demais.


4. Gerenciamento da janela de contexto: a memória operacional da missão

A janela de contexto determina quanto conteúdo o modelo consegue considerar durante uma interação.

Ela pode incluir:

  • perguntas anteriores;

  • instruções do sistema;

  • documentos recuperados;

  • mensagens do usuário;

  • resultados de ferramentas;

  • exemplos;

  • regras de formatação.

Podemos comparar a janela de contexto a uma área de trabalho temporária.

No mundo COBOL, pense em estruturas como:

  • WORKING-STORAGE;

  • COMMAREA;

  • containers do CICS;

  • áreas compartilhadas;

  • parâmetros recebidos;

  • registros mantidos durante uma etapa de processamento.

Se você tentar colocar informação demais em uma área limitada, alguma coisa precisará ser removida, resumida ou ignorada.

Estratégias comuns

Janela deslizante

Mantém as mensagens mais recentes e elimina as antigas.

Funciona bem em conversas curtas, mas pode apagar decisões importantes feitas no início.

Resumo de histórico

As interações antigas são condensadas em uma versão menor.

O risco é perder detalhes.

É semelhante a transformar um log completo em um relatório resumido. Você economiza espaço, mas talvez elimine justamente a informação necessária para investigar um erro.

Priorização por relevância

A plataforma seleciona os trechos mais relacionados à pergunta atual.

Essa abordagem costuma ser melhor do que simplesmente usar os textos mais recentes.

Compressão semântica

O sistema tenta preservar significado ocupando menos tokens.

Essa área ainda exige muitos cuidados. Um resumo incorreto pode contaminar todo o raciocínio seguinte.

Curiosidade

Uma janela de contexto muito grande não elimina automaticamente o problema.

Mesmo quando o modelo aceita uma enorme quantidade de texto, inserir conteúdo excessivo pode reduzir a precisão. Informações importantes ficam escondidas no meio de trechos irrelevantes.

É o equivalente a procurar um SQLCODE dentro de dez milhões de linhas de spool sem utilizar filtros.

Ter acesso ao conteúdo não significa encontrá-lo com eficiência.


5. Embeddings: transformando significado em coordenadas

Embeddings são representações matemáticas de palavras, frases, parágrafos, imagens ou documentos.

Em vez de armazenar apenas o texto, a plataforma cria uma sequência de números que representa características semânticas daquele conteúdo.

Por exemplo, as expressões:

  • carro;

  • automóvel;

  • veículo de passeio;

podem gerar vetores próximos porque possuem significados semelhantes.

Já termos como:

  • JCL;

  • JES2;

  • execução batch;

  • submissão de job;

também podem aparecer próximos em um espaço vetorial bem construído.

Isso permite uma pesquisa diferente da busca tradicional por palavras-chave.

Busca tradicional

Pergunta:

Como investigar uma falha de job?

Documento:

Procedimento para diagnóstico de ABEND no JES2.

Talvez uma busca literal não encontre o documento, porque as palavras são diferentes.

Busca semântica

A pesquisa vetorial percebe que “falha de job”, “diagnóstico de ABEND” e “JES2” estão semanticamente relacionados.

Essa é uma das grandes forças dos embeddings.

Eles ajudam o sistema a localizar conteúdos por significado, não apenas por coincidência textual.

Atenção, tripulação

Embedding não é entendimento humano.

É uma representação numérica útil para calcular proximidade.

Dois textos podem parecer próximos matematicamente e ainda serem inadequados para uma pergunta específica.

Por isso, a recuperação precisa de filtros adicionais, metadados, validações e, muitas vezes, reranking.


6. Bancos vetoriais: o arquivo estelar do conhecimento

Depois de criar embeddings, precisamos armazená-los e pesquisá-los rapidamente.

Entram em cena os bancos vetoriais.

Eles são preparados para operações como:

  • busca por similaridade;

  • recuperação dos vetores mais próximos;

  • filtragem por metadados;

  • pesquisa em grande escala;

  • combinação de busca lexical e semântica.

Entre as tecnologias usadas nesse espaço estão soluções especializadas e extensões vetoriais de bancos já conhecidos.

O objetivo principal é responder:

“Quais documentos se parecem mais com a pergunta recebida?”

Exemplo corporativo

Imagine uma empresa com:

  • vinte mil procedimentos;

  • cem mil tickets;

  • cinquenta mil manuais;

  • milhares de normas;

  • históricos de incidentes;

  • documentação de aplicações;

  • diagramas e runbooks.

Quando um analista pergunta:

Como investigar lentidão em uma transação CICS após aumento de carga?

o sistema precisa localizar os materiais mais úteis sem enviar todo o repositório para o modelo.

O banco vetorial ajuda a selecionar apenas alguns trechos.

O paralelo com o mainframe

Podemos pensar em um banco vetorial como um índice especializado.

Ele não substitui necessariamente o Db2, o VSAM, o IMS ou um repositório documental. Frequentemente funciona ao lado deles.

O banco tradicional continua sendo a fonte oficial.

O índice vetorial ajuda a encontrar o conteúdo relevante.

Essa distinção é muito importante.

A camada vetorial pode apontar para um documento, mas a fonte de verdade ainda precisa ser preservada, governada e auditável.


7. RAG: quando o modelo consulta a biblioteca antes de responder

RAG significa Retrieval-Augmented Generation, ou geração aumentada por recuperação.

A ideia é simples e poderosa:

  1. O usuário faz uma pergunta.

  2. O sistema procura informações relevantes.

  3. Os melhores trechos são selecionados.

  4. Esses trechos são enviados ao modelo.

  5. O modelo produz uma resposta baseada no material recuperado.

O fluxo básico é:

PERGUNTA
   |
   v
CRIAÇÃO DO EMBEDDING
   |
   v
BUSCA VETORIAL
   |
   v
RECUPERAÇÃO DE DOCUMENTOS
   |
   v
MONTAGEM DO CONTEXTO
   |
   v
MODELO
   |
   v
RESPOSTA

Por que o RAG é tão importante?

Porque os modelos não conhecem automaticamente:

  • documentos privados;

  • procedimentos internos;

  • dados recém-publicados;

  • alterações realizadas depois do treinamento;

  • regras específicas da organização;

  • detalhes de sistemas proprietários.

Com RAG, a empresa pode fornecer conhecimento atualizado sem retreinar o modelo inteiro.

Exemplo mainframe

Pergunta:

Qual é o procedimento interno para tratar um S0C7 na aplicação XPTO?

A plataforma recupera:

  • o runbook da aplicação;

  • o histórico de incidentes;

  • o manual interno;

  • exemplos de dumps anteriores;

  • a lista de responsáveis.

Depois, o modelo organiza esse conhecimento em uma resposta.

Sem RAG, ele talvez forneça apenas uma explicação genérica do S0C7.

Com RAG, pode responder conforme o ambiente real da organização.

Mas RAG não é magia

Um RAG ruim pode produzir uma resposta ruim com aparência de precisão.

Os principais pontos de falha são:

  • documentos desatualizados;

  • divisão inadequada dos textos;

  • embeddings fracos;

  • filtros errados;

  • recuperação de trechos irrelevantes;

  • contexto excessivo;

  • ausência de citações;

  • permissões mal aplicadas;

  • modelo ignorando a fonte recuperada.

RAG não elimina alucinações. Ele reduz riscos quando é bem projetado.

Easter egg da missão: um RAG sem governança é como acessar o computador da Enterprise usando documentos dos Klingons, Ferengi, Romulanos e Federação sem identificar a origem. A resposta pode soar convincente, mas talvez comece uma guerra interplanetária.


8. Prompt Engineering: escrevendo o JCL da conversa

Prompt engineering é a disciplina de estruturar instruções para orientar o comportamento do modelo.

Um prompt pode definir:

  • papel;

  • objetivo;

  • formato;

  • público;

  • tom;

  • restrições;

  • critérios de qualidade;

  • ferramentas permitidas;

  • fontes obrigatórias;

  • regras de segurança.

Para o programador COBOL, o prompt pode ser comparado a uma combinação de SYSIN, parâmetros, regras de negócio e instruções operacionais.

Um bom programa recebendo dados ruins continua sujeito a resultados ruins.

O mesmo vale para a IA.

Exemplo simples

Prompt fraco:

Fale sobre COBOL.

Prompt melhor:

Explique o conceito de PERFORM em COBOL para um programador iniciante.
Apresente exemplos com PERFORM simples, PERFORM UNTIL e PERFORM VARYING.
Mostre erros comuns, inclua comentários no código e evite recursos obsoletos.

O segundo prompt:

  • define o público;

  • delimita o tema;

  • especifica exemplos;

  • determina cuidados;

  • reduz ambiguidades.

Prompt não é garantia

Mesmo um excelente prompt não transforma um modelo inadequado em especialista absoluto.

Prompt engineering ajuda a controlar comportamento, mas não substitui:

  • dados;

  • testes;

  • arquitetura;

  • segurança;

  • validação;

  • observabilidade.

Um prompt é uma instrução, não um escudo defletor.


9. Fine-tuning: treinamento especializado da tripulação

Fine-tuning é o processo de ajustar um modelo com exemplos específicos para modificar seu comportamento.

Pode ser útil quando a empresa precisa de:

  • estilo consistente;

  • formato muito específico;

  • vocabulário de domínio;

  • classificação especializada;

  • respostas padronizadas;

  • comportamento difícil de obter apenas com prompt.

Exemplo

Uma organização pode ajustar um modelo para transformar descrições de incidentes em categorias operacionais padronizadas.

Entrada:

Job ficou preso após falha de alocação.

Saída esperada:

Categoria: Storage / Dataset Allocation
Prioridade: Média
Equipe: Operações z/OS

Com milhares de exemplos bem preparados, o modelo pode aprender esse padrão.

Quando não usar fine-tuning

Muitas equipes tentam utilizar fine-tuning para “ensinar documentos” ao modelo.

Frequentemente, RAG é mais adequado para conhecimento que muda.

Uma regra prática:

  • Conhecimento mutável: considere RAG.

  • Comportamento ou formato: considere fine-tuning.

  • Instrução simples: comece com prompt engineering.

O fine-tuning exige:

  • dados de treinamento;

  • limpeza;

  • avaliação;

  • controle de versões;

  • custos;

  • monitoramento de regressões.

Treinar com exemplos ruins é semelhante a formar cadetes usando manuais incorretos.

Eles aprenderão muito bem a fazer a coisa errada.


10. Model Routing: enviando cada missão para a nave correta

Model routing é a camada que escolhe qual modelo deve processar cada solicitação.

Nem toda pergunta precisa do modelo mais caro.

Considere estas tarefas:

Classificar um e-mail como urgente ou não.
Resumir um parágrafo.
Analisar um contrato de 200 páginas.
Diagnosticar uma falha complexa em COBOL, CICS e Db2.

Usar o mesmo modelo para tudo pode ser ineficiente.

Uma plataforma pode adotar:

  • modelo pequeno para classificação;

  • modelo médio para resumo;

  • modelo avançado para análise;

  • modelo especializado para código;

  • modelo local para dados sensíveis;

  • modelo externo para tarefas não confidenciais.

Critérios de roteamento

O roteador pode avaliar:

  • complexidade;

  • idioma;

  • domínio;

  • custo;

  • urgência;

  • privacidade;

  • tamanho do contexto;

  • disponibilidade;

  • qualidade necessária.

Isso se parece muito com direcionar diferentes workloads por classes de serviço.

O WLM do z/OS não trata todas as cargas exatamente da mesma maneira. Ele prioriza conforme objetivos definidos.

O model routing aplica uma lógica semelhante ao universo da IA.


11. Caching: não execute novamente o que já foi resolvido

Cache armazena resultados para evitar processamento repetido.

Imagine cem usuários perguntando:

Qual é a política de troca de senha?

Sem cache, a plataforma pode:

  1. criar embedding;

  2. pesquisar documentos;

  3. recuperar os mesmos trechos;

  4. chamar o modelo;

  5. gerar praticamente a mesma resposta;

cem vezes.

Com cache, parte desse fluxo pode ser reutilizada.

Tipos de cache

Cache exato

Reutiliza a resposta quando a pergunta é idêntica.

Cache semântico

Pode reutilizar uma resposta quando a nova pergunta possui significado muito semelhante.

Exemplo:

Como altero minha senha?

e

Qual é o procedimento para trocar a senha?

Cache de embeddings

Evita recalcular vetores já processados.

Cache de recuperação

Armazena resultados frequentes de busca.

Cuidados

Cache pode servir informação antiga.

Ele precisa considerar:

  • validade;

  • versão do documento;

  • identidade do usuário;

  • permissões;

  • sensibilidade;

  • atualização das fontes.

Nunca compartilhe uma resposta em cache entre usuários quando o conteúdo depende das autorizações individuais.

O cache é um replicador útil, mas não pode materializar documentos secretos na cabine errada.


12. Streaming inference: reduzindo a espera percebida

No streaming, a resposta é enviada aos poucos.

Em vez de o usuário esperar o texto completo, ele começa a visualizar os primeiros fragmentos enquanto o restante é gerado.

Isso não significa necessariamente que a inferência ficou mais rápida.

Significa que a experiência parece mais responsiva.

É uma diferença entre:

AGUARDE...
AGUARDE...
AGUARDE...
RESPOSTA COMPLETA

e:

A resposta começa...
continua sendo formada...
e chega gradualmente...

Em aplicações interativas, essa percepção é muito importante.

Contudo, streaming exige cuidados:

  • filtros de segurança precisam acompanhar a saída;

  • erros podem aparecer no meio do texto;

  • o cliente precisa lidar com interrupções;

  • a interface deve indicar conclusão;

  • logs precisam reconstruir o conteúdo integral.

Transmitir tokens sem controle seria como abrir um canal subespacial antes de verificar se a mensagem está autorizada.


13. Batch processing: a inteligência artificial também trabalha de madrugada

Nem toda tarefa precisa acontecer em tempo real.

Muitas operações de IA são perfeitas para processamento em lote:

  • criação de embeddings;

  • classificação de milhões de documentos;

  • resumo de históricos;

  • extração de metadados;

  • avaliação de respostas;

  • reindexação;

  • análise de logs;

  • preparação de dados.

O programador mainframe conhece bem essa filosofia.

O batch continua sendo uma solução poderosa porque permite:

  • agrupar trabalho;

  • controlar janelas;

  • otimizar recursos;

  • repetir etapas;

  • reiniciar processos;

  • acompanhar resultados.

Exemplo

Uma empresa possui cinco milhões de PDFs.

Não faz sentido esperar um usuário perguntar sobre cada documento para então gerar o embedding.

A plataforma pode processar os documentos em lote durante períodos de menor custo e menor demanda.

O fluxo pode incluir:

LEITURA
  |
  v
EXTRAÇÃO DE TEXTO
  |
  v
LIMPEZA
  |
  v
DIVISÃO EM TRECHOS
  |
  v
EMBEDDINGS
  |
  v
INDEXAÇÃO

Parece familiar?

Sim. É praticamente uma nova espécie de cadeia batch.

Mudaram os componentes, mas os princípios continuam reconhecíveis.


14. Guardrails e camadas de segurança: os escudos da plataforma

Guardrails são mecanismos que controlam entradas, saídas e ações da IA.

Eles podem ajudar a impedir:

  • conteúdo perigoso;

  • vazamento de informações;

  • exposição de dados pessoais;

  • execução de comandos proibidos;

  • respostas fora da política;

  • manipulação por prompt injection;

  • acesso indevido a ferramentas;

  • uso de fontes não autorizadas.

Guardrails de entrada

Analisam o que o usuário envia.

Podem detectar:

  • tentativas de burlar regras;

  • dados sensíveis;

  • conteúdo malicioso;

  • solicitações proibidas.

Guardrails de saída

Verificam a resposta antes da entrega.

Podem procurar:

  • informações confidenciais;

  • linguagem inadequada;

  • instruções perigosas;

  • violações de conformidade;

  • ausência de citações.

Guardrails de ferramentas

Controlam o que o agente pode fazer.

Por exemplo:

  • consultar um banco;

  • enviar um e-mail;

  • criar um ticket;

  • executar uma transação;

  • alterar um cadastro.

Essa camada merece atenção máxima.

Uma IA que apenas responde texto possui riscos.

Uma IA que pode executar ações possui riscos muito maiores.

O paralelo com RACF

Guardrails não são exatamente o RACF da IA, mas a comparação ajuda.

Assim como o RACF trabalha com identidades, perfis, recursos e permissões, uma plataforma de IA precisa decidir:

  • quem pode perguntar;

  • quais fontes pode consultar;

  • quais ações pode executar;

  • quais dados pode revelar;

  • quais operações devem ser auditadas.

Nunca permita que o modelo seja a autoridade final sobre permissões.

A autorização precisa estar fora do modelo, em controles determinísticos.

Um LLM não deve “imaginar” se o usuário possui acesso.

Ele deve receber essa decisão de uma camada confiável.


15. Evaluation pipelines: testar a IA antes que o Klingon teste por você

Sistemas tradicionais possuem testes unitários, integrados, funcionais, de regressão, desempenho e segurança.

Plataformas de IA também precisam de avaliação contínua.

O problema é que respostas geradas não são sempre idênticas.

Um programa COBOL pode produzir um valor esperado exato.

Um modelo pode gerar duas respostas diferentes, ambas aceitáveis.

Por isso, a avaliação precisa usar múltiplos critérios.

O que avaliar?

  • correção;

  • relevância;

  • fundamentação;

  • completude;

  • segurança;

  • formato;

  • latência;

  • custo;

  • uso de fontes;

  • taxa de recusa;

  • consistência;

  • satisfação do usuário.

Conjunto dourado

Uma prática importante é criar um conjunto de perguntas com respostas esperadas.

Exemplo:

Pergunta:
O que significa DISP=(NEW,CATLG,DELETE)?

Critérios:
- explicar NEW;
- explicar CATLG;
- explicar DELETE;
- mostrar o comportamento em sucesso e falha;
- não inventar sintaxe;

A plataforma executa essas perguntas periodicamente e compara a qualidade.

Isso ajuda a detectar regressões após:

  • troca de modelo;

  • mudança de prompt;

  • alteração no RAG;

  • nova versão do índice;

  • mudança no tokenizer;

  • atualização dos documentos.

Curiosidade importante

Uma plataforma pode melhorar a média geral e piorar exatamente os casos mais críticos.

Por isso, não basta olhar uma única nota.

É necessário separar avaliações por:

  • domínio;

  • risco;

  • tipo de usuário;

  • complexidade;

  • sensibilidade.

Uma resposta errada sobre uma curiosidade custa pouco.

Uma resposta errada sobre uma operação financeira pode custar milhões.


16. Observabilidade: SMF, RMF e OMEGAMON encontraram a inteligência artificial

Observabilidade permite compreender o comportamento interno de um sistema por meio de sinais como:

  • logs;

  • métricas;

  • traces;

  • eventos;

  • correlações.

Em IA, precisamos observar muito mais do que “funcionou ou falhou”.

Métricas importantes

  • tokens de entrada;

  • tokens de saída;

  • custo por requisição;

  • latência;

  • tempo até o primeiro token;

  • erros;

  • timeout;

  • modelo selecionado;

  • documentos recuperados;

  • score de similaridade;

  • taxa de cache;

  • bloqueios de guardrail;

  • satisfação do usuário;

  • uso de ferramentas;

  • falhas de autorização.

Tracing

Um trace pode mostrar toda a jornada:

REQUISIÇÃO DO USUÁRIO
        |
        v
AUTENTICAÇÃO
        |
        v
CLASSIFICAÇÃO
        |
        v
MODEL ROUTING
        |
        v
BUSCA VETORIAL
        |
        v
RERANKING
        |
        v
MONTAGEM DO PROMPT
        |
        v
INFERÊNCIA
        |
        v
VALIDAÇÃO
        |
        v
RESPOSTA

Sem tracing, a equipe vê apenas:

A resposta ficou ruim.

Com tracing, pode descobrir:

O documento correto não foi recuperado porque o filtro de versão estava errado.

Essa diferença é gigantesca.

O profissional de mainframe entende muito bem o valor de SMF, RMF, dumps, traces e históricos.

A IA não elimina a necessidade de diagnóstico.

Ela aumenta essa necessidade.


17. Autoscaling: preparando a frota para a hora do pico

A demanda por IA pode variar muito.

Durante a madrugada, talvez existam poucas chamadas.

Depois de uma campanha, lançamento ou incidente, podem surgir milhares de usuários.

Autoscaling ajusta automaticamente os recursos.

Ele pode:

  • adicionar instâncias;

  • aumentar réplicas;

  • distribuir requisições;

  • ativar aceleradores;

  • reduzir capacidade quando a demanda cai.

Mas escalar IA não é tão simples quanto escalar uma página web.

Modelos grandes podem exigir:

  • muita memória;

  • GPU;

  • tempo de inicialização;

  • distribuição especializada;

  • carregamento de pesos;

  • cache aquecido.

Cold start

Quando uma nova instância precisa carregar o modelo, pode haver atraso.

É como iniciar uma região inteira do sistema apenas depois de a fila já estar cheia.

Por isso, a plataforma precisa prever:

  • capacidade mínima;

  • réplicas aquecidas;

  • comportamento em picos;

  • limites de fila;

  • degradação controlada.

Degradação elegante

Quando o modelo principal está indisponível, o sistema pode:

  • usar um modelo menor;

  • reduzir o tamanho da resposta;

  • desativar funções não críticas;

  • colocar tarefas em fila;

  • oferecer resposta parcial;

  • encaminhar para atendimento humano.

Uma plataforma madura não pergunta apenas:

“Como manter tudo perfeito?”

Ela também pergunta:

“Como continuar operando quando alguma camada falhar?”

Essa é a verdadeira mentalidade de resiliência.


18. Otimização de custos: não desperdice dilítio

A IA generativa pode consumir recursos rapidamente.

Os custos aparecem em diferentes pontos:

  • inferência;

  • tokens;

  • armazenamento;

  • banco vetorial;

  • GPU;

  • rede;

  • observabilidade;

  • reprocessamento;

  • avaliação;

  • embeddings;

  • manutenção.

Estratégias de economia

Usar modelos menores quando possível

Classificações simples não precisam do modelo mais poderoso.

Limitar contexto

Enviar apenas documentos relevantes reduz tokens.

Aplicar cache

Evita inferência repetida.

Utilizar processamento em lote

Operações não urgentes podem ser agrupadas.

Comprimir prompts

Instruções redundantes custam dinheiro.

Controlar tamanho de resposta

Nem toda pergunta precisa de três mil palavras.

Medir custo por caso de uso

O custo médio global pode esconder operações extremamente caras.

Métrica realmente útil

Não observe apenas:

Custo por milhão de tokens

Observe também:

Custo por atendimento resolvido

ou:

Custo por incidente evitado

ou:

Custo por documento processado

Uma solução aparentemente cara pode gerar alto valor.

Uma solução barata pode ser inútil.

O objetivo não é gastar o mínimo.

É produzir resultado sustentável.


19. Como todas as camadas trabalham juntas

Agora podemos montar uma arquitetura simplificada:

USUÁRIO
   |
   v
AUTENTICAÇÃO E AUTORIZAÇÃO
   |
   v
GUARDRAIL DE ENTRADA
   |
   v
CLASSIFICAÇÃO DA SOLICITAÇÃO
   |
   v
MODEL ROUTING
   |
   +----------------------+
   |                      |
   v                      v
CACHE                 RAG / BUSCA
   |                      |
   +----------+-----------+
              |
              v
      MONTAGEM DO PROMPT
              |
              v
         INFERÊNCIA
              |
              v
      GUARDRAIL DE SAÍDA
              |
              v
        STREAMING / API
              |
              v
           USUÁRIO

Paralelamente, outras camadas acompanham tudo:

OBSERVABILIDADE
AVALIAÇÃO
CUSTOS
AUTOSCALING
AUDITORIA
SEGURANÇA

Nenhuma camada trabalha completamente isolada.

Uma decisão pode afetar várias outras.

Exemplo:

Ao aumentar o contexto:

  • a qualidade pode melhorar;

  • a latência pode aumentar;

  • o custo pode crescer;

  • o limite do modelo pode ser atingido;

  • o cache pode perder eficiência.

Ao trocar para um modelo menor:

  • o custo pode cair;

  • a velocidade pode melhorar;

  • a qualidade pode diminuir;

  • o roteamento precisa mudar;

  • as avaliações devem ser repetidas.

Arquitetura de IA é um jogo permanente de trade-offs.

Não existe uma configuração perfeita para todos os casos.

Existe uma configuração adequada ao objetivo.


20. Um exemplo completo: copiloto para operações mainframe

Vamos imaginar uma empresa criando um assistente para ajudar operadores e programadores iniciantes.

O usuário pergunta:

Meu job terminou com S0C7. O que devo verificar?

Passo 1 — Autenticação

O sistema identifica o usuário.

Passo 2 — Autorização

Verifica quais aplicações, logs e runbooks ele pode consultar.

Passo 3 — Guardrail

Remove ou mascara dados sensíveis enviados no prompt.

Passo 4 — Classificação

Identifica a pergunta como diagnóstico técnico de mainframe.

Passo 5 — Model routing

Seleciona um modelo especializado em código e operações.

Passo 6 — RAG

Busca:

  • documentação de S0C7;

  • runbook da aplicação;

  • incidentes semelhantes;

  • padrões internos de diagnóstico;

  • guias de dump.

Passo 7 — Montagem de contexto

Seleciona apenas os trechos mais relevantes.

Passo 8 — Prompt

Instrui o modelo a:

  • explicar o erro;

  • sugerir sequência de análise;

  • não executar ações;

  • citar as fontes;

  • separar hipóteses de fatos.

Passo 9 — Inferência

O modelo gera a resposta.

Passo 10 — Validação

A plataforma verifica:

  • ausência de dados sigilosos;

  • presença de fontes;

  • aderência ao formato;

  • inexistência de instruções perigosas.

Passo 11 — Streaming

A resposta aparece gradualmente.

Passo 12 — Observabilidade

O sistema registra:

  • modelo;

  • tokens;

  • latência;

  • documentos consultados;

  • custo;

  • feedback.

Passo 13 — Avaliação

A interação pode entrar em um conjunto de análise para melhorar a plataforma.

Perceba que o modelo participou apenas de uma etapa.

A qualidade final dependeu da missão inteira.


21. Erros comuns de equipes iniciantes

Escolher o modelo antes de entender o problema

A equipe se apaixona por uma tecnologia e tenta encaixá-la em qualquer caso.

Comece pelo resultado desejado.

Jogar documentos em um banco vetorial sem governança

Documentos duplicados, antigos e conflitantes produzirão respostas ruins.

Não medir custos

A surpresa chega na primeira fatura.

Confiar em testes manuais

Cinco perguntas bem respondidas não provam que a plataforma está pronta.

Ignorar autorização no RAG

O sistema pode recuperar um documento que o usuário não deveria ler.

Usar um modelo grande para tudo

Funciona tecnicamente, mas pode ser economicamente inviável.

Não registrar versões

Sem saber qual modelo, prompt e índice foram usados, investigar regressões se torna difícil.

Confundir fluência com correção

Uma resposta bem escrita pode estar errada.

O modelo fala com confiança porque foi treinado para produzir linguagem plausível, não porque possui certeza.


22. Roteiro prático para construir uma plataforma

Etapa 1 — Escolha um caso de uso pequeno

Evite começar com:

Vamos criar uma IA para toda a empresa.

Comece com:

Vamos responder dúvidas sobre os procedimentos da equipe de operações.

Etapa 2 — Defina métricas

Exemplos:

  • taxa de resolução;

  • precisão;

  • tempo de resposta;

  • custo;

  • satisfação;

  • redução de chamados.

Etapa 3 — Organize as fontes

Remova:

  • duplicações;

  • documentos vencidos;

  • versões conflitantes;

  • conteúdos sem proprietário.

Etapa 4 — Crie um RAG simples

Teste recuperação antes de culpar o modelo.

Etapa 5 — Monte um conjunto de avaliação

Inclua perguntas fáceis, difíceis, ambíguas e perigosas.

Etapa 6 — Implemente segurança

Autenticação, autorização, mascaramento e auditoria não devem ser deixados para o final.

Etapa 7 — Adicione observabilidade

Registre toda a cadeia.

Etapa 8 — Otimize custo

Somente depois de medir.

Etapa 9 — Teste carga

Descubra o limite antes de os usuários descobrirem.

Etapa 10 — Planeje falhas

Defina o comportamento quando:

  • o modelo falhar;

  • o banco vetorial ficar indisponível;

  • a latência aumentar;

  • a cota acabar;

  • o documento não for encontrado.


23. Pontos para fixar no diário de bordo

Guarde estas ideias:

  1. O modelo é um componente, não a plataforma inteira.

  2. Escalabilidade envolve desempenho, custo, segurança, qualidade e operação.

  3. Tokens afetam limites, latência e orçamento.

  4. Contexto precisa ser selecionado, não apenas acumulado.

  5. Embeddings permitem busca por significado.

  6. Bancos vetoriais aceleram a recuperação semântica.

  7. RAG conecta o modelo ao conhecimento atualizado.

  8. Prompt engineering orienta comportamento, mas não corrige toda limitação.

  9. Fine-tuning serve principalmente para especialização comportamental.

  10. Model routing evita usar uma nave capitânia para entregar uma encomenda simples.

  11. Cache reduz repetição e custo.

  12. Streaming melhora a experiência percebida.

  13. Batch continua essencial.

  14. Guardrails protegem entradas, saídas e ações.

  15. Avaliação contínua detecta regressões.

  16. Observabilidade transforma “a IA errou” em um diagnóstico real.

  17. Autoscaling prepara o sistema para picos.

  18. Otimização de custos precisa considerar valor, não apenas preço por token.


Conclusão: a plataforma é a frota

O mercado adora discutir modelos.

Qual possui mais parâmetros?

Qual responde melhor?

Qual escreve código?

Qual aceita mais contexto?

Qual é mais barato?

Essas perguntas são úteis, mas insuficientes.

Uma plataforma escalável precisa funcionar em condições reais:

  • muitos usuários;

  • dados imperfeitos;

  • documentos conflitantes;

  • picos de acesso;

  • ameaças;

  • falhas;

  • mudanças de versão;

  • pressão de custo;

  • exigências regulatórias;

  • auditoria.

É nesse ambiente que a arquitetura mostra seu verdadeiro valor.

O modelo pode ser o cérebro da operação, mas ainda precisa de memória, sensores, controles, comunicação, proteção, supervisão e energia.

Um grande sistema de IA não nasce apenas da escolha de um modelo poderoso.

Ele nasce da integração disciplinada entre componentes.

Para o programador COBOL Padawan, existe uma vantagem inesperada: muitos desses princípios já fazem parte do universo mainframe há décadas.

Separação de responsabilidades.

Controle de acesso.

Processamento em lote.

Priorização de carga.

Observabilidade.

Auditoria.

Resiliência.

Otimização de recursos.

Recuperação após falhas.

A tecnologia mudou, mas a engenharia continua reconhecível.

No final da missão, a pergunta correta não é:

“Qual modelo está sendo utilizado?”

A pergunta madura é:

“Como tokenização, contexto, RAG, roteamento, segurança, avaliação, observabilidade, infraestrutura e custos trabalham juntos quando a plataforma está sob pressão?”

Se a equipe não consegue responder, talvez ainda não possua uma plataforma.

Talvez possua apenas uma demonstração bonita estacionada no hangar.

E como diria o Sr. Spock, olhando para um dashboard cheio de alertas:

“Uma inteligência sem arquitetura é apenas uma probabilidade esperando por um incidente.”

Portanto, jovem programador, quando alguém apresentar um novo modelo milagroso, admire sua capacidade, estude suas possibilidades e faça a pergunta que separa cadetes de oficiais experientes:

— Muito interessante. Mas onde estão os logs, os testes, os escudos, o roteamento, o controle de custo e o plano para quando ele falhar?

Nesse momento, você não estará mais pensando apenas como usuário de inteligência artificial.

Estará pensando como arquiteto de sistemas.

E a Frota Estelar precisa exatamente desse tipo de profissional.

quarta-feira, 5 de junho de 2024

CSI Netflix: A Arquitetura de Microserviços Investigada por um Programador COBOL

 

Bellacosa Mainframe investiga a arquitetura de microservicos da netflix

☕ Um Café no Bellacosa Mainframe

CSI Netflix: A Arquitetura de Microserviços Investigada por um Programador COBOL

Quando um Simples Clique no Botão “Assistir” Abre uma Cena do Crime Distribuída Entre APIs, Filas, Bancos, Caches, Eventos e Milhares de Servidores

Às 02h17 da madrugada, a cidade de Nova York parecia executar seu eterno processamento batch.

As avenidas continuavam recebendo transações. Os semáforos alternavam estados como flags de controle. Táxis percorriam rotas imprevisíveis, enquanto milhões de janelas iluminadas lembravam terminais conectados a um sistema gigantesco cuja documentação havia sido perdida décadas atrás.

No laboratório do CSI New York, uma nova ocorrência acabava de chegar.

Não havia sangue.

Não havia arma.

Não havia sequer uma vítima humana.

O relatório dizia apenas:

“O usuário pressionou o botão Assistir, mas o vídeo demorou três segundos para começar.”

Para uma pessoa comum, três segundos não seriam um crime.

Para uma plataforma global de streaming, três segundos poderiam representar abandono, perda de audiência, quebra de experiência, sobrecarga em algum serviço ou indício de uma falha distribuída prestes a contaminar milhões de sessões.

Sobre a mesa de análise estava um diagrama com o título:

Microservice Architecture at Netflix

O investigador observou a sequência de componentes:

  • cliente;

  • balanceador de carga;

  • API Gateway;

  • microserviços;

  • cache;

  • banco de dados;

  • pipeline de eventos;

  • Kafka;

  • Spark;

  • Elasticsearch;

  • Amazon S3;

  • Hadoop;

  • sistema de notificações.

Ao lado dele, um programador COBOL iniciante segurava uma caneca de café e tentava encontrar a PROCEDURE DIVISION.

Não havia.

Também não havia JCL.

Nenhum EXEC CICS.

Nenhum CALL explícito mostrando quem chamava quem.

Mesmo assim, o sistema funcionava.

Ou pelo menos deveria funcionar.

O investigador apontou para o diagrama e declarou:

“Em uma arquitetura distribuída, todo componente é uma testemunha. O problema é que algumas testemunhas mentem, outras desaparecem e várias mudam de endereço durante o interrogatório.”

Era hora de reconstruir a ocorrência.


1. A primeira evidência: o clique não é a transação completa

Quando um usuário abre a Netflix em uma televisão, celular, navegador, tablet ou console e pressiona o botão Assistir, parece que apenas um vídeo está sendo solicitado.

Por trás da interface, porém, diversas perguntas precisam ser respondidas:

  • O usuário está autenticado?

  • A assinatura continua ativa?

  • Qual perfil está sendo utilizado?

  • O conteúdo está disponível naquele país?

  • A classificação etária permite a reprodução?

  • Qual idioma deve ser selecionado?

  • Há legenda adequada?

  • O dispositivo suporta HDR?

  • Qual resolução é recomendada?

  • A conexão permite 4K?

  • De onde o vídeo será entregue?

  • Em que ponto o usuário parou?

  • A reprodução deve ser registrada no histórico?

  • Esse evento deve influenciar recomendações futuras?

Um único clique inicia uma cadeia de decisões.

No universo COBOL, poderíamos imaginar um programa monolítico:

PERFORM VALIDAR-USUARIO
PERFORM VALIDAR-ASSINATURA
PERFORM CONSULTAR-PERFIL
PERFORM CONSULTAR-CATALOGO
PERFORM VALIDAR-REGIAO
PERFORM LOCALIZAR-CONTEUDO
PERFORM REGISTRAR-REPRODUCAO
PERFORM INICIAR-STREAMING

Em uma arquitetura de microserviços, essas responsabilidades podem estar espalhadas por diversos programas independentes, executados em máquinas diferentes, atualizados por equipes distintas e comunicando-se por rede.

A operação deixa de ser um grande PERFORM local e passa a ser uma investigação distribuída.

Essa distinção é fundamental.

Quando um parágrafo COBOL chama outro dentro do mesmo programa, o custo costuma ser pequeno e previsível. Quando um serviço chama outro pela rede, surgem novos suspeitos:

  • latência;

  • perda de pacotes;

  • indisponibilidade;

  • timeout;

  • autenticação;

  • serialização;

  • incompatibilidade de versões;

  • congestionamento;

  • repetição de requisições;

  • respostas parciais.

A rede não é apenas um cabo entre dois sistemas.

A rede é uma variável de negócio.


2. O cliente: onde a ocorrência começa

O primeiro componente da arquitetura é o cliente.

Ele pode ser:

  • navegador web;

  • aplicativo Android ou iOS;

  • Smart TV;

  • videogame;

  • receptor multimídia;

  • tablet;

  • dispositivo antigo com poucos recursos.

Um erro comum do iniciante é imaginar que todos os clientes possuem capacidade semelhante.

Não possuem.

Uma Smart TV de entrada fabricada anos atrás pode ter pouca memória, processador limitado e sistema operacional desatualizado. Um smartphone moderno pode realizar tarefas muito mais sofisticadas. Um console de videogame possui características diferentes de um navegador.

O backend não deve simplesmente responder:

{
  "video": "filme.mp4"
}

Ele precisa considerar as características do dispositivo, da sessão e da rede.

Uma resposta mais realista pode incluir:

{
  "titleId": "8732451",
  "profile": "adulto",
  "audio": "pt-BR",
  "subtitle": "pt-BR",
  "resolution": "1080p",
  "hdr": false,
  "resumePosition": 1842,
  "streamingProfile": "adaptive"
}

O cliente é a primeira testemunha, mas nem sempre é confiável.

Ele pode estar:

  • com relógio incorreto;

  • usando uma versão antiga;

  • operando em uma rede instável;

  • repetindo uma requisição;

  • enviando dados incompletos;

  • tentando acessar uma API descontinuada.

Por isso, o backend nunca deve confiar cegamente em tudo que recebe.

No mainframe, essa ideia já existe há décadas: validar campos, proteger limites, conferir códigos, verificar autorização e tratar entradas como potencialmente problemáticas.

A tecnologia muda. A prudência permanece.


3. Elastic Load Balancer: o policial controlando a multidão

Depois que a requisição deixa o cliente, ela normalmente passa por um balanceador de carga.

No diagrama aparece o AWS Elastic Load Balancer, frequentemente abreviado como ELB.

Sua função é distribuir requisições entre várias instâncias de uma aplicação.

Imagine três servidores:

Servidor A
Servidor B
Servidor C

Sem balanceamento, todas as chamadas poderiam cair no Servidor A:

A: 100%
B:   0%
C:   0%

O resultado seria previsível:

Servidor A sobrecarregado
Servidor B ocioso
Servidor C ocioso
Usuários irritados
Equipe de plantão acordada

Com balanceamento:

A: 34%
B: 33%
C: 33%

O balanceador também realiza verificações de saúde.

Se o Servidor B deixa de responder:

A: saudável
B: fora de serviço
C: saudável

O tráfego é direcionado apenas para A e C.

No mundo IBM Z, o programador COBOL pode comparar esse comportamento, de forma conceitual, com mecanismos de distribuição e gerenciamento de carga encontrados em ambientes como:

  • WLM;

  • CICSplex;

  • Sysplex;

  • roteamento entre regiões CICS;

  • múltiplas instâncias de aplicações;

  • balanceamento de workloads.

Não são tecnologias idênticas, mas enfrentam uma pergunta semelhante:

“Para onde esta unidade de trabalho deve ser enviada?”

Curiosidade da perícia

O balanceador não precisa compreender toda a regra de negócio. Ele não precisa saber se o usuário está assistindo a um documentário ou a um anime.

Ele precisa saber coisas como:

  • qual servidor está saudável;

  • qual rota deve receber a chamada;

  • se a conexão deve ser encerrada;

  • se há capacidade disponível;

  • se a comunicação é segura.

Ele é o policial na entrada do prédio.

Não resolve o caso, mas impede que todas as testemunhas entrem pela mesma porta ao mesmo tempo.


4. API Gateway: a recepção blindada

Depois do balanceador, encontramos o API Gateway.

Ele funciona como um ponto central de entrada para as APIs.

Sem Gateway, o cliente poderia precisar conhecer dezenas de serviços:

login.netflix.exemplo
catalogo.netflix.exemplo
perfil.netflix.exemplo
pagamento.netflix.exemplo
recomendacao.netflix.exemplo
historico.netflix.exemplo

Isso criaria forte acoplamento entre o aplicativo e a estrutura interna.

Com um Gateway, o cliente acessa uma entrada controlada:

api.netflix.exemplo

O Gateway analisa a rota:

GET /profiles
GET /catalog
GET /recommendations
POST /playback/start

E encaminha cada requisição ao serviço correspondente.

Além do roteamento, o Gateway pode cuidar de:

  • autenticação;

  • autorização;

  • controle de taxa;

  • logs;

  • métricas;

  • transformação de mensagens;

  • compressão;

  • versionamento;

  • validação de tokens;

  • proteção contra abuso.

Exemplo de rate limiting

Um cliente normal pode fazer algumas requisições por segundo.

Um robô defeituoso pode tentar:

100.000 requisições por segundo

O Gateway pode interromper o abuso:

HTTP/1.1 429 Too Many Requests

Isso protege os serviços internos.

Em uma analogia mainframe, o Gateway reúne funções que podem lembrar, em diferentes níveis, componentes como:

  • front-end transacional;

  • camada de segurança;

  • validação RACF;

  • roteamento;

  • controle de acesso;

  • filtros;

  • monitoramento;

  • limites operacionais.

Ele não substitui o RACF nem é um CICS. A comparação serve apenas para ajudar o iniciante a localizar mentalmente a função.

Dica para o padawan COBOL

Nunca confunda “ponto único de entrada” com “ponto único de falha”.

Se existe apenas uma instância do Gateway e ela morre, toda a plataforma fica inacessível.

Por isso, o Gateway também deve ser:

  • replicado;

  • balanceado;

  • monitorado;

  • escalável;

  • tolerante a falhas.

Em sistemas críticos, até o porteiro precisa de substituto.


5. Microserviços: desmontando o monólito

Chegamos ao coração da arquitetura.

Um monólito reúne muitas funções dentro de uma única aplicação.

Poderíamos ter:

NETFLIX-APP
 ├── Login
 ├── Perfis
 ├── Catálogo
 ├── Busca
 ├── Pagamentos
 ├── Histórico
 ├── Recomendações
 ├── Legendas
 └── Streaming

No começo, esse modelo pode ser simples.

Uma única aplicação.

Um único pacote.

Um único processo de implantação.

Mas, conforme o sistema cresce, o monólito pode se tornar pesado:

  • milhões de linhas;

  • dependências difíceis;

  • testes demorados;

  • deploys arriscados;

  • equipes bloqueando umas às outras;

  • necessidade de escalar tudo, mesmo quando apenas uma função está sobrecarregada.

Os microserviços quebram o sistema em unidades menores:

Serviço de Login
Serviço de Perfil
Serviço de Catálogo
Serviço de Busca
Serviço de Recomendação
Serviço de Cobrança
Serviço de Reprodução
Serviço de Histórico

Cada serviço pode possuir:

  • código próprio;

  • ciclo de vida próprio;

  • equipe responsável;

  • banco ou armazenamento específico;

  • métricas;

  • versionamento;

  • capacidade de escala independente.

Se o serviço de recomendações está sobrecarregado, ele pode receber mais instâncias sem que o serviço de cobrança também precise crescer.

A grande armadilha

Microserviços não eliminam complexidade.

Eles redistribuem a complexidade.

O monólito concentra problemas dentro do programa.

Os microserviços espalham problemas por:

  • rede;

  • contratos de API;

  • autenticação;

  • logs;

  • filas;

  • bancos;

  • versões;

  • observabilidade;

  • deploys;

  • tolerância a falhas.

É como desmontar um grande arquivo sequencial em centenas de datasets.

Você ganha flexibilidade.

Também ganha centenas de nomes, catálogos, permissões, políticas e pontos de falha para administrar.

A arquitetura de microserviços não deve ser adotada porque está na moda. Ela faz sentido quando o domínio, a escala, a organização e a necessidade de independência justificam o custo operacional.

Evidência número 5-A

Um monólito bem projetado é melhor do que uma coleção de microserviços mal projetados.

Esse detalhe costuma desaparecer das apresentações corporativas.


6. Service Discovery: procurando suspeitos que mudam de endereço

Em um ambiente distribuído, os serviços nascem e morrem constantemente.

Uma instância do serviço de catálogo pode estar em:

10.20.14.8:8080

Após um novo deploy, outra instância surge em:

10.20.19.42:8080

Mais tarde, o auto scaling cria novas cópias:

10.20.21.10:8080
10.20.21.11:8080
10.20.21.12:8080

Como os demais serviços descobrem esses endereços?

Não é recomendável gravá-los no código:

MOVE '10.20.14.8' TO WS-ENDERECO-SERVICO.

Esse seria o equivalente distribuído de colocar o nome físico de um dataset em 300 programas COBOL.

A descoberta de serviços mantém um registro atualizado.

Cada serviço informa:

Nome: recommendation-service
Estado: saudável
Endereço: 10.20.21.10
Porta: 8080
Versão: 4.7

Na história da Netflix, o Eureka tornou-se uma referência conhecida para esse tipo de registro e descoberta.

Quando um serviço precisa localizar outro, consulta o registro ou utiliza informações mantidas em cache.

O paralelo com o mainframe

No mainframe, o programador raramente precisa conhecer o endereço físico exato de cada recurso de hardware. Há camadas de abstração, catálogos, subsistemas, definições e mecanismos de roteamento.

O Service Discovery segue uma lógica semelhante:

“Chame o serviço pelo nome lógico; deixe a infraestrutura descobrir onde ele está.”


7. Cache: a impressão digital da performance

O cache é uma das peças mais importantes de sistemas de alta escala.

Imagine que milhões de pessoas abram a mesma série popular.

Sem cache, cada requisição poderia consultar o banco:

SELECT *
  FROM TITULOS
 WHERE ID_TITULO = 8732451;

Multiplique isso por milhões.

O banco acabaria interrogado até confessar crimes que não cometeu.

Com cache, o resultado mais acessado fica temporariamente em memória:

Chave: TITULO:8732451
Valor: metadados do conteúdo
Tempo de vida: 10 minutos

A primeira requisição consulta o banco.

As próximas utilizam a memória.

Como a memória é muito mais rápida, a latência cai e o banco é protegido.

O que pode ficar em cache?

  • informações de perfil;

  • metadados de filmes;

  • títulos populares;

  • configurações;

  • sessões;

  • autorizações temporárias;

  • resultados de busca;

  • recomendações;

  • preferências;

  • disponibilidade regional.

O problema da evidência antiga

Cache também cria riscos.

Imagine que o usuário altere o nome do perfil:

Antes: Vagner
Depois: Conan do Mainframe

O banco foi atualizado, mas o cache continua contendo o valor antigo.

Durante algum tempo, o sistema pode mostrar:

Vagner

Isso é uma inconsistência temporária.

As principais estratégias incluem:

  • expiração por tempo;

  • invalidação após alteração;

  • atualização do cache;

  • cache-aside;

  • write-through;

  • write-behind.

Cache-aside, passo a passo

  1. A aplicação procura a informação no cache.

  2. Se encontrar, retorna imediatamente.

  3. Se não encontrar, consulta o banco.

  4. Armazena o resultado no cache.

  5. Retorna a resposta.

Pseudocódigo:

DADO = CACHE.GET(CHAVE)

SE DADO NÃO EXISTE
    DADO = BANCO.SELECT(CHAVE)
    CACHE.PUT(CHAVE, DADO)
FIM-SE

Para o programador COBOL, a lógica lembra o uso de tabelas em memória, áreas compartilhadas, buffers e recursos temporários para evitar acessos repetidos a dispositivos mais lentos.


8. Banco de dados: o cofre das evidências persistentes

O banco guarda informações que não podem desaparecer quando um processo termina.

Entre elas:

  • usuários;

  • perfis;

  • assinaturas;

  • histórico;

  • preferências;

  • metadados;

  • direitos de exibição;

  • dados financeiros;

  • configurações.

Uma arquitetura de larga escala raramente utiliza apenas um banco universal para tudo.

Diferentes necessidades podem exigir diferentes soluções:

  • dados relacionais;

  • chave-valor;

  • documentos;

  • séries temporais;

  • grafos;

  • pesquisa textual;

  • armazenamento de objetos.

Esse princípio é chamado, em muitos contextos, de persistência poliglota.

Não significa usar dezenas de bancos por entusiasmo tecnológico. Significa escolher o mecanismo adequado para cada tipo de problema.

O alerta do laboratório

Cada banco adicional aumenta:

  • conhecimento necessário;

  • manutenção;

  • monitoramento;

  • backup;

  • recuperação;

  • segurança;

  • custos;

  • complexidade operacional.

No mainframe, o ambiente costuma valorizar padronização e governança forte. Em plataformas distribuídas, a liberdade tecnológica precisa ser equilibrada por disciplina arquitetural.

Caso contrário, a empresa termina com:

37 bancos
14 formatos
9 sistemas de mensageria
0 pessoas que entendem o conjunto completo

Esse é o tipo de cena que nem o CSI deseja encontrar.


9. Kafka e arquitetura orientada a eventos

Quando o usuário pressiona Play, vários sistemas podem precisar saber que a reprodução começou.

Uma abordagem síncrona seria:

Serviço de Reprodução
    chama Histórico
    chama Métricas
    chama Recomendações
    chama Notificações
    chama Auditoria
    chama Analytics

O problema aparece quando um desses serviços está lento ou indisponível.

A reprodução poderia ficar presa esperando um sistema de analytics responder.

Em uma arquitetura orientada a eventos, o serviço publica uma ocorrência:

{
  "eventType": "PLAYBACK_STARTED",
  "userId": "U92837",
  "profileId": "P4",
  "titleId": "8732451",
  "timestamp": "2026-07-26T02:17:31Z"
}

O evento é enviado para um sistema de mensageria ou streaming como o Kafka.

Diversos consumidores podem receber a informação:

Consumidor de Histórico
Consumidor de Recomendações
Consumidor de Métricas
Consumidor de Auditoria
Consumidor de Notificações

O produtor não precisa conversar diretamente com todos.

Isso reduz acoplamento.

Analogia com MQ

Para um programador COBOL, Kafka pode lembrar alguns princípios de mensageria conhecidos no IBM MQ:

  • produtor;

  • consumidor;

  • desacoplamento;

  • comunicação assíncrona;

  • persistência;

  • reprocessamento;

  • filas ou tópicos;

  • confirmação;

  • tratamento de falhas.

Mas Kafka não é simplesmente “um MQ moderno”.

O Kafka trabalha de maneira muito associada a logs distribuídos, partições, offsets, retenção e processamento de fluxos.

No Kafka, mensagens podem permanecer disponíveis por um período e ser relidas.

Isso permite reconstruir estados, reprocessar eventos e alimentar diferentes consumidores.

O offset como marcador de página

Cada consumidor acompanha até onde leu.

Imagine:

Offset 1001
Offset 1002
Offset 1003
Offset 1004

Se o consumidor parar após o 1003, poderá reiniciar a partir daquele ponto.

É como um checkpoint.

Ou, para o veterano do batch:

“O restart point da investigação.”


10. Stream Processing: investigando enquanto o crime acontece

O processamento em lote analisa fatos acumulados.

O stream processing analisa eventos enquanto eles chegam.

Exemplos:

Usuário iniciou episódio
Usuário pausou
Usuário retrocedeu
Usuário abandonou
Usuário terminou
Usuário iniciou o próximo episódio

Um pipeline em tempo real pode detectar comportamentos:

  • aumento repentino de audiência;

  • falhas em determinada região;

  • vídeos travando em um modelo específico de TV;

  • abandono acima do normal;

  • tentativa de fraude;

  • mudança de interesse;

  • tendência viral.

O sistema não precisa aguardar o batch da madrugada.

Pode reagir imediatamente.

Exemplo operacional

Se milhares de usuários começam a receber erro de reprodução em uma região:

PLAYBACK_ERROR aumentou 800%
REGIÃO = Sudeste
DISPOSITIVO = Smart TV modelo X
VERSÃO = 12.4

O pipeline pode gerar um alerta.

A equipe descobre que uma atualização específica introduziu o defeito.

No CSI New York, isso seria o equivalente a cruzar:

  • horário;

  • localização;

  • tipo de vítima;

  • arma;

  • padrão de ocorrência.

Na observabilidade, cruzamos:

  • timestamp;

  • região;

  • versão;

  • dispositivo;

  • endpoint;

  • código de erro;

  • duração;

  • dependência.

O método científico continua o mesmo.


11. Elasticsearch: a busca no catálogo de evidências

Quando o usuário digita uma palavra, o sistema precisa encontrar rapidamente títulos relacionados.

Uma consulta relacional simples com LIKE pode funcionar em bases pequenas:

SELECT TITULO
  FROM CATALOGO
 WHERE TITULO LIKE '%CONAN%';

Em grandes catálogos, com múltiplos idiomas, erros de digitação, sinônimos e relevância, é útil empregar um mecanismo especializado em pesquisa textual.

O Elasticsearch cria índices que facilitam buscas como:

  • palavras parciais;

  • termos semelhantes;

  • filtros;

  • relevância;

  • categorias;

  • idiomas;

  • combinações de campos.

Se o usuário digitar:

filme barbaro espada

O sistema pode retornar obras relacionadas mesmo que a frase completa não apareça em nenhum título.

Curiosidade forense

Um mecanismo de busca não apenas pergunta:

“Existe correspondência?”

Ele também pergunta:

“Qual correspondência é mais relevante?”

Essa ordenação pode considerar:

  • popularidade;

  • idioma;

  • histórico;

  • região;

  • perfil;

  • proximidade textual;

  • tendências.

Buscar não é apenas localizar.

É classificar evidências.


12. Spark, Hadoop e o laboratório de processamento pesado

Enquanto o streaming analisa dados em movimento, tecnologias de processamento distribuído podem analisar grandes volumes históricos.

O Apache Spark pode ser utilizado em tarefas como:

  • transformação de dados;

  • limpeza;

  • agregação;

  • análise;

  • treinamento de modelos;

  • consolidação de métricas;

  • processamento em larga escala.

Imagine bilhões de eventos de reprodução.

Uma análise pode perguntar:

“Quantos usuários abandonaram episódios entre os minutos 12 e 15 durante os últimos 90 dias?”

Outro estudo:

“Quais tipos de conteúdo são assistidos após documentários científicos?”

Essas perguntas podem exigir processamento de enormes conjuntos de dados.

No universo mainframe, o conceito lembra grandes workloads batch:

ENTRADA MASSIVA
      ↓
CLASSIFICAÇÃO
      ↓
AGREGAÇÃO
      ↓
CÁLCULO
      ↓
SAÍDA ANALÍTICA

A diferença está na forma como o processamento é distribuído entre diversos nós.

O programador COBOL não deve subestimar o batch

Existe uma narrativa equivocada segundo a qual batch é tecnologia ultrapassada.

Não é.

Spark, Hadoop e diversos pipelines modernos executam, em essência, formas sofisticadas de processamento em lote e paralelismo distribuído.

O batch não morreu.

Ele trocou o JCL por YAML, JSON, Python e interfaces web, mas continua acordando de madrugada para processar milhões de registros.

Esse é um dos easter eggs do mundo moderno.


13. Amazon S3 e armazenamento de objetos

O Amazon S3 é um serviço de armazenamento de objetos.

Ele pode armazenar:

  • arquivos;

  • imagens;

  • dados de processamento;

  • logs;

  • backups;

  • artefatos;

  • conteúdo multimídia;

  • resultados analíticos.

É importante não imaginar um “disco C:” gigantesco.

O S3 organiza dados como objetos identificados por chaves.

Exemplo conceitual:

bucket: catalog-assets
key: posters/8732451/pt-BR/main.jpg

O objeto possui:

  • conteúdo;

  • identificador;

  • metadados;

  • permissões;

  • políticas;

  • versionamento opcional.

Para o programador mainframe, podemos comparar conceitualmente o uso de diferentes classes de armazenamento, datasets, políticas de retenção e catálogos. Novamente, a implementação é distinta, mas o princípio de organizar, proteger e recuperar grandes volumes permanece familiar.


14. A entrega do vídeo e a CDN

Um dos pontos mais importantes é separar o backend de controle da entrega efetiva do conteúdo.

O backend decide:

  • quem pode assistir;

  • qual conteúdo;

  • qual perfil;

  • qual qualidade;

  • qual licença;

  • qual localização.

Mas enviar o vídeo para milhões de pessoas exige infraestrutura especializada.

A Netflix desenvolveu a Open Connect, sua própria rede de distribuição de conteúdo.

Servidores podem ser posicionados próximos aos provedores de internet, reduzindo a distância entre o conteúdo e o usuário.

Em vez de cada reprodução atravessar metade do planeta:

Usuário no Brasil
       ↓
Servidor distante
       ↓
Alta latência

O conteúdo pode ser entregue a partir de um ponto mais próximo:

Usuário
   ↓
Provedor local
   ↓
Servidor Open Connect

Isso reduz:

  • latência;

  • congestionamento;

  • custo de trânsito;

  • risco de interrupções;

  • tempo de inicialização.

Analogia da locadora

Imagine uma locadora central em Nova York responsável por atender o mundo inteiro.

Seria impossível entregar cada filme rapidamente.

Uma CDN funciona como uma rede de filiais que mantém cópias dos títulos mais procurados próximas aos clientes.

Quando surge uma estreia popular, o conteúdo pode ser posicionado previamente.

O arquivo chega antes do espectador.

A vítima ainda nem entrou na cena, mas a perícia já preparou o laboratório.


15. Tolerância a falhas: todos são suspeitos

Em ambientes tradicionais, muitas equipes tentam impedir qualquer falha.

Em arquiteturas distribuídas, parte-se de uma premissa diferente:

“Algum componente falhará.”

A pergunta deixa de ser:

“Como garantir que nada falhe?”

E passa a ser:

“Como continuar operando quando algo falhar?”

Isso exige padrões como:

  • timeout;

  • retry controlado;

  • circuit breaker;

  • fallback;

  • redundância;

  • isolamento;

  • filas;

  • replicação;

  • degradação graciosa.

Timeout

Uma chamada não pode esperar para sempre.

Serviço A chama Serviço B
Tempo máximo: 500 ms

Se B não responder, A precisa tomar uma decisão.

Retry

A pode tentar novamente.

Mas retries indiscriminados são perigosos.

Se um serviço já está sobrecarregado, milhares de tentativas extras podem piorar a situação.

É o equivalente a uma multidão tentando abrir a mesma porta emperrada.

Circuit Breaker

O circuit breaker interrompe temporariamente chamadas para um serviço com falhas.

Estados conceituais:

FECHADO
Chamadas permitidas

ABERTO
Chamadas bloqueadas

SEMIABERTO
Algumas chamadas de teste

Isso evita que toda a plataforma continue pressionando um componente doente.

Fallback

Se o serviço de recomendações estiver indisponível, a tela inicial não precisa ficar totalmente vazia.

Pode exibir:

Títulos populares
Continuar assistindo
Novidades

O sistema perde personalização, mas continua funcional.

Isso é degradação graciosa.

Uma falha parcial não precisa se transformar em blackout total.


16. Chaos Monkey: soltando o suspeito dentro do laboratório

Uma das iniciativas mais famosas associadas à engenharia da Netflix foi a prática de testar resiliência por meio de falhas provocadas.

O Chaos Monkey tornou-se símbolo dessa filosofia.

A ideia é desconfortável:

desligar componentes propositalmente para descobrir se o sistema suporta a perda.

Parece loucura.

Mas existe lógica.

Se a arquitetura afirma tolerar a perda de uma instância, é melhor comprovar isso de maneira controlada do que descobrir durante uma estreia global.

É semelhante a:

  • simular disaster recovery;

  • testar restauração de backup;

  • executar exercícios de contingência;

  • remover um nó de um cluster;

  • validar failover;

  • testar um plano de continuidade.

Easter egg CSI

O Chaos Monkey é como um investigador que entra na sala de evidências, apaga uma luz, remove uma câmera e pergunta:

“Vocês ainda conseguem resolver o caso?”

Se a resposta for não, o sistema não era resiliente.

Apenas parecia resiliente enquanto tudo funcionava.


17. Observabilidade: logs não bastam

Em um monólito, um log pode mostrar quase toda a sequência.

Em microserviços, uma única transação atravessa muitos componentes.

Precisamos de três pilares:

  • logs;

  • métricas;

  • traces.

Logs

Mostram eventos detalhados:

2026-07-26 02:17:31
PLAYBACK REQUEST RECEIVED
USER=U92837
TITLE=8732451

Métricas

Mostram comportamentos agregados:

requisições por segundo
latência média
percentil 95
taxa de erro
uso de CPU
memória
fila acumulada

Traces distribuídos

Acompanham uma requisição através de vários serviços.

Exemplo:

TRACE-ID: ABC-92871

Gateway           12 ms
Profile Service   18 ms
Catalog Service   25 ms
Rights Service    40 ms
Playback Service  85 ms

Agora sabemos onde o tempo foi gasto.

Sem trace, cada equipe diria:

“Meu serviço está normal.”

E o usuário continuaria esperando.

A correlação é a impressão digital

Todas as chamadas relacionadas à mesma transação devem carregar um identificador de correlação.

CORRELATION-ID = ABC-92871

Esse código funciona como o número do caso no CSI.

Sem ele, a equipe possui milhares de fragmentos, mas não consegue provar quais pertencem à mesma ocorrência.


18. Segurança: ninguém entra na cena sem credencial

A arquitetura precisa proteger:

  • contas;

  • dados pessoais;

  • pagamentos;

  • conteúdo;

  • licenças;

  • APIs;

  • infraestrutura;

  • segredos;

  • chaves;

  • tokens.

A autenticação responde:

“Quem é você?”

A autorização responde:

“O que você pode fazer?”

Um usuário autenticado pode assistir a determinados conteúdos, mas não pode:

  • alterar o catálogo;

  • consultar dados de outros assinantes;

  • chamar APIs administrativas;

  • acessar segredos;

  • modificar regras de distribuição.

No mundo mainframe, essa mentalidade é profundamente familiar.

O RACF, por exemplo, trabalha com identidades, recursos, perfis e permissões.

Em ambientes distribuídos, a segurança pode envolver:

  • IAM;

  • tokens;

  • OAuth;

  • certificados;

  • TLS;

  • roles;

  • políticas;

  • secrets managers;

  • controle de rede;

  • auditoria.

A regra central permanece:

conceder apenas o acesso necessário.

O nome moderno é “princípio do menor privilégio”.

O mainframe já conhecia essa disciplina antes de ela virar slide de conferência.


19. Passo a passo de uma reprodução

Vamos reconstruir o caso completo.

Passo 1 — O usuário abre o aplicativo

O cliente carrega configurações e estabelece uma conexão segura.

Passo 2 — A requisição chega ao balanceador

O tráfego é direcionado para uma instância saudável do Gateway.

Passo 3 — O Gateway valida a chamada

Ele verifica token, rota, limite e versão da API.

Passo 4 — O perfil é consultado

O serviço de perfil identifica preferências, idioma e classificação.

Passo 5 — O catálogo é analisado

O sistema verifica se o título existe e está disponível naquela região.

Passo 6 — Direitos são validados

Nem todo conteúdo pode ser exibido em todos os países ou períodos.

Passo 7 — A sessão de reprodução é criada

O backend define parâmetros de streaming, dispositivo e qualidade.

Passo 8 — O conteúdo é localizado

O sistema identifica o ponto de distribuição adequado.

Passo 9 — O cliente inicia a reprodução

O vídeo começa a ser entregue adaptativamente.

Passo 10 — Eventos são publicados

PLAYBACK_STARTED

Passo 11 — Consumidores processam o evento

Histórico, analytics, recomendações e monitoramento reagem.

Passo 12 — Métricas são acompanhadas

A plataforma mede travamentos, bitrate, buffering e abandono.

Passo 13 — A qualidade é ajustada

Se a conexão piorar, a resolução pode cair.

Se melhorar, pode subir novamente.

Passo 14 — A sessão termina

O ponto de parada é salvo e um evento final pode ser publicado.

Tudo isso nasce de um botão.


20. O que o programador COBOL deve estudar primeiro

Não tente aprender toda a arquitetura de uma vez.

Siga uma sequência.

1. HTTP e APIs REST

Aprenda:

  • GET;

  • POST;

  • PUT;

  • DELETE;

  • headers;

  • status codes;

  • JSON;

  • autenticação.

2. Comunicação síncrona e assíncrona

Entenda a diferença entre:

esperar a resposta

e:

publicar mensagem e continuar

3. Filas e eventos

Compare conceitos do MQ com Kafka, sem assumir que são idênticos.

4. Cache

Estude:

  • hit;

  • miss;

  • TTL;

  • invalidação;

  • consistência.

5. Escalabilidade

Aprenda a diferença entre:

  • escala vertical;

  • escala horizontal.

Escala vertical:

máquina maior

Escala horizontal:

mais máquinas

6. Observabilidade

Aprenda a interpretar:

  • logs;

  • métricas;

  • traces;

  • dashboards;

  • alertas.

7. Resiliência

Estude:

  • timeout;

  • retry;

  • circuit breaker;

  • fallback;

  • bulkhead.

8. Containers e orquestração

Depois dos fundamentos, avance para Docker e Kubernetes.

Não comece pelo Kubernetes sem entender a aplicação.

Isso seria como estudar JES2 antes de compreender o que é um JOB.


21. Lições que o mundo distribuído pode aprender com o mainframe

A indústria gosta de apresentar microserviços como uma revolução completa.

Mas vários princípios fundamentais já existiam em ambientes corporativos muito antes:

  • processamento transacional;

  • controle de carga;

  • alta disponibilidade;

  • segurança centralizada;

  • recuperação;

  • auditoria;

  • mensageria;

  • monitoramento;

  • isolamento;

  • governança;

  • capacidade de processamento massivo.

O mainframe ensina disciplina.

O mundo distribuído ensina flexibilidade e descentralização.

As melhores arquiteturas aprendem com ambos.

Um profissional COBOL não deve olhar para a Netflix e pensar:

“Tudo que aprendi ficou obsoleto.”

Deve pensar:

“Muitos problemas são conhecidos. O que mudou foi a forma de distribuí-los e tratá-los.”

Um ABEND em um programa batch costuma deixar evidências concentradas:

  • código;

  • dump;

  • joblog;

  • step;

  • dataset;

  • horário.

Uma falha distribuída pode deixar fragmentos em:

  • 15 serviços;

  • 8 logs;

  • 3 regiões;

  • 2 filas;

  • 1 cache;

  • milhares de traces.

A habilidade de investigação torna-se ainda mais importante.


22. Curiosidades encontradas na sala de evidências

Curiosidade 1 — Microserviço não significa programa minúsculo

O tamanho deve refletir uma responsabilidade coerente.

Dividir demais produz “nano-serviços” que aumentam o tráfego e a complexidade.

Curiosidade 2 — Nem tudo precisa ser em tempo real

Muitos relatórios, consolidações e treinamentos de modelos podem ser batch.

Curiosidade 3 — O banco não deve ser tratado como fila

Usar uma tabela para simular mensageria pode funcionar em pequena escala, mas costuma criar bloqueios, consultas repetitivas e problemas operacionais.

Curiosidade 4 — Retry pode duplicar uma transação

Se o cliente envia uma cobrança, recebe timeout e tenta novamente, a primeira tentativa pode ter sido concluída.

Por isso, operações importantes precisam considerar idempotência.

Curiosidade 5 — Idempotência é o antídoto contra o duplo disparo

Uma mesma requisição repetida deve produzir um resultado controlado.

Exemplo:

IDEMPOTENCY-KEY: PAY-20260726-92871

Se a requisição for recebida novamente, o sistema reconhece que já a processou.

Curiosidade 6 — “Eventual consistency” não significa desorganização

Significa que diferentes partes podem levar algum tempo para convergir ao mesmo estado.

Mas esse comportamento precisa ser conhecido, medido e aceito pelo negócio.

Curiosidade 7 — Um sistema pode estar funcionando e ainda assim estar doente

A CPU pode estar normal, mas a latência aumentando.

Os servidores podem estar ativos, mas os caches com baixa taxa de acerto.

As APIs podem responder, mas os eventos podem estar acumulando.

Saúde não é apenas estar ligado.


Conclusão — O caso nunca foi apenas sobre streaming

No final da madrugada, o laboratório havia reconstruído o caminho da requisição.

O atraso não estava no vídeo.

Também não estava no banco.

A investigação encontrou uma cadeia inesperada:

  1. o cliente iniciou a chamada;

  2. o Gateway encaminhou corretamente;

  3. o serviço de perfil respondeu;

  4. o serviço de recomendação chamou uma dependência lenta;

  5. a dependência não possuía timeout adequado;

  6. threads começaram a se acumular;

  7. o balanceador continuou enviando tráfego;

  8. a latência contaminou outras chamadas;

  9. o sistema não caiu;

  10. mas ficou progressivamente mais lento.

O culpado não era um servidor quebrado.

Era uma espera sem limite.

O investigador fechou o relatório.

O programador COBOL olhou novamente para o diagrama.

Agora ele já não via apenas caixas coloridas e setas.

Via:

  • unidades de trabalho;

  • pontos de sincronização;

  • recursos compartilhados;

  • filas;

  • gargalos;

  • contratos;

  • estados;

  • dependências;

  • riscos;

  • evidências.

A arquitetura da Netflix não é importante apenas porque suporta vídeos.

Ela é importante porque demonstra como sistemas modernos podem ser construídos para operar em escala gigantesca, aceitando que máquinas falham, redes atrasam, serviços desaparecem e usuários continuam exigindo respostas imediatas.

Para o programador COBOL iniciante, a maior lição não é aprender nomes sofisticados.

Não é decorar Kafka, Spark, Elasticsearch ou API Gateway.

A verdadeira lição é compreender o fluxo.

Todo sistema recebe algo, valida, processa, consulta, decide, registra e responde.

O mainframe faz isso.

Os microserviços fazem isso.

A diferença está na distribuição das responsabilidades e na quantidade de fronteiras que a transação precisa atravessar.

No mainframe, muitas vezes entramos em um prédio fortificado.

Na arquitetura distribuída, atravessamos uma cidade inteira.

E em uma cidade com milhares de serviços, milhões de mensagens e bilhões de eventos, toda chamada deixa uma impressão digital.

Basta saber onde procurar.

No monitor do laboratório, uma nova ocorrência apareceu:

CASE NY-2026-0726

EVENT:
PLAYBACK_STARTED

STATUS:
PROCESSING

CORRELATION-ID:
BELLACOSA-MAINFRAME-001

O investigador pegou a caneca de café.

O programador abriu o terminal.

Em algum ponto da arquitetura, outra evidência acabava de ser produzida.

E o caso estava apenas começando.

BellacosaFlix Mainframe Developer Collection

Bootcamp DIO · Projeto Front-end

LusoFlix sem Mistérios para Programadores Web

Uma investigação completa sobre HTML, CSS e JavaScript, mostrando como um exercício inspirado na Netflix se transformou em um portal audiovisual de viagens, histórias, castelos e memórias de Portugal.

O que você encontrará nesta investigação

Os principais elementos técnicos analisados no projeto LusoFlix, organizados como uma coleção de episódios para estudantes de desenvolvimento web.

Estrutura

HTML como DATA DIVISION

Elementos semânticos, títulos, navegação, seções, artigos, links, imagens e a organização lógica da página.

Interface

CSS e identidade visual

Variáveis CSS, Flexbox, responsividade, gradientes, cores escuras, botões e aparência inspirada em streaming.

Interatividade

JavaScript e carrosséis

Scripts, bibliotecas externas, navegação horizontal, eventos e recursos capazes de tornar a página dinâmica.

Conteúdo

Memórias de Portugal

Lisboa, Setúbal, castelos, monumentos, igrejas, gastronomia, praias, rios, turismo e vídeos do YouTube.

Artigo completo incorporado

Leia o conteúdo dentro desta página ou utilize o botão de acesso direto caso o navegador bloqueie a incorporação.

Bootcamp DIO Projeto LusoFlix: Programadores Front-end em HTML, CSS e JavaScript

Blogspot

LusoFlix: desenvolvimento web com identidade própria

O LusoFlix nasceu como um projeto de desenvolvimento front-end realizado durante um Bootcamp da DIO. A proposta inicial era recriar uma interface inspirada na página principal da Netflix utilizando HTML, CSS e JavaScript.

Entretanto, o projeto ultrapassou a condição de simples clone. Em vez de reproduzir apenas uma coleção genérica de filmes e séries, o desenvolvedor criou um catálogo audiovisual dedicado a Portugal, reunindo vídeos sobre cidades, turismo, monumentos, história, castelos, praias, igrejas, gastronomia e experiências de viagem.

HTML semântico e organização do conteúdo

O HTML fornece a estrutura lógica da aplicação. Elementos como cabeçalho, navegação, seções, títulos, parágrafos, imagens, botões e links ajudam o navegador a compreender a hierarquia do conteúdo.

Uma estrutura semântica também favorece leitores de tela, tecnologias assistivas e mecanismos de busca, porque descreve a função de cada parte da página de maneira mais clara.

CSS, responsividade e experiência visual

O CSS é responsável pelo visual escuro, pelos destaques vermelhos, pela organização horizontal dos elementos, pelos espaçamentos e pelo comportamento responsivo. Recursos como Flexbox, variáveis CSS, gradientes, transições e media queries permitem adaptar a experiência a computadores, tablets e smartphones.

JavaScript e comportamento dinâmico

O JavaScript permite adicionar interatividade ao projeto. Carrosséis, eventos de clique, filtros, pesquisas, janelas modais e carregamento dinâmico de informações são exemplos de funcionalidades que podem ampliar uma página de catálogo.

Publicação e aprendizagem prática

O projeto demonstra como um exercício acadêmico pode se transformar em um produto pessoal. Ao associar programação, conteúdo autoral e memórias de viagem, o desenvolvedor deixa de apenas reproduzir uma interface e começa a construir uma experiência com identidade própria.

Leia a investigação completa no artigo Bootcamp DIO Projeto LusoFlix: Programadores Front-end em HTML, CSS e JavaScript .

  • LusoFlix
  • HTML5
  • CSS3
  • JavaScript
  • Bootcamp DIO
  • Desenvolvimento Front-end
  • Clone Netflix
  • GitHub Pages
  • Web Design
  • Portugal
  • Programação Web
  • Bellacosa Mainframe
☕ Um Café no Bellacosa Mainframe
HTML, CSS, JavaScript, desenvolvimento front-end, educação tecnológica e memórias de Portugal.
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...