☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

quarta-feira, 8 de junho de 2022

A Bússola de Ouro do System Design — Quando Lyra Entrou no Data Center, Igor Instalou Kubernetes e o Daemon do COBOL Descobriu que Complexidade Também Tem Poeira

 
Bellacosa Mainframe e o kubernetes encontrando o cobol

☕ Um Café no Bellacosa Mainframe

A Bússola de Ouro do System Design — Quando Lyra Entrou no Data Center, Igor Instalou Kubernetes e o Daemon do COBOL Descobriu que Complexidade Também Tem Poeira

Ou: um jovem padawan recebeu um servidor, um monólito e um banco SQL; atravessou a Faca Sutil dos microsserviços, encontrou Kafka entre dois mundos e aprendeu que o verdadeiro arquiteto não é quem instala todas as tecnologias, mas quem sabe quais portas jamais deveriam ser abertas



Prólogo — Há mais de um mundo dentro do data center

Imagine que você é um programador COBOL iniciante caminhando pelos corredores de um grande data center.

De um lado, encontra o mundo aparentemente sólido do mainframe: z/OS, CICS, Db2, IMS, VSAM, JCL, RACF, MQ e toneladas de transações passando silenciosamente por processadores que não precisam aparecer no LinkedIn a cada quinze minutos para provar que estão trabalhando.

Do outro, enxerga o mundo distribuído moderno: APIs, containers, Kubernetes, microsserviços, Redis, Kafka, MongoDB, GraphQL, Terraform, Prometheus, Grafana, service mesh e uma procissão de tecnologias com nomes que parecem demônios, constelações ou grupos de rock progressivo.

Entre esses mundos existe uma espécie de Faca Sutil: a arquitetura de sistemas.

Quando usada com inteligência, ela abre passagens úteis entre plataformas, equipes e aplicações. Quando usada sem experiência, corta fronteiras que deveriam permanecer inteiras, espalha dados por vinte serviços e deixa o operador de produção tentando descobrir em qual universo a transação desapareceu.

É essa a grande mensagem da discussão sobre System Design: a tecnologia moderna não tornou inúteis as soluções antigas. Ela apenas criou novas maneiras de distribuir responsabilidades — e, junto com elas, novas maneiras de distribuir problemas.

A série His Dark Materials, baseada na obra de Philip Pullman, acompanha Lyra Belacqua numa travessia por mundos conectados, autoridades que controlam o conhecimento, instrumentos cuja leitura exige experiência e uma misteriosa substância chamada Pó. A produção protagonizada por Dafne Keen adotou uma atmosfera mais sombria que a adaptação cinematográfica de 2007, contando também com nomes como James McAvoy, Ruth Wilson e Lin-Manuel Miranda. O roteiro ficou sob responsabilidade de Jack Thorne. 

Nossa Lyra, porém, não carregará apenas um aletiômetro.

Ela levará um dump, um diagrama de arquitetura e a recomendação mais importante do velho urso de armadura que trabalha no suporte:

“Antes de instalar qualquer coisa, descubra qual problema está tentando resolver.”



1. O aletiômetro da arquitetura

Em His Dark Materials, o aletiômetro parece uma bússola, mas não aponta simplesmente para o norte. Seus símbolos precisam ser interpretados em diferentes níveis. A pergunta correta é tão importante quanto a leitura do instrumento.

System Design funciona do mesmo modo.

Um arquiteto não começa perguntando:

  • Devemos usar Kubernetes?

  • Devemos criar microsserviços?

  • Kafka ou RabbitMQ?

  • MongoDB ou Cassandra?

  • REST, GraphQL ou gRPC?

  • Quantos clusters devemos criar?

Ele começa perguntando:

  • Qual problema de negócio estamos resolvendo?

  • Quantos usuários utilizarão o sistema?

  • Quantos estarão conectados simultaneamente?

  • Quantas transações ocorrerão por segundo?

  • Qual tempo de resposta é aceitável?

  • Quais dados não podem ser perdidos?

  • Quanto tempo o sistema pode ficar indisponível?

  • Quais partes precisam de consistência imediata?

  • O que acontecerá quando um componente falhar?

  • Quem operará tudo isso às três horas da manhã?

O programador inexperiente olha para o aletiômetro e vê símbolos.

O arquiteto experiente olha para os mesmos símbolos e procura relações.

Da mesma maneira, decorar nomes de tecnologias não transforma ninguém em arquiteto. É necessário compreender os problemas, os limites e os custos ocultos de cada escolha.

Kubernetes não é “melhor” que uma máquina virtual em todas as situações. Kafka não é “melhor” que IBM MQ em todos os fluxos. MongoDB não é uma evolução obrigatória do banco relacional. Microsserviços não representam automaticamente um estágio superior ao monólito.

Tecnologia sem contexto é apenas um símbolo sem interpretação.



2. O primeiro mundo: servidor, monólito e SQL

A caricatura do System Design antigo apresenta uma arquitetura muito simples:

Usuário
   ↓
Balanceador
   ↓
Aplicação monolítica
   ↓
Banco SQL

Essa organização foi — e continua sendo — suficiente para uma enorme quantidade de sistemas.

Em um monólito, os módulos da aplicação são construídos e implantados como uma unidade. Cadastro, pedidos, pagamentos, estoque e relatórios podem estar dentro do mesmo executável ou pacote de implantação.

Isso não significa necessariamente que o sistema seja mal projetado.

Um monólito pode ser:

  • dividido em módulos claros;

  • coberto por testes automatizados;

  • implantado por uma pipeline;

  • executado em várias instâncias;

  • protegido por um balanceador;

  • conectado a um banco replicado;

  • monitorado;

  • seguro;

  • rápido;

  • fácil de compreender.

O problema não é o monólito. O problema é o monólito sem fronteiras internas.

Para o programador COBOL, isso não deveria soar estranho. Um grande sistema COBOL pode ser organizado em:

  • programas principais;

  • subprogramas;

  • copybooks;

  • módulos de validação;

  • rotinas de acesso a dados;

  • componentes batch;

  • transações CICS;

  • chamadas a serviços;

  • filas MQ.

Tudo pode pertencer ao mesmo domínio sem precisar se transformar em cem serviços independentes.

O erro começa quando qualquer programa altera qualquer arquivo, todas as regras são duplicadas e ninguém sabe qual módulo é responsável pela verdade.

Um monólito bem estruturado é como Jordan College: parece uma instituição única vista de fora, mas possui bibliotecas, salões, dormitórios, cozinhas, autoridades e passagens internas com responsabilidades distintas.

Não é necessário transformar cada cômodo em um país soberano.



3. A primeira curiosidade: sistemas antigos nunca foram realmente simples

A ideia de que “antigamente era tudo simples” precisa ser examinada com cuidado.

Muito antes da nuvem, já existiam:

  • processamento distribuído;

  • clusters;

  • replicação;

  • filas;

  • escalonamento de workload;

  • controle de concorrência;

  • recuperação de falhas;

  • sistemas transacionais;

  • alta disponibilidade;

  • processamento paralelo;

  • redes complexas;

  • bancos particionados;

  • datacenters geograficamente separados.

O ecossistema mainframe já resolvia muitos desses problemas com tecnologias integradas.

NecessidadeRecurso no universo mainframe
Transações onlineCICS ou IMS
Banco relacionalDb2
Mensageria confiávelIBM MQ
Segurança centralizadaRACF
Gerenciamento de cargaWLM
Processamento assíncronoJES e batch
Alta disponibilidadeParallel Sysplex
Recuperação geográficaGDPS
Telemetria operacionalSMF, RMF e monitores
Integridade transacionalCommit, rollback e logs

A grande diferença é que parte dessa complexidade ficava escondida dentro de plataformas cuidadosamente integradas.

No mundo cloud-native, a empresa frequentemente monta sua própria plataforma escolhendo componentes separados.

É como se o mainframe entregasse uma grande cidade fortificada, enquanto o mundo distribuído entregasse madeira, pedras, ferramentas, cinquenta projetos open source e um vídeo de vinte minutos chamado “Construa sua cidade em produção sem downtime”.

Ambos podem produzir cidades magníficas.

Mas, no segundo caso, alguém precisa saber construir pontes, muralhas, esgotos e saídas de emergência.



4. A Faca Sutil dos microsserviços

Microsserviços dividem uma aplicação em serviços menores e independentes.

Uma loja digital poderia ser separada em:

  • serviço de clientes;

  • serviço de produtos;

  • serviço de pedidos;

  • serviço de estoque;

  • serviço de pagamentos;

  • serviço de entregas;

  • serviço de notificações.

Em teoria, cada serviço pode ser desenvolvido, implantado e escalado separadamente. Uma equipe altera pagamentos sem precisar republicar todo o sistema.

Parece maravilhoso.

E pode ser.

Mas a Faca Sutil possui dois lados.

Dentro de um monólito, registrar um pedido poderia acontecer numa única transação:

BEGIN;

INSERT INTO PEDIDO ...;
UPDATE ESTOQUE ...;
INSERT INTO PAGAMENTO ...;
INSERT INTO ENTREGA ...;

COMMIT;

Se algo falhar, executamos ROLLBACK.

Agora imagine que cada tabela pertence a um serviço e a um banco diferente.

O serviço de pedidos grava o pedido. O estoque reserva o produto. O pagamento autoriza o cartão. Entretanto, o serviço de entrega está indisponível.

O que devemos fazer?

  • Cancelar o pedido?

  • Liberar o estoque?

  • Estornar o pagamento?

  • Tentar a entrega novamente?

  • Aguardar numa fila?

  • Marcar a operação como incompleta?

  • Quem coordena tudo?

  • Como o suporte descobre o estado verdadeiro?

A transação local simples foi transformada num fluxo distribuído.

Podemos usar uma saga, na qual cada etapa possui uma ação compensatória:

Criar pedido
   ↓
Reservar estoque
   ↓
Autorizar pagamento
   ↓
Criar entrega

Se a criação da entrega falhar:

Cancelar autorização
   ↓
Liberar estoque
   ↓
Cancelar pedido

Porém, compensar não é voltar no tempo.

Se um e-mail de confirmação já foi enviado, não conseguimos “desenviá-lo”. Se o pagamento foi registrado numa rede externa, o estorno pode demorar. Se o último produto foi liberado, outro cliente pode comprá-lo antes da repetição.

Ao separar os serviços, não eliminamos a complexidade. Nós a transportamos para a rede.

Esse é um dos grandes easter eggs da arquitetura distribuída: toda porta aberta entre dois mundos cria também uma fronteira que precisa ser vigiada.



5. Os daemons e as responsabilidades dos serviços

Em His Dark Materials, cada pessoa possui um daemon, uma manifestação externa ligada à sua natureza. A distância entre ambos possui consequências.

Uma aplicação também possui extensões que revelam sua natureza:

  • banco de dados;

  • cache;

  • fila;

  • métricas;

  • logs;

  • certificados;

  • contratos de API;

  • arquivos de configuração;

  • políticas de segurança.

O erro é tratar esses componentes como criaturas independentes que podem ser abandonadas no ambiente.

Um microsserviço não é apenas seu código. Ele inclui tudo o que é necessário para que funcione e seja operado:

  • proprietário responsável;

  • pipeline de implantação;

  • banco ou armazenamento;

  • monitoramento;

  • alertas;

  • documentação;

  • política de backup;

  • estratégia de recuperação;

  • controle de versão da API;

  • tratamento de falhas;

  • limites de capacidade.

Se uma equipe cria quarenta serviços, criou também quarenta conjuntos de responsabilidades.

A pergunta não é apenas “conseguimos desenvolver?”.

É:

“Conseguimos viver com eles?”



6. Docker e Kubernetes: a armadura de Iorek Byrnison

Docker empacota a aplicação com suas dependências num container. Isso ajuda a reduzir o clássico incidente:

“Na minha máquina funciona.”

O container oferece um ambiente reproduzível. A mesma imagem pode ser executada no notebook, no teste e na produção, respeitadas as diferenças de configuração.

Mas containers precisam ser:

  • distribuídos;

  • iniciados;

  • reiniciados;

  • atualizados;

  • conectados;

  • monitorados;

  • limitados em CPU e memória;

  • protegidos;

  • substituídos quando falham.

É aí que Kubernetes entra.

Kubernetes funciona como uma grande estrutura de orquestração. Ele agenda containers, monitora sua execução, mantém o número desejado de réplicas e coordena atualizações.

Mas Kubernetes é uma armadura, não um urso.

A armadura de Iorek Byrnison amplia sua proteção, porém não substitui sua inteligência, experiência ou vontade. Da mesma maneira, Kubernetes não transforma automaticamente uma aplicação ruim em aplicação resiliente.

Ele pode:

  • reiniciar rapidamente um programa defeituoso;

  • criar vinte cópias de um serviço que sobrecarrega o banco;

  • distribuir uma configuração incorreta para o cluster inteiro;

  • declarar um container “vivo” enquanto o negócio está paralisado;

  • aumentar custos ao escalar pelo indicador errado.

Há uma diferença essencial entre:

O processo responde à verificação técnica.

e:

O cliente consegue concluir uma compra corretamente.

O primeiro é um teste de vitalidade.

O segundo exige compreender a saúde do negócio.

Dica do velho urso: se sua empresa possui duas aplicações simples, quatro desenvolvedores e nenhuma equipe de plataforma, talvez uma máquina virtual bem automatizada ou um serviço gerenciado seja mais apropriado que um cluster Kubernetes.

Não construa uma fortaleza no Ártico para guardar uma bicicleta.



7. Bancos de dados: diferentes mundos não obedecem às mesmas leis

PostgreSQL, MongoDB, Cassandra, Redis e Elasticsearch aparecem frequentemente no mesmo diagrama, como se uma arquitetura moderna precisasse coletar todos eles.

Não precisa.

PostgreSQL

É uma excelente escolha geral para sistemas que precisam de:

  • transações;

  • integridade;

  • relacionamentos;

  • SQL;

  • consultas variadas;

  • consistência.

Para enorme quantidade de projetos, começar com um banco relacional continua sendo sensato.

MongoDB

Armazena documentos e pode ser adequado quando os dados são naturalmente tratados como agregados, com estruturas flexíveis.

Mas “flexível” não significa “sem regra”. Se o banco não impõe parte do esquema, a aplicação precisa fazê-lo.

Cassandra

Foi criada para grande distribuição, alta disponibilidade e volumes expressivos de escrita. Sua modelagem começa pelas consultas que serão realizadas.

Não é um PostgreSQL com logotipo diferente.

Redis

Mantém estruturas rápidas em memória e é excelente para:

  • cache;

  • sessões;

  • contadores;

  • informações temporárias;

  • limitação de taxa;

  • coordenação simples.

Entretanto, velocidade não transforma automaticamente Redis no lugar correto para guardar a verdade financeira.

Elasticsearch

É poderoso para pesquisa textual, indexação e análise. Pode ser fantástico como mecanismo de busca e perigoso quando tratado descuidadamente como banco transacional principal.

Cada banco é um mundo com leis físicas diferentes.

A pergunta correta não é “qual está na moda?”, mas:

  • Como os dados serão consultados?

  • Precisamos de transações?

  • Qual volume será escrito?

  • Podemos tolerar dados temporariamente desatualizados?

  • Como faremos backup?

  • Quanto custará restaurar?

  • Nossa equipe sabe operar esse produto?

Backup não é o arquivo que o job afirma ter produzido.

Backup é aquilo que já demonstramos ser capaz de restaurar.



8. Redis e o Pó do cache

Cache guarda temporariamente dados utilizados com frequência.

Se milhares de pessoas consultam o mesmo produto, talvez não seja necessário buscar a informação no banco todas as vezes. Podemos armazená-la em Redis, numa CDN, no navegador ou na memória da aplicação.

Isso melhora o desempenho e reduz a carga.

Mas o cache, como o misterioso Pó, parece simples até começarmos a observar seu comportamento.

Quando o preço muda, como removemos a versão antiga?

Podemos utilizar:

  • prazo de expiração;

  • invalidação explícita;

  • atualização por evento;

  • política de escrita simultânea;

  • carregamento sob demanda.

Suponha que um produto custe R$100 e permaneça no cache durante uma hora. O banco é atualizado para R$80, mas o cache continua exibindo R$100.

O sistema está rápido.

E errado.

Em outro cenário, a promoção termina, mas o cache continua mostrando R$80. Agora o sistema está rápido, errado e juridicamente interessante.

Cache não é apenas desempenho. É uma negociação sobre por quanto tempo aceitamos que uma cópia fique desatualizada.



9. Kafka, RabbitMQ e as mensagens entre os mundos

Mensageria permite desacoplar produtores e consumidores.

O programa que produz uma informação não precisa esperar que todos os interessados terminem seu trabalho.

RabbitMQ

Funciona muito bem para:

  • filas de tarefas;

  • roteamento;

  • distribuição de trabalho;

  • confirmação de consumo;

  • entrega de mensagens.

Kafka

Funciona como um log distribuído e durável. Os eventos permanecem registrados por determinado período, permitindo que diferentes consumidores leiam e releiam o histórico.

Um evento chamado:

PAGAMENTO_AUTORIZADO

pode interessar a:

  • contabilidade;

  • antifraude;

  • programa de fidelidade;

  • notificações;

  • relatórios;

  • auditoria.

O produtor publica uma vez. Cada consumidor avança em seu próprio ritmo.

Mas surgem perguntas:

  • As mensagens precisam manter ordem?

  • Qual será a chave de particionamento?

  • O que acontecerá se o consumidor processar duas vezes?

  • Como mudaremos o formato do evento?

  • Quanto tempo o histórico ficará armazenado?

  • Como reprocessaremos milhões de eventos?

  • O que faremos com uma mensagem que sempre provoca erro?

Para um programador COBOL, IBM MQ oferece uma ponte conceitual importante. Colocar uma mensagem numa fila dentro da mesma unidade de trabalho permite coordenar banco e mensageria com garantias transacionais robustas.

O nome das ferramentas muda. A pergunta permanece:

“Como garantir que o trabalho não desapareça e não seja executado incorretamente duas vezes?”



10. O espectro do retry

Imagine que o sistema envie uma solicitação para cobrar R$500.

O serviço de pagamentos executa a cobrança, mas sua resposta se perde na rede.

O programa chamador recebe timeout.

Ele não sabe se o pagamento falhou. Sabe apenas que não recebeu uma resposta no prazo.

Igor decide tentar novamente.

O cliente é cobrado duas vezes.

Esse incidente ensina uma diferença vital:

Não recebi confirmação.

não significa:

A operação não aconteceu.

Operações críticas precisam ser idempotentes. Isso significa que repetir a mesma solicitação não deve repetir seu efeito.

Uma solução é enviar uma chave única:

IDEMPOTENCY-KEY: PEDIDO-2026-000184

O serviço verifica se essa operação já foi processada. Se já foi, retorna o resultado anterior sem cobrar novamente.

Retries também precisam de:

  • limite;

  • intervalo crescente;

  • jitter;

  • timeout total;

  • circuit breaker;

  • fila de exceção;

  • reconciliação.

Sem controle, retries viram espectros: quanto mais o sistema sofre, mais requisições retornam para assombrá-lo.



11. Consistência: uma verdade pode chegar atrasada?

Nem todos os dados precisam estar atualizados no mesmo instante.

Uma contagem de visualizações pode aparecer alguns segundos depois. Um ranking pode ser recalculado a cada minuto.

Mas alguns dados exigem decisão imediata:

  • saldo bancário;

  • limite de crédito;

  • último assento disponível;

  • alteração de senha;

  • autorização de pagamento;

  • concessão de permissão;

  • estoque de um item único.

Se duas pessoas tentarem comprar o último ingresso, o sistema precisa impedir que ambas se tornem proprietárias do mesmo assento.

Isso é consistência forte.

Já a consistência eventual aceita que diferentes cópias se alinhem depois de algum tempo.

O erro está nos extremos:

  • exigir consistência forte para tudo, sacrificando desempenho e disponibilidade;

  • aceitar consistência eventual onde o negócio exige uma única verdade imediata.

No mundo distribuído, às vezes dois observadores enxergam estados diferentes. A arquitetura precisa determinar quando isso é aceitável e quando representa um ABEND do negócio.



12. Observabilidade: o aletiômetro de produção

Num monólito, seguir uma operação costuma ser relativamente direto.

Num ambiente distribuído, uma requisição pode atravessar:

API Gateway
   ↓
Serviço de Pedidos
   ↓
Serviço de Clientes
   ↓
Serviço de Estoque
   ↓
Serviço de Pagamentos
   ↓
Antifraude externo

Se a resposta demorar oito segundos, onde está o problema?

Pode ser:

  • DNS;

  • rede;

  • certificado;

  • pool de conexões;

  • banco;

  • fila;

  • retry;

  • lock;

  • serviço externo;

  • falta de CPU;

  • pausa de garbage collection.

Por isso precisamos de observabilidade.

Métricas

Mostram números ao longo do tempo:

  • CPU;

  • memória;

  • latência;

  • erros;

  • filas;

  • transações por segundo.

Logs

Registram eventos específicos:

  • pedido recebido;

  • pagamento negado;

  • exceção;

  • timeout;

  • usuário autenticado.

Traces

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

Perfis

Mostram onde o programa consome CPU, memória ou tempo.

Prometheus coleta métricas. Grafana as apresenta. Ferramentas de tracing acompanham operações distribuídas.

Mas uma parede com cinquenta dashboards não significa que alguém compreenda o sistema.

Um bom painel responde a perguntas operacionais. Um bom alerta exige ação. Um log útil contém contexto suficiente para investigação.

O aletiômetro de produção só funciona quando sabemos formular a pergunta.



13. Sharding: cortar o banco com a Faca Sutil

Sharding divide os dados entre servidores.

Por exemplo:

Clientes A–F → Shard 1
Clientes G–M → Shard 2
Clientes N–Z → Shard 3

Ou:

SHARD = HASH(CLIENTE-ID) MOD 4

Isso pode permitir que o sistema armazene e processe mais dados do que um único servidor comportaria.

Mas surgem novos desafios:

  • consultas entre shards;

  • transações distribuídas;

  • rebalanceamento;

  • clientes concentrados num único shard;

  • relatórios globais;

  • restauração;

  • mudança da quantidade de shards.

Antes de aplicar sharding, verifique:

  1. As consultas possuem índices corretos?

  2. Existem leituras desnecessárias?

  3. Dados históricos podem ser arquivados?

  4. O banco pode crescer verticalmente?

  5. Réplicas de leitura ajudariam?

  6. Cache reduziria a pressão?

  7. Particionamento interno seria suficiente?

  8. O gargalo foi realmente medido?

Sharding prematuro é usar a Faca Sutil para abrir uma passagem antes de saber o que existe do outro lado.


14. Auto scaling e o exército que chega tarde

Auto scaling cria ou remove instâncias conforme a carga.

Parece simples:

CPU alta → criar servidores
CPU baixa → remover servidores

Entretanto, a CPU talvez não represente o problema real.

Um consumidor pode ter CPU baixa e milhões de mensagens atrasadas. Uma aplicação pode aumentar para cinquenta réplicas e criar dez mil conexões contra o mesmo banco.

A camada da aplicação cresce, mas o banco continua único.

O gargalo apenas muda de endereço.

Métricas melhores podem incluir:

  • tamanho da fila;

  • atraso do consumidor;

  • requisições por segundo;

  • latência;

  • número de workers ocupados;

  • conexões disponíveis;

  • tempo restante para cumprir um SLA.

Escalar também leva tempo. Se uma instância demora cinco minutos para inicializar, talvez chegue depois do pico.

Auto scaling não cria capacidade infinita. Ele administra capacidade disponível dentro de limites técnicos e financeiros.



15. Disponibilidade e o preço dos noves

Dizer “o sistema precisa ficar sempre disponível” é fácil.

Transformar isso num requisito mensurável é mais difícil.

Aproximadamente:

DisponibilidadeIndisponibilidade mensal permitida
99%7 horas e 18 minutos
99,9%43 minutos
99,99%4 minutos e 23 segundos
99,999%26 segundos

Cada nove adicional exige investimentos em:

  • redundância;

  • replicação;

  • automação;

  • testes;

  • failover;

  • observabilidade;

  • pessoas;

  • recuperação;

  • eliminação de pontos únicos de falha.

Duas instâncias não garantem alta disponibilidade se ambas dependem:

  • do mesmo banco;

  • da mesma região;

  • do mesmo provedor;

  • do mesmo certificado;

  • da mesma configuração defeituosa.

Dois mundos podem cair juntos quando a mesma autoridade controla os dois.

Eis outro easter egg do Magisterium: centralizar poder pode simplificar a administração, mas também amplia o impacto de uma decisão errada.



16. Passo a passo do jovem padawan COBOL

Ao receber um novo projeto, não comece desenhando trinta caixas.

Passo 1 — Entenda o negócio

Descubra:

  • quem usa;

  • qual problema resolve;

  • quais operações são críticas;

  • quanto custa uma falha;

  • quais leis e auditorias se aplicam.

Passo 2 — Estime a carga

Calcule:

  • usuários ativos;

  • simultaneidade;

  • transações por segundo;

  • picos;

  • tamanho dos dados;

  • crescimento.

Passo 3 — Classifique os dados

Pergunte:

  • Qual é a fonte da verdade?

  • O que exige transação?

  • O que pode ser cacheado?

  • O que pode ficar temporariamente desatualizado?

  • Por quanto tempo deve ser preservado?

Passo 4 — Desenhe a solução mínima

Comece, se possível, com:

  • aplicação modular;

  • banco relacional;

  • balanceamento;

  • armazenamento de objetos;

  • backup;

  • monitoramento.

Passo 5 — Identifique gargalos reais

Meça antes de otimizar:

  • CPU;

  • memória;

  • I/O;

  • locks;

  • consultas lentas;

  • conexões;

  • filas;

  • latência externa.

Passo 6 — Adicione componentes por evidência

Use cache quando houver leituras repetidas.

Use fila quando o trabalho puder ser assíncrono.

Extraia um microsserviço quando houver fronteira clara e necessidade de independência.

Use Kubernetes quando o volume de workloads justificar uma plataforma.

Aplique sharding quando um banco corretamente otimizado realmente atingir seus limites.

Passo 7 — Projete a falha

Para cada componente, pergunte:

“O que acontece quando ele para?”

Depois pergunte:

“Como descobriremos?”

E finalmente:

“Como recuperaremos?”

Passo 8 — Teste a recuperação

Restaure backups.

Simule indisponibilidade.

Valide timeouts.

Interrompa consumidores.

Teste mensagens duplicadas.

Confirme que os procedimentos funcionam sem depender da memória de Igor.

Passo 9 — Documente decisões

Registre:

  • contexto;

  • alternativas;

  • decisão;

  • motivos;

  • riscos;

  • momento de revisão.

Passo 10 — Preserve o direito de simplificar

Arquitetura também é remoção.

Se um componente deixou de justificar seu custo, aposente-o.



17. Curiosidades escondidas entre os mundos

“Daemon” já existia na computação

Em sistemas Unix, um daemon é um processo executado em segundo plano, frequentemente prestando algum serviço. O termo ganhou uso computacional muito antes da série televisiva e possui raízes conceituais distintas dos companheiros animais de Pullman.

Portanto, se o sysadmin disser que “o daemon morreu”, não procure um animal ferido no corredor. Consulte o log.

Muitos conceitos modernos são antigos com novas interfaces

Filas, isolamento, escalonamento, replicação, controle de acesso e telemetria não nasceram na era dos containers.

A inovação frequentemente está na maneira como esses recursos são empacotados, automatizados, distribuídos e consumidos.

O monólito pode escalar horizontalmente

Monólito não significa servidor único. Se a aplicação for adequadamente projetada, múltiplas instâncias podem atender usuários através de um balanceador.

A rede sempre pode falhar

Dentro do mesmo processo, uma chamada de função é relativamente previsível. Entre serviços, precisamos considerar:

  • latência;

  • perda;

  • duplicação;

  • timeout;

  • indisponibilidade;

  • respostas fora de ordem.

Toda chamada remota é uma aposta controlada.

“Exatamente uma vez” precisa de contexto

Sistemas reais costumam combinar entrega, persistência e idempotência para produzir o efeito de negócio desejado.

Confiar apenas num slogan de “exactly once” é perigoso. O mundo externo — cartão, e-mail, transportadora — talvez não participe da mesma garantia.



Epílogo — A autoridade tentou proibir a simplicidade

No fim da viagem, Lyra Bellacosa chega à sala principal da arquitetura.

Sobre a mesa estão:

  • API Gateway;

  • CDN;

  • Kubernetes;

  • service mesh;

  • Redis;

  • PostgreSQL;

  • MongoDB;

  • Cassandra;

  • Kafka;

  • RabbitMQ;

  • gRPC;

  • WebSockets;

  • GraphQL;

  • Elasticsearch;

  • Terraform;

  • Prometheus;

  • Grafana.

Igor sorri e pergunta:

— Instalamos tudo?

O daemon do COBOL observa o diagrama, consulta o aletiômetro e responde:

— Quantos usuários?

Igor hesita:

— Cento e vinte.

— Quantas transações por segundo?

— Talvez três.

— Quantas pessoas na equipe?

— Quatro, contando o estagiário que ainda não recebeu acesso.

O velho urso de armadura fecha a caixa de ferramentas.

A equipe escolhe uma aplicação modular, PostgreSQL, armazenamento de objetos, backup testado, métricas básicas e uma pipeline de implantação.

Não porque desconhece o restante.

Mas porque conhece.

Essa é a diferença entre simplicidade e ignorância. O ignorante usa pouco porque não conhece alternativas. O arquiteto maduro usa pouco porque compreende o preço das alternativas.

System Design não é uma competição para preencher diagramas.

É a disciplina de escolher a quantidade de complexidade que o problema merece — nem menos, deixando riscos escondidos, nem mais, criando uma máquina que ninguém consegue operar.

O programador COBOL iniciante não precisa temer o mundo moderno. Grande parte dele responde às mesmas perguntas que CICS, Db2, MQ, RACF, WLM e os sistemas transacionais enfrentam há décadas:

  • Como receber trabalho?

  • Como proteger dados?

  • Como coordenar operações?

  • Como suportar falhas?

  • Como recuperar?

  • Como provar o que aconteceu?

  • Como crescer sem destruir o que já funciona?

Mudam os nomes. Mudam as interfaces. Mudam os mapas.

As leis fundamentais continuam reconhecíveis.

E, quando alguém apresentar uma arquitetura com quarenta componentes para resolver um problema que ainda não possui quarenta usuários, segure firmemente sua Bússola de Ouro e faça a pergunta que atravessa todos os mundos:

“Qual problema real justifica cada uma dessas caixas?”

Se ninguém souber responder, não estamos diante de arquitetura.

Estamos diante de uma coleção de tecnologias vestida com uma armadura que não lhe pertence.





terça-feira, 7 de junho de 2022

O Que Todo Programador COBOL Padawan Precisa Saber Sobre Estratégia, Poder, Longevidade e a Verdadeira Razão Para Aprender COBOL no Século XXI

 

Bellacosa Mainframe e a arte da guerra do cobol

☕ Um Café no Bellacosa Mainframe

A Arte da Guerra do COBOL

O Que Todo Programador COBOL Padawan Precisa Saber Sobre Estratégia, Poder, Longevidade e a Verdadeira Razão Para Aprender COBOL no Século XXI

"Você não está apenas aprendendo uma linguagem de programação. Está estudando uma estratégia de sobrevivência tecnológica que venceu praticamente todas as guerras da computação corporativa."


Introdução

Existe um erro que se repete geração após geração.

Todo jovem programador olha para COBOL e enxerga apenas sua idade.

Os profissionais mais experientes olham para COBOL e enxergam algo completamente diferente: poder.

A diferença entre essas duas visões é a mesma diferença entre um soldado que observa apenas o campo de batalha e um estrategista que compreende toda a guerra.

Embora muitas pessoas associem essa visão estratégica ao livro A Arte da Guerra, de Sun Tzu, e outras às lições de poder político de O Príncipe, de Nicolau Maquiavel, ambos compartilham uma ideia fundamental:

Os vencedores não são os mais rápidos.

São aqueles que permanecem indispensáveis.

Se existisse um reino da computação, COBOL seria um dos monarcas mais antigos ainda em exercício.

Enquanto linguagens surgem, tornam-se moda e desaparecem poucos anos depois, COBOL continua governando silenciosamente bancos, seguradoras, bolsas de valores, governos, empresas aéreas, hospitais e praticamente toda infraestrutura financeira do planeta.

A pergunta correta nunca foi:

"Por que COBOL ainda existe?"

A pergunta correta é:

"Como ele conseguiu vencer todas essas guerras?"


A primeira lição: sobreviver vale mais do que impressionar

O mercado de tecnologia adora novidades.

A cada ano aparecem dezenas de novas linguagens.

Novos frameworks.

Novos bancos de dados.

Novos paradigmas.

Novos slogans.

A maioria desaparece antes de completar dez anos.

COBOL atravessou:

  • Guerra Fria

  • Mainframes dos anos 60

  • Minicomputadores

  • PCs

  • Cliente/Servidor

  • Internet

  • E-commerce

  • Smartphones

  • Cloud Computing

  • Containers

  • Kubernetes

  • Inteligência Artificial

  • Computação Quântica (em desenvolvimento)

Enquanto isso...

Ele continua executando milhões de transações por segundo.

Não porque seja "bonito".

Mas porque resolve um problema extremamente importante:

processar negócios sem falhar.


A segunda lição: quem controla o dinheiro controla o reino

Existe uma curiosidade fascinante.

Quando alguém compra um café usando cartão...

Quando recebe salário...

Quando paga um boleto...

Quando faz PIX...

Quando recebe aposentadoria...

Quando compra um seguro...

Existe uma probabilidade enorme de alguma parte dessa operação passar por um programa COBOL.

Não porque ninguém conseguiu substituí-lo.

Mas porque substituí-lo custa bilhões.

E pior.

Pode colocar em risco operações críticas.

Imagine um banco que movimenta centenas de bilhões diariamente.

Você trocaria todo o motor apenas porque existe um mais moderno?

Provavelmente não.

Você melhora.

Moderniza.

Integra.

Mas preserva aquilo que funciona.

É exatamente isso que o mundo faz com COBOL.


A terceira lição: estabilidade vence velocidade

O mercado costuma idolatrar velocidade.

No entanto...

Empresas gigantes valorizam outra palavra:

previsibilidade.

Um sistema que funciona durante trinta anos possui algo que poucos conseguem construir:

confiança.

COBOL foi criado para processar negócios.

E negócios não aceitam improviso.

Imagine um sistema bancário dizendo:

"Hoje o saldo apareceu errado porque atualizamos o framework."

Isso seria impensável.

A estabilidade do Mainframe existe porque décadas de engenharia foram acumuladas.

Nada ali acontece por acaso.


A quarta lição: a invisibilidade é uma vantagem

Existe um fenômeno curioso.

Quanto melhor um sistema corporativo funciona...

Menos as pessoas sabem que ele existe.

Ninguém posta nas redes sociais:

"Meu banco funcionou perfeitamente hoje."

Mas basta um minuto de indisponibilidade...

Todos percebem.

O maior elogio para um sistema Mainframe é justamente este:

ninguém lembra dele.

Porque tudo funciona.

COBOL vive exatamente nessa posição.

É invisível para o público.

Indispensável para o mundo.


A quinta lição: o verdadeiro poder está na integração

Muitos imaginam que COBOL vive isolado.

Isso deixou de ser verdade há muito tempo.

Hoje encontramos aplicações COBOL conversando com:

  • APIs REST

  • JSON

  • XML

  • Java

  • Python

  • Kafka

  • IBM MQ

  • Kubernetes

  • OpenShift

  • Docker

  • z/OS Connect

  • Inteligência Artificial

  • Watsonx

  • LLMs

  • Agentes Inteligentes

O COBOL moderno não compete com essas tecnologias.

Ele coopera.

Enquanto a IA interpreta documentos...

O COBOL continua sendo responsável por registrar oficialmente a transação.

Cada tecnologia faz aquilo em que é melhor.


A sexta lição: experiência vale ouro

Existe uma enorme diferença entre escrever software e administrar risco.

Um programador iniciante costuma perguntar:

"Como faço isso funcionar?"

Um arquiteto pergunta:

"Como isso continuará funcionando daqui a vinte anos?"

Essa mudança de perspectiva transforma carreiras.

COBOL ensina justamente isso.

Quem trabalha em Mainframe aprende naturalmente conceitos como:

  • continuidade de negócios;

  • auditoria;

  • rastreabilidade;

  • recuperação de falhas;

  • segurança;

  • disponibilidade;

  • integridade de dados;

  • consistência transacional.

São princípios que permanecem válidos independentemente da linguagem utilizada.


A sétima lição: a escassez cria valor

Há algumas décadas muitos acreditaram que COBOL desapareceria.

Então ocorreu um efeito inesperado.

As universidades deixaram de ensiná-lo.

Os profissionais aposentaram-se.

Mas os sistemas permaneceram.

Resultado?

A demanda continuou.

A oferta diminuiu.

Na economia existe uma regra simples.

Quanto menor a oferta de especialistas em algo indispensável...

Maior tende a ser seu valor.

Essa é uma das razões pelas quais profissionais experientes em Mainframe continuam sendo altamente procurados em diversos países.


A oitava lição: COBOL ensina arquitetura

Aprender COBOL não significa aprender apenas uma linguagem.

Significa compreender:

  • processamento batch;

  • processamento online;

  • filas;

  • controle transacional;

  • arquivos VSAM;

  • bancos relacionais;

  • mensagens;

  • escalabilidade vertical;

  • gerenciamento de recursos;

  • consistência de dados.

São conceitos utilizados inclusive em arquiteturas modernas distribuídas.

Muitos princípios presentes nos microsserviços já existiam, sob outras formas, no universo Mainframe.

A tecnologia mudou.

Os fundamentos continuam.


A nona lição: inteligência artificial precisa de dados confiáveis

Vivemos a era da IA.

Mas existe um detalhe frequentemente ignorado.

Uma Inteligência Artificial é tão boa quanto os dados que recebe.

E onde estão alguns dos dados corporativos mais confiáveis do planeta?

Nos Mainframes.

Décadas de históricos financeiros.

Registros fiscais.

Seguros.

Previdência.

Operações bancárias.

Cadastros governamentais.

A IA não substitui esse patrimônio.

Ela depende dele.

No futuro, veremos cada vez mais agentes inteligentes consultando sistemas COBOL por meio de APIs, eventos e integrações.

O Mainframe deixa de ser apenas um sistema operacional.

Torna-se uma fonte de conhecimento corporativo.


A décima lição: aprender COBOL muda a forma de pensar

Talvez o maior benefício não seja profissional.

Seja intelectual.

COBOL obriga o programador a pensar antes de escrever.

A modelar processos.

A compreender regras de negócio.

A conversar com analistas.

A entender contabilidade.

Seguros.

Logística.

Folha de pagamento.

Tributação.

Você deixa de programar computadores.

Passa a compreender empresas.

Essa habilidade acompanha o profissional por toda a carreira.


O erro que muitos cometem

Existe uma falsa dicotomia.

Alguns acreditam que precisam escolher entre:

  • COBOL ou Python;

  • COBOL ou Java;

  • COBOL ou IA.

Essa disputa simplesmente não existe.

O mercado moderno procura profissionais híbridos.

Alguém capaz de entender um sistema legado...

Criar APIs...

Consumir serviços em Python...

Utilizar modelos de IA...

Integrar tudo isso com segurança.

O profissional mais valioso não é aquele que conhece apenas uma tecnologia.

É aquele que consegue conectar gerações de tecnologia.


O verdadeiro significado do Mainframe

Muitas pessoas imaginam que Mainframe significa apenas um computador grande.

Na realidade, Mainframe representa uma filosofia de engenharia.

Uma filosofia baseada em cinco princípios:

  • disponibilidade contínua;

  • segurança;

  • confiabilidade;

  • processamento massivo;

  • continuidade operacional.

Esses valores continuam mais atuais do que nunca.

Principalmente em um mundo onde milhões de transações acontecem por segundo.


A maior guerra nunca foi tecnológica

Ao longo da história da computação, inúmeras linguagens desapareceram.

Não porque fossem ruins.

Mas porque perderam relevância econômica.

COBOL permaneceu porque sempre esteve conectado ao coração dos negócios.

Ele nunca dependeu da moda.

Dependeu da necessidade.

E necessidades essenciais raramente desaparecem.


O Programador Padawan e o Estrategista

No Bellacosa Mainframe gostamos de dizer que existe uma diferença entre aprender comandos e compreender sistemas.

O Padawan aprende a escrever um programa.

O estrategista aprende por que aquele programa existe.

Quando você entende a regra de negócio por trás de um processamento bancário, de uma folha de pagamento ou de um sistema de seguros, percebe que o código é apenas a parte visível de algo muito maior.

É nesse momento que COBOL deixa de parecer uma linguagem antiga e passa a revelar sua verdadeira natureza: um repositório vivo de décadas de conhecimento empresarial.

Cada programa carrega decisões tomadas por analistas, arquitetos e especialistas que resolveram problemas reais para milhões de pessoas. Estudar esse código é, muitas vezes, estudar a história da própria empresa.


O Futuro Não Elimina o Passado

A Inteligência Artificial, os LLMs, os agentes autônomos e as arquiteturas em nuvem transformarão profundamente a engenharia de software.

Mas eles não apagarão o conhecimento acumulado.

Farão exatamente o contrário.

Irão potencializá-lo.

O profissional do século XXI será aquele que souber conversar tanto com um modelo de IA quanto com um sistema COBOL executando no IBM Z.

Será capaz de entender um prompt e também um JCL.

Interpretará um JSON e um copybook.

Consumirá APIs REST e compreenderá uma transação CICS.

Esse profissional será raro.

E profissionais raros constroem carreiras extraordinárias.


Conclusão

Sun Tzu ensinava que a maior vitória é aquela conquistada antes mesmo da batalha começar.

Maquiavel mostrava que o governante duradouro não depende apenas da força, mas da capacidade de preservar poder, adaptar-se às mudanças e manter a confiança de seu povo.

COBOL fez exatamente isso.

Não venceu por ser a linguagem mais elegante.

Nem a mais rápida.

Nem a mais popular.

Venceu porque se tornou indispensável.

Enquanto bilhões de transações continuarem exigindo segurança, consistência e disponibilidade, haverá espaço para profissionais capazes de compreender esse universo.

Por isso, aprender COBOL no século XXI não é olhar para trás.

É entender os alicerces sobre os quais o futuro continuará sendo construído.

Porque tecnologias passam.

Frameworks mudam.

Linguagens entram e saem de moda.

Mas sistemas críticos, conhecimento de negócio e engenharia de alta confiabilidade permanecem.

E é exatamente nesse território que o Mainframe continua reinando.

No Bellacosa Mainframe, acreditamos que formar um Programador COBOL Padawan não significa ensinar apenas sintaxe. Significa formar estrategistas capazes de unir tradição e inovação, legado e inteligência artificial, estabilidade e transformação digital.

Afinal, no verdadeiro campo de batalha da tecnologia, vence quem compreende que o futuro pertence não apenas aos que inovam, mas aos que sabem preservar aquilo que nunca deixou de funcionar.


sexta-feira, 3 de junho de 2022

⚔️ ITAMI E A DUNGEON DAS APIs — QUANDO O PROGRAMADOR COBOL DESCOBRIU QUE ENDPOINT NÃO ERA SÓ UMA URL

 

Bellacosa Mainframe entenda apis

☕ Um Café no Bellacosa Mainframe

⚔️ ITAMI E A DUNGEON DAS APIs — QUANDO O PROGRAMADOR COBOL DESCOBRIU QUE ENDPOINT NÃO ERA SÓ UMA URL

Endpoints, HTTP, REST, OAuth, tokens, idempotência, cache, rate limiting, webhooks, OpenAPI, API Gateway, microsserviços, agentes de IA — e o dia em que Youji Itami atravessou o GATE e descobriu que sistemas distribuídos também possuem monstros.



🎬 PRÓLOGO — ABRIU UM GATE NO DATACENTER

O programador COBOL olhou para o terminal 3270.

Tudo estava normal.

O programa compilava.

O CICS estava respondendo.

O Db2 continuava guardando dados importantes como fazia havia décadas.

O batch da madrugada havia terminado sem abend.

Até que Youji Itami, segundo-tenente da Força Terrestre de Autodefesa do Japão e veterano involuntário de situações absurdamente complicadas, apareceu carregando uma documentação de API.

— Temos um problema.

O programador olhou desconfiado.

— SOC7?

— Não.

— ASRA?

— Também não.

— SQLCODE -911?

— Pior.

Itami colocou sobre a mesa um desenho:

Mobile
   |
   v
API Gateway
   |
   +----------> Microservice
   |
   +----------> Cloud
   |
   +----------> AI Agent
   |
   +----------> z/OS Connect
                    |
                    v
                   CICS
                    |
                    v
                  COBOL
                    |
                    v
                   Db2

— Abriram um GATE para o mainframe.

O COBOLzeiro arregalou os olhos.

A boa notícia era que os bárbaros do outro lado não carregavam espadas.

A má notícia era que carregavam JSON.

E queriam acessar os dados do reino.

Bem-vindo ao mundo das APIs.



🏰 CAPÍTULO 1 — ANTES DE ENTENDER API, ENTENDA O PROBLEMA

Vamos começar absolutamente do zero.

Imagine dois programas.

O primeiro possui determinada informação.

O segundo precisa dessa informação.

Precisamos criar uma maneira de eles conversarem.

Dentro de um mesmo programa COBOL podemos simplesmente executar:

PERFORM CALCULA-SALDO

Ou talvez:

CALL 'PGMSALDO' USING WS-CONTA
                      WS-SALDO.

O problema começa quando o consumidor está em outro ambiente.

Imagine:

Aplicativo celular
        |
        ?
        |
     Mainframe

O aplicativo não pode executar:

CALL 'PGMSALDO'

através da Internet.

Precisamos de uma interface.

É aí que surge a ideia de uma API — Application Programming Interface.

Podemos simplificar inicialmente:

API é um contrato que permite que um software solicite serviços ou informações de outro software.

A palavra importante é contrato.

Não pense apenas em:

URL

Pense em:

O que posso pedir?
Como devo pedir?
Quem pode pedir?
Que dados preciso enviar?
O que receberei?
Como saberei que funcionou?
Como saberei que falhou?
Posso tentar novamente?
Quantas vezes posso chamar?
O contrato poderá mudar?

Essas perguntas formam a arquitetura de uma API.



🚪 CAPÍTULO 2 — ENDPOINT: ITAMI ENCONTROU O PRIMEIRO PORTAL

Em GATE, existe uma passagem ligando dois mundos.

Uma API possui algo conceitualmente parecido.

Um endpoint é um ponto através do qual determinada funcionalidade ou recurso pode ser acessado.

Imagine:

GET /customers/123

Podemos interpretar como:

Quero consultar o cliente 123.

Outro endpoint:

GET /accounts/987/balance

Significa:

Quero consultar o saldo da conta 987.

Não precisamos revelar ao consumidor que atrás daquele endpoint existe:

z/OS Connect
     |
     v
CICS
     |
     v
PGMSALD0
     |
     v
Db2

Essa abstração é extremamente importante.

O aplicativo conhece:

/accounts/987/balance

Não precisa conhecer:

LPAR
CICS region
transaction ID
program name
COMMAREA
Db2 subsystem
table

Itami provavelmente diria:

O GATE permite chegar ao reino. Você não precisa entregar ao visitante a planta completa do castelo.

Excelente princípio de segurança também.



⚔️ CAPÍTULO 3 — HTTP METHODS: NÃO BASTA CHEGAR AO PORTAL

Agora precisamos dizer o que queremos fazer.

Os métodos HTTP mais conhecidos são:

GET
POST
PUT
PATCH
DELETE

GET

Normalmente utilizado para consultar.

GET /customers/123

POST

Frequentemente usado para criar um recurso ou iniciar uma operação.

POST /payments

PUT

Normalmente utilizado para substituir ou atualizar integralmente determinada representação.

PATCH

Alteração parcial.

PATCH /customers/123

DELETE

Solicita remoção.

DELETE /customers/123

Para o programador COBOL podemos fazer uma analogia imperfeita, mas didática:

GET       → consulta
POST      → inclusão/processamento
PUT/PATCH → alteração
DELETE    → exclusão

Quem trabalhou com CRUD reconhecerá:

CREATE
READ
UPDATE
DELETE

Mas HTTP possui semântica própria. Não devemos simplesmente tratar os métodos como nomes diferentes para a mesma coisa.



📦 CAPÍTULO 4 — REQUEST E RESPONSE: A COMMAREA DO OUTRO MUNDO

Agora Itami atravessa o GATE carregando uma mensagem.

Temos uma request, a requisição.

Por exemplo:

POST /payments
Content-Type: application/json
Authorization: Bearer <token>

Com:

{
  "account": "123456",
  "amount": 150.00
}

Para quem vem do CICS, podemos pensar didaticamente:

“Então JSON é uma COMMAREA?”

Não exatamente.

Mas a analogia ajuda inicialmente.

Em uma transação CICS tradicional poderíamos receber uma estrutura definida.

No universo API, o contrato pode determinar um JSON:

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

O servidor processa e envia uma response:

{
  "transactionId": "ABC987",
  "status": "APPROVED"
}

O fluxo torna-se:

REQUEST
   |
   v
API
   |
   v
PROCESSAMENTO
   |
   v
RESPONSE

Parece simples.

Até a rede falhar.

Guarde essa informação.

Ela voltará para nos assombrar.


🚦 CAPÍTULO 5 — STATUS CODE: COMO SABER SE ITAMI VOLTOU VIVO?

HTTP possui códigos que indicam o resultado da requisição.

Alguns fundamentais:

200 OK
201 Created
204 No Content

400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
409 Conflict
429 Too Many Requests

500 Internal Server Error
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout

Eles são divididos em famílias.

2xx → sucesso
4xx → problema relacionado à requisição/cliente
5xx → problema no servidor ou infraestrutura

Um erro muito comum é responder sempre:

200 OK

e colocar dentro do JSON:

{
  "success": false
}

Pode funcionar, mas prejudica ferramentas que dependem da semântica HTTP.

Imagine o dashboard:

Requests HTTP 200: 100%

Operações efetivamente realizadas:

47%

Monitoramento:

TUDO VERDE!

Produção:

🔥🔥🔥🔥🔥

Às 03:17, alguém descobrirá a diferença.

Eis nosso primeiro easter egg.


🔐 CAPÍTULO 6 — AUTENTICAÇÃO E AUTORIZAÇÃO: RACF EXPLICA ISSO MUITO BEM

Dois conceitos são frequentemente confundidos.

Authentication

Pergunta:

Quem é você?

Authorization

Pergunta:

O que você pode fazer?

O programador de mainframe possui uma vantagem aqui.

Imagine RACF.

Você pode autenticar-se no sistema:

USER01

Isso não significa que automaticamente pode acessar:

SYS1.PARMLIB

Primeiro:

IDENTIDADE

Depois:

PERMISSÃO

No mundo das APIs:

Cliente
   |
Authentication
   |
Identidade conhecida
   |
Authorization
   |
Pode executar POST /payments?

Essa separação é crucial.

Um usuário pode ter permissão para:

GET /accounts/123

mas não:

DELETE /accounts/123

Autenticação sem autorização seria como reconhecer perfeitamente o invasor e, depois disso, entregar-lhe as chaves.


🎫 CAPÍTULO 7 — ACCESS TOKENS: O PASSE PARA ATRAVESSAR O GATE

Imagine que Itami receba uma credencial temporária para atravessar determinada área.

No universo das APIs podemos utilizar access tokens.

Em vez de transmitir usuário e senha em cada operação, temos conceitualmente:

Autenticação
     |
     v
Access Token
     |
     v
Requisições

Exemplo:

Authorization: Bearer eyJ...

O token pode carregar ou estar associado a informações de autorização.

Mas há uma regra importante:

Token deve ser tratado como segredo.

Não queremos tokens vazando em:

logs
Git
URLs
prints
tickets
mensagens
telemetria

Aqui encontramos um paradoxo interessante.

Para investigar incidentes queremos muitos logs.

Para proteger sistemas não queremos registrar segredos.

Portanto:

Observabilidade também precisa ser projetada com segurança.


🛂 CAPÍTULO 8 — OAUTH 2.0: ITAMI NÃO ENTREGA SUA SENHA PARA TODO MUNDO

OAuth 2.0 costuma ser explicado de maneira excessivamente simplificada como “sistema de login”.

O conceito central está relacionado à autorização delegada.

Imagine uma aplicação que precisa acessar determinado recurso em seu nome.

Você não deveria simplesmente entregar sua senha para ela.

A ideia é estabelecer mecanismos pelos quais determinada aplicação recebe autorização limitada.

Isso fica ainda mais importante quando entramos no mundo dos agentes de IA.

Imagine:

AI Agent
   |
   +----> Calendar API
   |
   +----> Email API
   |
   +----> CRM API
   |
   +----> Mainframe API

Agora aparecem perguntas novas:

Quem é o agente?

Quem autorizou?

Que ferramentas ele pode usar?

Quais operações?

Por quanto tempo?

Pode transferir dinheiro?

Pode excluir dados?

Precisa de aprovação humana?

Perceba como uma API tornou-se também uma fronteira de autoridade.


🚧 CAPÍTULO 9 — RATE LIMITING E THROTTLING: NEM TODO MUNDO ATRAVESSA O GATE AO MESMO TEMPO

Imagine 500 pessoas tentando atravessar simultaneamente uma passagem que comporta dez.

Temos um problema de capacidade.

APIs também enfrentam isso.

Rate limiting

Podemos estabelecer:

100 requests/minuto

Se o cliente ultrapassar:

429 Too Many Requests

Throttling

Podemos controlar deliberadamente o ritmo das requisições para proteger recursos.

Imagine:

Internet
  |
100.000 req/s
  |
  v
API Gateway
  |
  | fluxo controlado
  v
CICS

Isso possui conexão direta com um conceito que mainframe conhece muito bem:

Workload Management

Controlar carga, prioridades e recursos não foi inventado pelos microsserviços.

O mainframe vem resolvendo problemas semelhantes há décadas.


📚 CAPÍTULO 10 — PAGINATION: NÃO TRAGA O REINO INTEIRO EM UMA REQUEST

Considere:

GET /transactions

Agora imagine uma instituição com 800 milhões de transações.

Quer devolver tudo?

Espero que não.

Utilizamos paginação.

Exemplo:

GET /transactions?page=1&size=100

Ou:

GET /transactions?cursor=ABCXYZ

Assim recebemos pequenas partes.

Isso parece detalhe de interface, mas pode afetar profundamente:

Db2
CPU
I/O
memória
rede
tempo de resposta

Uma API mal desenhada pode produzir uma consulta gigantesca no backend.

E aquele endpoint inocente:

GET /transactions

vira o dragão da dungeon.


⚡ CAPÍTULO 11 — CACHE: ITAMI GUARDA SUPRIMENTOS PERTO DO PORTAL

Imagine buscar repetidamente o mesmo material em uma cidade a 300 quilômetros.

Faz sentido manter um estoque próximo.

Cache utiliza raciocínio semelhante.

Request
   |
   v
Cache
   |
   +-- HIT --> Response
   |
   +-- MISS --> Backend

Benefícios:

menor latência
menos processamento
menos I/O
menor carga no backend

Mas surge a pergunta fatal:

Por quanto tempo a informação armazenada continua verdadeira?

Um catálogo talvez possa permanecer alguns minutos em cache.

Saldo bancário exige cuidado muito maior.

Portanto cache não é simplesmente:

CACHE = ON

É uma decisão sobre consistência versus desempenho.

Curiosidade: uma das piadas clássicas da computação diz que existem poucos problemas realmente difíceis, e invalidação de cache invariavelmente aparece na lista.

Não é por acaso.


🔁 CAPÍTULO 12 — IDEMPOTÊNCIA: O MONSTRO QUE COBRA DUAS VEZES

Agora chegamos a um dos conceitos mais importantes de toda a dungeon.

Imagine:

POST /payments

R$ 1.000

O servidor recebe.

Processa.

Debita.

Mas a resposta desaparece na rede.

O cliente vê:

TIMEOUT

O que aconteceu?

Talvez nada.

Talvez tudo.

Esse é o detalhe fundamental:

Timeout não significa necessariamente que a operação falhou.

Significa:

O cliente não conseguiu determinar o resultado.

Então ele tenta novamente:

POST /payments

R$ 1.000

Sem proteção:

primeiro débito  = R$ 1.000
segundo débito   = R$ 1.000

Parabéns.

Criamos uma reclamação bancária.

Uma estratégia é utilizar uma Idempotency-Key:

Idempotency-Key: OPERATION-ABC123

Primeira chamada:

ABC123 → processada

Segunda:

ABC123 → já conhecida

O servidor pode retornar consistentemente o resultado apropriado sem executar novamente o efeito de negócio.

Para sistemas financeiros, pedidos, reservas e pagamentos, isso é ouro.


🔔 CAPÍTULO 13 — WEBHOOK: PARE DE PERGUNTAR SE A GUERRA TERMINOU

Considere polling:

Terminou?

Não.

Terminou?

Não.

Terminou?

Não.

Terminou?

Não.

Terminou?

Sim.

Ineficiente.

Com webhook:

Quando terminar, avise-me.

Temos:

Sistema A
   |
processamento
   |
   v
evento
   |
   v
Webhook
   |
   v
Sistema B

Muito elegante.

Até percebermos que agora precisamos resolver:

autenticação
retry
timeout
duplicidade
ordenação
assinatura
idempotência
falhas

Essa é uma lição fundamental da arquitetura:

Resolver um problema frequentemente revela a próxima camada de problemas.


🧬 CAPÍTULO 14 — VERSIONAMENTO: O GATE NÃO PODE MUDAR DE LUGAR TODA TERÇA-FEIRA

Você publica:

/v1/customers

Um aplicativo utiliza.

Depois dez.

Depois cinquenta.

Depois quinhentos.

Alguém sugere:

Vamos alterar completamente o contrato.

Calma.

Agora existem consumidores dependentes dele.

Programadores COBOL conhecem perfeitamente esse fenômeno.

Pense em um copybook:

COPY CUSTOMER.

Se 300 programas dependem daquele layout, alterar o copybook não é uma decisão local.

API possui problema semelhante:

API Contract
   |
   +--> Consumer A
   +--> Consumer B
   +--> Consumer C
   +--> Consumer D

Quanto maior a utilização, maior o custo de mudanças incompatíveis.

Uma API bem-sucedida pode transformar-se em infraestrutura.


📜 CAPÍTULO 15 — OPENAPI: O MAPA OFICIAL DO REINO

OpenAPI permite descrever uma API de maneira estruturada.

Podemos documentar:

paths
methods
parameters
schemas
responses
security

Isso possibilita alimentar ferramentas para:

documentação
validação
geração de clientes
mock servers
testes
governança

E existe uma conexão fascinante com IA.

Se um agente possui uma descrição formal das ferramentas disponíveis, fica muito mais fácil determinar:

qual operação existe
quais parâmetros recebe
qual resultado retorna

Assim:

OpenAPI
   +
Tool Calling
   +
LLM
   =
Agente capaz de utilizar serviços

Só que quanto mais fácil tornamos a utilização, mais importante se torna controlar permissão.


🧙 CAPÍTULO 16 — REST VS GRAPHQL: ITAMI DESCOBRE QUE NÃO EXISTE UMA ÚNICA MAGIA

REST é extremamente popular.

Podemos organizar recursos:

/customers
/customers/123
/customers/123/accounts

GraphQL segue outra abordagem.

O consumidor pode solicitar especificamente campos e relações desejados.

Algo conceitualmente como:

customer(id: 123) {
    name
    accounts {
        balance
    }
}

Isso pode reduzir certos problemas de excesso ou insuficiência de dados retornados.

Mas introduz outros desafios:

complexidade das queries
autorização
cache
observabilidade
N+1 queries
controle de recursos

E ainda existem:

gRPC
WebSockets
SSE
MQTT
MQ
Kafka
event streaming

A pergunta madura não é:

REST ou GraphQL, qual é melhor?

É:

Qual modelo de comunicação corresponde ao problema que estou tentando resolver?


🏯 CAPÍTULO 17 — API GATEWAY: O GUARDA DO PORTAL

Finalmente encontramos o personagem que literalmente merece o nome da série.

O API Gateway.

Arquitetura:

                  ┌── Serviço A
                  │
Internet → Gateway├── Serviço B
                  │
                  ├── Cloud
                  │
                  └── Mainframe

Ele pode centralizar funcionalidades como:

routing
authentication
policies
rate limiting
TLS
logging
metrics

Isso é poderoso porque evita implementar determinados controles repetidamente em cada serviço.

Mas cuidado.

Existe a tentação de colocar:

routing
segurança
transformações
regras
orquestração
negócio
validação
mais negócio
mais regras
mais lógica

até que:

API GATEWAY

vire:

NOVO MONÓLITO CORPORATIVO

Itami reconheceria imediatamente a armadilha:

Fortificar o portão não significa construir a cidade inteira dentro dele.


🧩 CAPÍTULO 18 — MICROSSERVIÇOS: 500 SERVIÇOS NÃO SIGNIFICAM 500 VEZES MAIS MODERNIDADE

Existe uma armadilha cultural importante.

Imagine:

Empresa A:
400 microservices

Empresa B:
15 serviços
CICS
MQ
Db2

Não podemos concluir que A seja arquiteturalmente superior.

Microsserviços oferecem vantagens quando existe necessidade real de:

deploy independente
ownership
escalabilidade independente
isolamento
bounded contexts
evolução independente

Mas distribuem problemas.

Agora existem:

rede
latência
timeouts
retries
service discovery
segurança
observabilidade
deployment
versionamento
consistência distribuída

Dentro de um monólito:

PERFORM PROCESSA-PEDIDO

Em arquitetura distribuída:

Service A
    |
    | rede
    v
Service B

E a rede possui uma característica desagradável.

Às vezes ela simplesmente responde:

Não.


💥 CAPÍTULO 19 — ERROR HANDLING: “DEU ERRO” NÃO É UMA ESTRATÉGIA

Uma API precisa possuir tratamento consistente de erros.

Ruim:

{
  "error": "Something went wrong"
}

Também ruim:

{
  "error": "SQLCODE -204 PRODDB.CUSTOMER..."
}

No segundo caso entregamos detalhes internos demais.

Uma resposta melhor poderia ser:

{
  "code": "ACCOUNT_NOT_FOUND",
  "message": "Account does not exist",
  "correlationId": "ABC123"
}

O consumidor recebe informação útil.

A equipe de suporte utiliza:

ABC123

para procurar a operação nos logs.

Isso nos leva à observabilidade distribuída:

Client
  |
ABC123
  |
Gateway
  |
ABC123
  |
Service
  |
ABC123
  |
CICS

Um identificador de correlação ajuda a seguir a aventura inteira.

É quase o SYSOUT da jornada distribuída.


🤖 CAPÍTULO 20 — AGENTES DE IA ATRAVESSARAM O GATE

E chegamos a 2026.

Durante muito tempo tínhamos:

Pessoa
  |
Interface
  |
Aplicação
  |
API

Agora podemos ter:

Pessoa
  |
AI Agent
  |
API
  |
API
  |
API
  |
Mainframe

Isso muda radicalmente a discussão.

Uma API deixa de ser somente um mecanismo utilizado por aplicações previamente programadas.

Pode tornar-se uma ferramenta disponível para um agente escolher e executar.

Imagine as seguintes ferramentas:

consultCustomer()
consultBalance()
createOrder()
cancelOrder()
transferMoney()

Existe enorme diferença de risco entre:

consultBalance()

e:

transferMoney()

Logo precisamos pensar:

Agente
   |
Identidade
   |
Autorização
   |
Policy
   |
Ferramenta permitida?
   |
Aprovação humana necessária?
   |
Execução
   |
Auditoria

A pergunta deixa de ser apenas:

A IA consegue executar?

A pergunta arquiteturalmente importante passa a ser:

A IA possui autoridade para executar, sob quais condições e com qual trilha de auditoria?


🧠 CAPÍTULO 21 — API É ARQUITETURA ORGANIZACIONAL DISFARÇADA DE CÓDIGO

Agora chegamos ao ponto mais profundo da nossa investigação.

Considere:

Equipe A
   |
   API
   |
Equipe B

Aquela API determina:

contrato
dependência
responsabilidade
ownership
SLA
segurança
evolução

Portanto uma API não conecta somente computadores.

Ela conecta equipes e responsabilidades.

Multiplique isso:

Team A ──API── Team B
  │              │
 API            API
  │              │
Team C ──API── Team D

A arquitetura tecnológica começa a refletir a arquitetura organizacional.

Por isso APIs mal projetadas geram uma dívida que pode ficar invisível durante meses.

Depois aparecem:

breaking changes
deployments coordenados
dependências circulares
incidentes
timeouts
retries
duplicidades
problemas de ownership

Finalmente:

WAR ROOM
03:17

O easter egg voltou.

Se você chegou até aqui, ganhou +3270 XP.


🖥️ CAPÍTULO 22 — E ONDE ENTRA O MAINFRAME?

Aqui existe uma das maiores confusões do mercado.

Algumas pessoas ainda imaginam:

API = moderno

Mainframe = antigo

Essa equação está errada.

Podemos perfeitamente ter:

                    Mobile
                      |
Web ─────────── API Gateway ───────── AI Agent
                      |
                  API Layer
                      |
        ┌─────────────┼─────────────┐
        |             |             |
      Cloud          MQ       z/OS Connect
                                    |
                         ┌──────────┴──────────┐
                         |                     |
                        CICS                  IMS
                         |                     |
                       COBOL                 COBOL
                         |                     |
                        Db2                  IMS DB

O COBOL continua executando regras de negócio.

CICS continua gerenciando transações.

Db2 continua armazenando dados.

MQ continua realizando mensageria.

O que mudou?

Criamos novas portas de acesso.

É exatamente como GATE.

A existência do portal não destrói nenhum dos dois mundos.

Ela cria um novo problema de integração entre eles.


⚙️ CAPÍTULO 23 — ESCALABILIDADE É UM PROBLEMA DE COORDENAÇÃO

Esta talvez seja a ideia mais importante de toda a conversa:

Scalability is fundamentally a coordination problem.

Quando alguém fala em escalabilidade, é comum imaginar:

mais CPU
mais memória
mais servidores
mais containers

Mas sistemas distribuídos precisam coordenar:

requisições
estado
identidades
permissões
concorrência
dados
filas
timeouts
retries
falhas
versões
equipes

Podemos possuir enorme capacidade computacional.

Ainda assim duas operações podem tentar modificar simultaneamente o mesmo recurso.

Podemos adicionar containers.

Isso não elimina automaticamente problemas de consistência.

Podemos adicionar microsserviços.

Isso pode aumentar a necessidade de coordenação.

Podemos adicionar agentes de IA.

Agora adicionamos consumidores capazes de decidir dinamicamente quais operações executar.

Cada nova capacidade também aumenta a superfície arquitetural.


🗺️ CAPÍTULO 24 — O MAPA COMPLETO DA DUNGEON

Agora podemos reorganizar os vinte conceitos.

                       API
                        |
        ┌───────────────┼───────────────┐
        |               |               |
     CONTRATO        SEGURANÇA       OPERAÇÃO
        |               |               |
    Endpoint       Authentication    Rate Limit
    Methods        Authorization     Throttling
    Request        OAuth             Pagination
    Response       Tokens            Cache
    Status             |               |
        |               |               |
        └───────────────┼───────────────┘
                        |
                 CONFIABILIDADE
                        |
                   Idempotency
                   Error Handling
                        |
            ┌───────────┴───────────┐
            |                       |
        INTEGRAÇÃO               EVOLUÇÃO
            |                       |
       REST/GraphQL              Versioning
       Webhooks                  OpenAPI
            |                       |
            └───────────┬───────────┘
                        |
                 INFRAESTRUTURA
                        |
                   API Gateway
                        |
                    Services
                        |
          Cloud / MQ / CICS / IMS

Agora aquilo que parecia uma coleção de buzzwords começa a fazer sentido.


🧪 CAPÍTULO 25 — PASSO A PASSO: DESENHANDO UMA API PARA UM PROGRAMA COBOL

Imagine que precisamos disponibilizar consulta de saldo.

Hoje temos:

COBOL → CICS → Db2

Queremos permitir:

Mobile → API → Mainframe

Passo 1 — Defina o recurso

/accounts/{accountId}/balance

Passo 2 — Escolha a operação

Como é consulta:

GET /accounts/123456/balance

Passo 3 — Defina autenticação

Quem pode chamar?

usuário?
aplicação?
parceiro?
agente?

Passo 4 — Defina autorização

Mesmo autenticado:

pode consultar qualquer conta?

somente as próprias?

qual scope?

Passo 5 — Defina response

{
  "accountId": "123456",
  "balance": 3250.45,
  "currency": "BRL"
}

Passo 6 — Defina erros

400 → requisição inválida
401 → não autenticado
403 → sem permissão
404 → recurso não encontrado
429 → excesso de chamadas
500 → erro inesperado
503 → indisponibilidade

Passo 7 — Pense em capacidade

Quantas consultas por segundo?

10?
1.000?
50.000?

Qual impacto no CICS e no Db2?

Passo 8 — Pense em observabilidade

Precisamos acompanhar:

latência
throughput
erros
timeouts
status codes
backend time
correlation ID

Passo 9 — Pense em segurança

Nunca exponha desnecessariamente:

nome do programa COBOL
subsystem
table names
SQL
stack traces
tokens

Passo 10 — Pense no futuro

Se amanhã mudarmos o programa COBOL, o consumidor precisa saber?

Idealmente:

não.

Essa é uma das maiores vantagens da abstração.


🧰 CAPÍTULO 26 — DEZ PERGUNTAS PARA LEVAR PARA QUALQUER PROJETO

Quando alguém disser:

“Precisamos criar uma API.”

Não abra imediatamente o editor.

Pergunte:

  1. Quem é o consumidor?
  2. Qual problema de negócio estamos resolvendo?
  3. Qual é o contrato?
  4. Quem autentica o consumidor?
  5. Quem autoriza cada operação?
  6. Qual volume esperado e qual limite?
  7. O que acontece durante timeout?
  8. A operação pode ser repetida com segurança?
  9. Como monitoraremos ponta a ponta?
  10. Como evoluiremos o contrato sem destruir consumidores existentes?

Essas perguntas podem evitar meses de dívida técnica.


🥚 CURIOSIDADES DA DUNGEON

Muitos dos problemas considerados “moderníssimos” possuem parentes muito mais antigos.

Filas? Mainframes utilizam mensageria há décadas.

Controle de workload? Nada novo para quem conhece z/OS.

Autorização granular? RACF não nasceu ontem.

Contratos entre programas? Copybooks já ensinavam dolorosamente o significado de dependência.

Processamento transacional? CICS poderia dar uma longa aula para muitos microsserviços.

Compatibilidade? O ecossistema IBM Z transformou retrocompatibilidade em uma disciplina praticamente cultural.

Isso não significa que REST, OAuth, Kubernetes ou agentes sejam “a mesma coisa”.

Significa algo muito mais interessante:

Tecnologias mudam rapidamente; problemas fundamentais da computação possuem uma tendência irritante de voltar usando roupas novas.


☕ EPÍLOGO — ITAMI FECHA O MAPA

Depois de atravessar toda a dungeon, o programador COBOL olhou novamente para a primeira definição:

API é uma interface pela qual aplicações se comunicam.

Tecnicamente correta.

Mas insuficiente.

Ele apagou e escreveu:

API é um contrato técnico e operacional que estabelece como diferentes sistemas — e, cada vez mais, diferentes organizações e agentes — podem cooperar com segurança, previsibilidade e capacidade de evolução.

Itami aprovou.

Porque a maturidade não está em conseguir criar:

GET /customer

em quinze minutos.

Está em conseguir responder:

Quem pode chamar?

Quantas vezes?

Qual SLA?

Qual timeout?

Qual retry?

É idempotente?

Como autentica?

Como autoriza?

Como escala?

Como monitoramos?

Como versionamos?

Como descontinuamos?

O que acontece quando o backend cai?

O que acontece quando a resposta desaparece?

O que acontece quando um agente de IA vira consumidor?

Esse é o ponto em que deixamos de falar apenas sobre desenvolvimento de APIs.

Começamos a falar sobre System Design.

E talvez seja justamente aí que o programador COBOL possua uma vantagem que não percebe.

Ele vem de um mundo no qual confiabilidade, transações, segurança, compatibilidade, capacidade, auditoria e operação nunca foram detalhes opcionais.

Agora o restante da arquitetura distribuída está descobrindo a mesma coisa.

O GATE está aberto.

De um lado:

COBOL
CICS
IMS
Db2
MQ
RACF
z/OS

Do outro:

REST
GraphQL
OAuth
OpenAPI
Microservices
Cloud
AI Agents

No meio está o arquiteto.

Sua missão não é escolher qual mundo deve vencer.

É garantir que ambos consigam conversar sem que alguém seja acordado às 03:17 da madrugada porque um retry duplicou 42.000 pagamentos.

E se acontecer?

Bom...

Itami provavelmente estaria de folga.

Porque, afinal, ele tinha planejado passar o fim de semana numa convenção de doujinshi.

END OF JOB — MAXCC=0000.

quinta-feira, 2 de junho de 2022

⚔️ Isekai Meikyū de Hāremu wo: O Labirinto da Fantasia, Poder e Desejo — Uma Análise Profunda de um dos Isekais Mais Controversos dos Anos 2020

 

Bellacosa Mainframe e o censurado Isekai Meikyu de Haremu wo

⚔️ Isekai Meikyū de Hāremu wo: O Labirinto da Fantasia, Poder e Desejo — Uma Análise Profunda de um dos Isekais Mais Controversos dos Anos 2020


Ficha Técnica

Título Original: 異世界迷宮でハーレムを (Isekai Meikyū de Hāremu wo)

Título Internacional: Harem in the Labyrinth of Another World

Autor da Light Novel: Shachi Sogano

Ilustrações Originais: Shikidouji

Estúdio de Animação: Passione

Direção: Naoyuki Tatsuwa

Estreia do Anime: 6 de julho de 2022

Temporadas: 1

Episódios: 12

Origem: Light Novel → Mangá → Anime


Sinopse

Michio Kaga, um estudante comum, encontra um misterioso jogo online que o transporta para um mundo de fantasia semelhante a um RPG. Ao perceber que não pode retornar, ele decide sobreviver utilizando um sistema complexo de classes, habilidades e exploração de masmorras.

Conforme acumula riqueza e experiência, Michio passa a construir um grupo de companheiras que o acompanham em suas jornadas pelos labirintos, enfrentando monstros, desafios econômicos e conflitos sociais.


Resumo da História

Diferente de muitos isekais modernos focados em salvar o mundo, derrotar um Rei Demônio ou liderar reinos, Isekai Meikyū de Hāremu wo segue uma proposta muito mais pragmática.

O protagonista não possui grandes ideais heroicos.

Sua prioridade é:

  • Sobreviver

  • Ficar mais forte

  • Ganhar dinheiro

  • Explorar labirintos

  • Construir uma vida confortável

A trama acompanha sua evolução através do sistema econômico e militar do mundo.

Grande parte do anime gira em torno de:

  • Farm de monstros

  • Estratégias de combate

  • Aquisição de equipamentos

  • Administração de recursos

  • Crescimento gradual do grupo

É quase um simulador de RPG medieval misturado com fantasia adulta.


Bellacosa Mainframe e o harem do anime

O Que Torna Este Anime Diferente?

A maioria dos isekais modernos segue uma fórmula:

"Garoto comum vira herói lendário."

Aqui não.

Michio raramente demonstra interesse em salvar pessoas ou mudar o mundo.

Ele age como alguém que realmente foi transportado para outro universo e precisa descobrir:

  • Como ganhar dinheiro

  • Como sobreviver

  • Como explorar o sistema daquele mundo

A obra dedica muito tempo explicando:

  • Classes

  • Profissões

  • Habilidades

  • Equipamentos

  • Economia

Isso cria uma sensação de RPG muito mais detalhada do que a média do gênero.


Os Personagens Principais

Michio Kaga

O protagonista.

Extremamente calculista.

Analisa tudo como se estivesse jogando um RPG otimizado.

Diferentemente de protagonistas excessivamente bondosos ou ingênuos, Michio toma decisões práticas e frias quando necessário.


Roxanne

A primeira integrante do grupo.

Uma guerreira da raça homem-lobo.

Sua popularidade foi tão grande que acabou se tornando o rosto da franquia.

Ela representa:

  • Lealdade

  • Confiança

  • Companheirismo

Muitos fãs consideram Roxanne um dos maiores motivos para o sucesso da série.


Sherry

Maga especializada em pesquisa.

Representa o aspecto intelectual do grupo.

Ajuda a aprofundar o sistema de classes e equipamentos.


Miria

Personagem introduzida posteriormente.

Amplia a dinâmica de equipe e reforça o crescimento gradual do harém.


Temáticas Ocultas

Apesar da fama adquirida por suas cenas sensuais, a obra trabalha temas menos comentados.

1. A Fantasia do Controle

O anime explora a ideia de um indivíduo que ganha controle absoluto sobre sua própria vida.

No mundo moderno:

  • Trabalho

  • Escola

  • Obrigações

limitam escolhas.

No mundo do labirinto:

  • Todo esforço gera recompensa direta.

  • Toda evolução é visível.

Essa é uma das principais fantasias presentes no gênero isekai.


2. Meritocracia Absoluta

O universo funciona como um RPG.

Se o personagem:

  • Treina

  • Aprende

  • Trabalha

ele progride.

O anime cria um mundo onde a relação entre esforço e recompensa parece muito mais clara do que na vida real.


3. Escapismo

Talvez a mensagem mais forte da obra.

O anime representa o desejo de abandonar uma realidade frustrante e começar novamente em um ambiente onde o protagonista possui:

  • Liberdade

  • Poder

  • Objetivos claros


4. O Labirinto Como Metáfora

O labirinto não é apenas um local físico.

Ele simboliza:

  • Crescimento pessoal

  • Desafios constantes

  • Busca por significado

Cada andar conquistado representa uma nova etapa da evolução do protagonista.


As Aventuras Pelo Labirinto

Os labirintos são o coração da série.

Cada incursão envolve:

  • Combate estratégico

  • Gerenciamento de recursos

  • Escolha de habilidades

  • Cooperação entre membros do grupo

Ao contrário de muitos animes de fantasia onde as masmorras são apenas cenários, aqui elas funcionam como o principal motor narrativo.

Praticamente toda a economia do mundo gira em torno delas.


O Trabalho do Estúdio Passione

O estúdio Passione ficou conhecido por produções que priorizam:

  • Qualidade visual

  • Expressões detalhadas

  • Direção voltada para personagens

Entre seus trabalhos estão:

Em Isekai Meikyū de Hāremu wo, o estúdio investiu especialmente em:

  • Iluminação cinematográfica

  • Design detalhado dos personagens

  • Animação cuidadosa das cenas de combate

  • Ambientação medieval

O resultado visual ficou acima da média para produções isekai de orçamento semelhante.


Houve Censura?

Sim.

O anime foi exibido em três versões:

TV Broadcast

Fortemente censurada.

Harem Ver.

Menos censura.

Super Harem Ver.

Próxima da versão integral produzida pelo estúdio.

A existência dessas múltiplas versões gerou bastante discussão entre fãs durante a transmissão original.

A obra ficou conhecida justamente por ser uma das produções ecchi mais ousadas da década.


Classificação Indicativa

Faixa recomendada: 18+ em diversas plataformas.

Gêneros:

  • Isekai

  • Fantasia

  • Aventura

  • Ecchi

  • Romance

  • Harém

  • RPG/Fantasia Medieval


Impacto Cultural

Embora não tenha alcançado o nível de fenômenos como:

  • Sword Art Online

  • Re:Zero

  • Mushoku Tensei

o anime se tornou extremamente conhecido dentro da comunidade isekai.

Seu impacto veio de três fatores:

1. Fidelidade ao material original

A adaptação preservou muitos elementos do sistema RPG.

2. Roxanne

A personagem rapidamente virou um ícone entre fãs de fantasia e harém.

3. Debate sobre os limites do ecchi

A série reacendeu discussões sobre:

  • Censura em animes

  • Classificações indicativas

  • Diferença entre ecchi e conteúdo adulto


Análise Final

Isekai Meikyū de Hāremu wo é menos sobre aventura heroica e mais sobre construção de vida dentro de um sistema de fantasia.

Por trás da fama de anime polêmico existe uma obra curiosa que mistura:

  • Simulação econômica

  • Progressão de RPG

  • Exploração de masmorras

  • Fantasia de poder

  • Escapismo

Seu maior diferencial é tratar o mundo isekai como um ambiente funcional, onde o protagonista precisa entender regras, ganhar recursos e crescer gradualmente, em vez de simplesmente receber o papel de salvador do mundo.

Nota crítica (análise temática): 7,5/10

Para fãs de: Mushoku Tensei, Overlord, Log Horizon, How a Realist Hero Rebuilt the Kingdom e histórias focadas em progressão de personagem e sistemas de RPG.


quarta-feira, 1 de junho de 2022

MADE IN ABYSS: RETSUJITSU NO OUGONKYOU — A SEGUNDA TEMPORADA QUE EXECUTOU UM SCAN NAS PROFUNDEZAS DO ABYSS

 

Bellacosa Mainframe e a segunda temporada de Made in Abyss

☕💣🏛️ OPERADOR, O STORAGE INFINITO ACABA DE REVELAR QUE EXISTE UM AMBIENTE AINDA MAIS PROFUNDO, MAIS ANTIGO E COMPLETAMENTE FORA DE SUPORTE!

MADE IN ABYSS: RETSUJITSU NO OUGONKYOU — A SEGUNDA TEMPORADA QUE EXECUTOU UM SCAN NAS PROFUNDEZAS DO ABYSS E DESCOBRIU QUE O MAIOR MONSTRO NÃO É A MALDIÇÃO, MAS O PREÇO DOS DESEJOS HUMANOS


📋 FICHA TÉCNICA

Título Original:
メイドインアビス 烈日の黄金郷
(Made in Abyss: Retsujitsu no Ougonkyou)

Título Internacional:
Made in Abyss: The Golden City of the Scorching Sun

Autor Original:
Akihito Tsukushi

Estúdio:
Kinema Citrus

Diretor:
Masayuki Kojima

Lançamento:
Julho de 2022

Episódios:
12

Gêneros:

  • Fantasia Sombria

  • Aventura

  • Mistério

  • Drama

  • Horror Psicológico

  • Tragédia

  • Ficção Científica

  • Sobrevivência

Classificação Indicativa:
16+ a 18+, dependendo da região.


☕ ANTES DE ASSISTIR

Existe um detalhe importante.

A segunda temporada não continua diretamente da primeira.

A sequência correta é:

  1. Made in Abyss (Temporada 1)

  2. Dawn of the Deep Soul (Filme)

  3. The Golden City of the Scorching Sun (Temporada 2)

Pular o filme equivale a restaurar um backup incompleto e esperar que o sistema funcione.

Não vai funcionar.


🕳️ SINOPSE

Após sobreviver ao confronto contra Bondrewd, Riko, Reg e Nanachi finalmente alcançam a lendária Sexta Camada.

Ali encontram um local que exploradores consideravam praticamente uma lenda:

A Cidade Dourada.

Mas a realidade encontrada é muito diferente da expectativa.

No lugar de uma civilização gloriosa existe algo muito mais estranho:

Uma comunidade construída sobre sacrifícios, desejos, sofrimento e transformações irreversíveis.


📖 RESUMO DA HISTÓRIA

A temporada alterna entre duas narrativas.


Linha 1: Riko e seus companheiros

O grupo explora a Sexta Camada.

Eles descobrem:

  • Ecossistemas impossíveis

  • Novas criaturas

  • Novas relíquias

  • O misterioso vilarejo de Iruburu


Linha 2: Os Ganja

Paralelamente acompanhamos uma expedição do passado.

Uma equipe de aventureiros liderada por Wazukyan desce ao Abyss em busca do paraíso prometido.

O que encontram é uma sequência de eventos que lentamente se transforma em uma das histórias mais perturbadoras da animação japonesa.

As duas linhas eventualmente convergem.

E quando isso acontece o impacto emocional é devastador.


☕ O QUE A SEGUNDA TEMPORADA TEM DE DIFERENTE?

A primeira temporada falava sobre:

Exploração.

A segunda fala sobre:

Consequências.

A mudança é gigantesca.


A PRIMEIRA TEMPORADA

Pergunta:

O que existe no Abyss?


A SEGUNDA TEMPORADA

Pergunta:

Quanto custa realizar um desejo?


O RESULTADO

Menos aventura clássica.

Mais tragédia filosófica.

Mais simbolismo.

Mais horror existencial.

Mais sofrimento emocional.


👥 PERSONAGENS PRINCIPAIS

Riko

Continua representando a curiosidade humana.

Mas agora começa a compreender que nem todo conhecimento deveria ser obtido sem custo.


Reg

A temporada aprofunda o mistério de sua origem.

Pela primeira vez surgem pistas concretas sobre seu passado.


Nanachi

Recebe alguns dos momentos emocionais mais fortes de toda a franquia.

Sua ligação com Mitty continua sendo um dos pilares emocionais da obra.


Faputa

A verdadeira estrela da temporada.

Faputa é:

  • Vingança

  • Amor

  • Dor

  • Herança

Tudo ao mesmo tempo.

Ela é uma personagem extremamente complexa.

Ao mesmo tempo monstruosa e profundamente humana.


Vueko

Talvez a personagem mais trágica da temporada.

Sua história serve como coração emocional de toda a narrativa.


Wazukyan

Um dos personagens mais fascinantes da série.

Visionário.

Manipulador.

Profeta.

Salvador.

Vilão.

Dependendo da perspectiva, ele é tudo isso simultaneamente.


☕ O VILAREJO DE IRUBURU

Sob a ótica Bellacosa Mainframe, Iruburu é um ambiente legado criado a partir de uma arquitetura completamente insustentável.

Ele continua funcionando.

Mas ninguém deveria perguntar como.

A própria existência do local depende de um mecanismo moralmente perturbador.

É uma infraestrutura baseada em dívida existencial.

Quanto mais você descobre sobre ela, mais desconfortável se sente.


AS MENSAGENS OCULTAS

A segunda temporada é absurdamente rica em simbolismos.


O Valor dos Desejos

Todo desejo possui um custo.

Sempre.

O Abyss apenas torna esse custo visível.


Maternidade

Um dos temas centrais.

A obra explora:

  • Amor materno

  • Sacrifício

  • Proteção

  • Perda

De maneiras extremamente dolorosas.


Civilizações Humanas

Iruburu representa sociedades construídas sobre sacrifícios esquecidos.

As pessoas desfrutam dos benefícios.

Mas não conhecem o sofrimento que permitiu sua existência.


O Preço da Sobrevivência

Até onde devemos ir para sobreviver?

Existe um limite?

A temporada se recusa a fornecer respostas simples.


☕ O HORROR EXISTENCIAL

A primeira temporada tinha monstros.

A segunda temporada transforma conceitos em monstros.

O verdadeiro horror não é físico.

É psicológico.

É perceber que:

  • Boas intenções podem gerar tragédias

  • Amor pode produzir sofrimento

  • Sobrevivência pode exigir atrocidades

Poucos animes abordam isso com tanta profundidade.


🎨 QUALIDADE TÉCNICA

Direção

Praticamente impecável.

O ritmo lento é deliberado.

Cada revelação precisa de tempo para ser absorvida.


Animação

A Kinema Citrus entrega alguns dos melhores cenários da década.

A Sexta Camada parece:

  • Alienígena

  • Bela

  • Hostil

Simultaneamente.


Trilha Sonora

Kevin Penkin novamente produz uma obra-prima.

Muitas cenas emocionais da temporada devem metade de sua força à trilha sonora.


HOUVE CENSURA?

Assim como a primeira temporada, a segunda gerou debates.

Os principais pontos envolveram:

  • Horror corporal

  • Transformações físicas extremas

  • Sofrimento infantil

  • Temas de maternidade perturbadores

Entretanto, não houve uma censura ampla que alterasse significativamente a história.

A maior parte das distribuições internacionais preservou a narrativa original.


IMPACTO CULTURAL

A segunda temporada consolidou Made in Abyss como uma das maiores fantasias sombrias da animação moderna.

Muitos críticos consideram o arco da Cidade Dourada:

  • O mais ambicioso da franquia

  • O mais complexo emocionalmente

  • O mais perturbador

Também ajudou a reforçar a reputação da obra como referência em:

  • Worldbuilding

  • Horror existencial

  • Narrativas de exploração

  • Fantasia adulta


☕ ANÁLISE BELLACOSA MAINFRAME

Se a primeira temporada era uma exploração de armazenamento profundo...

A segunda temporada é a auditoria.

Ela finalmente revela os custos escondidos nos registros históricos do sistema.

Iruburu é como encontrar um ambiente crítico funcionando há séculos.

Sem documentação.

Sem suporte.

Sem equipe original.

Sem ninguém saber quais sacrifícios foram feitos para mantê-lo ativo.

Quando os logs finalmente aparecem, o operador descobre que toda a infraestrutura foi construída sobre decisões que jamais deveriam ter sido aprovadas em produção.

E é exatamente isso que torna esta temporada tão brilhante.


🎯 VEREDITO FINAL

Made in Abyss: The Golden City of the Scorching Sun não é apenas uma continuação.

É uma evolução.

Mais profunda.

Mais filosófica.

Mais cruel.

Mais emocionante.

A primeira temporada perguntava o que existia no fundo do Abyss.

A segunda pergunta algo muito mais assustador:

"O que você estaria disposto a sacrificar para realizar seu maior desejo?"

☕☕☕☕☕ Nota Bellacosa Mainframe: 5/5 Cafés

Status Operacional:
🔴 AUDITORIA PROFUNDA EM EXECUÇÃO

Mensagem do Console:

"OPERADOR, OS LOGS DA SEXTA CAMADA FORAM RECUPERADOS. A ANÁLISE INDICA QUE O SISTEMA NÃO FOI CONSTRUÍDO SOBRE TECNOLOGIA. FOI CONSTRUÍDO SOBRE SACRIFÍCIOS. DESEJA CONTINUAR A LEITURA? (Y/N)" ☕💣🕳️🏛️

 

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