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

segunda-feira, 13 de maio de 2024

🏜️ System Design e a Joia do Nilo — Arquitetura sob a tutela de Jack Colton

 

Bellacosa Mainframe apresenta o System Design

☕ Um Café no Bellacosa Mainframe

🏜️ System Design e a Joia do Nilo — Arquitetura sob a tutela de Jack Colton

Ou: quando você descobre que escalar um sistema é muito parecido com atravessar o deserto — o mapa ajuda, o veículo ajuda, mas aquilo que realmente decide se você chega vivo é saber improvisar quando o plano inevitavelmente dá errado.

Se existe um personagem capaz de ensinar System Design sem abrir um livro de arquitetura, Jack Colton é um candidato maravilhoso.

Em A Joia do Nilo, continuação de Tudo por uma Esmeralda, Jack continua sendo aquele sujeito que parece viver segundo uma arquitetura extremamente simples:

IF problema = TRUE
   IMPROVISE
   CORRA
   SOBREVIVA
   CONTINUE
END-IF

Não existe Kubernetes no deserto.

Não existe autoscaling automático para camelos.

Não existe botão de rollback quando você tomou a estrada errada.

E definitivamente não existe ServiceNow para abrir um chamado:

INC0000317 — Usuário perseguido no deserto. Severidade 1.

😂

Mas existe algo muito importante:

trade-off.

E System Design é essencialmente a arte de administrar trade-offs.




🏜️ 1. Jack Colton olha para requisitos, não para propaganda

Imagine alguém dizendo:

“Jack, encontrei o veículo mais rápido do mundo!”

Ele provavelmente perguntaria:

“Ótimo. Ele anda no deserto?”

Essa é exatamente a pergunta que falta em muitos projetos.

O mercado apresenta uma tecnologia fantástica:

Kafka!

Kubernetes!

Redis!

MongoDB!

Serverless!

Microservices!

AI Agents!

E alguém imediatamente conclui:

PRECISAMOS DISSO!

Jack Colton provavelmente colocaria os óculos escuros e perguntaria:

“Para quê?”

Essa pequena pergunta poderia economizar milhões em projetos de TI.

Tecnologia não é requisito.

Antes de escolher a solução precisamos conhecer o problema.



🗺️ 2. Antes de atravessar o deserto, descubra onde você está

System Design começa pelos requisitos.

Imagine:

USUÁRIOS ATUAIS        100
USUÁRIOS FUTUROS     10.000
PICO                  50 TPS
LATÊNCIA DESEJADA    < 500 ms
DISPONIBILIDADE       99,9%
DADOS                 500 GB
CRESCIMENTO           20% / ano

Isso começa a dizer alguma coisa.

Agora compare com:

USUÁRIOS          50 milhões
PICO              500.000 TPS
DISPONIBILIDADE   99,999%
DADOS             Petabytes
OPERAÇÃO          Global

São desertos completamente diferentes.

Projetar ambos da mesma maneira seria como escolher o mesmo veículo para atravessar Manhattan e o Saara.



🚙 3. Load Balancer — Jack não colocaria todo mundo no mesmo jipe

Imagine 10.000 requisições chegando simultaneamente.

Temos:

             USERS
               |
               v
        +--------------+
        | LOAD BALANCER|
        +--------------+
          /     |     \
         v      v      v
       APP1   APP2   APP3

O Load Balancer distribui o tráfego.

Parece perfeito.

Mas Jack perguntaria:

“E se o Load Balancer quebrar?”

Excelente.

Criamos três servidores extremamente resistentes...

e colocamos todos atrás de um único componente.

Temos agora um:

Single Point of Failure.

É como possuir dez veículos de fuga e guardar todas as chaves no bolso do mesmo sujeito.


🐪 4. Autoscaling — mais camelos não resolvem falta de água

Essa talvez seja uma das melhores analogias para arquitetura moderna.

Seu servidor chegou a 90% de CPU?

Adicionamos instâncias.

         TRAFFIC
            |
            v
      LOAD BALANCER
       / / / | \ \ \
      v v v  v  v v v
     APP APP APP APP APP
              |
              v
           DATABASE

Excelente!

Só existe um pequeno detalhe.

Todas estão acessando o mesmo banco.

Resultado:

DATABASE
CPU 100%
CONNECTIONS 100%
I/O 100%

STATUS:

       🔥

Escalamos o frontend.

E transformamos o banco em gargalo.

Jack Colton provavelmente resumiria:

Mais camelos não criam mais água.


🧊 5. Cache — a cantina que Jack encontrou ontem

Você atravessa uma cidade e encontra água.

Jack marca no mapa:

Água aqui.

No dia seguinte ele passa novamente.

Excelente.

Não precisamos procurar outra vez.

Isso é praticamente cache.

REQUEST
   |
   v
 CACHE ---- HIT ----> RESPONSE
   |
  MISS
   |
   v
DATABASE

O problema aparece quando alguém fecha a cantina.

O mapa continua dizendo:

Água aqui.

Mas a informação ficou velha.

Temos um stale cache.

Por isso uma das frases mais famosas da computação continua sendo verdadeira:

Existem problemas particularmente difíceis relacionados à invalidação de cache.

Porque cache não significa apenas armazenar informação.

Significa decidir:

quando confiar nela.


🏘️ 6. CDN — coloque suprimentos próximos de quem precisa

Imagine que toda vez que Jack quisesse água no Egito alguém precisasse buscá-la no Brasil.

Funcionaria?

Tecnicamente, sim.

Seria eficiente?

Nem um pouco.

CDNs aproximam determinados conteúdos dos usuários.

Em vez de:

São Paulo
    |
    |
    |
    |
    +-----------------------> Tokyo

podemos distribuir conteúdo por pontos geograficamente próximos.

Resultado:

menos latência, menos tráfego na origem e melhor experiência.

Mas novamente existe trade-off.

Quanto mais cópias distribuímos, mais precisamos pensar em:

sincronização, atualização e invalidação.


📦 7. Queue — Jack não precisa carregar tudo agora

Chegam 100.000 pedidos simultaneamente.

Sem fila:

100.000 REQUESTS
        |
        v
     SERVER
        |
       💥

Com fila:

REQUESTS
   |
   v
+---------+
|  QUEUE  |
+---------+
   |
   v
CONSUMERS

A fila funciona como amortecedor.

Ela absorve bursts.

O produtor pode continuar produzindo enquanto consumidores processam dentro de sua capacidade.

Maravilhoso.

Até aparecer:

QUEUE DEPTH

10
100
1.000
10.000
100.000
1.000.000

Jack olha para aquilo e pergunta:

“Nós estamos processando ou apenas acumulando o problema?”

Bingo.

Isso é backpressure.


🧨 8. Retry — às vezes insistir piora tudo

Imagine Jack tentando abrir uma porta.

Não abriu.

Ele tenta novamente.

Depois novamente.

Depois 500 pessoas começam a chutar a porta simultaneamente.

A porta não fica mais disponível.

Ela provavelmente deixa de existir. 😂

Em sistemas distribuídos acontece algo semelhante.

REQUEST
   |
 TIMEOUT
   |
 RETRY
   |
 TIMEOUT
   |
 RETRY
   |
 RETRY
 RETRY
 RETRY

Temos uma retry storm.

Por isso entram estratégias como:

timeout
exponential backoff
jitter
circuit breaker
retry limits

Resiliência não significa:

tente infinitamente.

Significa:

saiba quando parar.


💾 9. Replication — nunca viaje com a única cópia do mapa

Aqui Jack seria excelente DBA.

Temos:

PRIMARY
   |
   +------ REPLICA 1
   |
   +------ REPLICA 2

Se o primary desaparecer, ainda temos alternativas.

Mas replicação cria uma pergunta interessantíssima:

Quando uma informação muda no primary, quando as réplicas passam a conhecer essa mudança?

Imediatamente?

Depois de alguns milissegundos?

Segundos?

Minutos?

Daí entramos no maravilhoso pântano da:

consistência.

E descobrimos que ter várias cópias é fácil; garantir o comportamento esperado entre elas é a aventura.


🧩 10. Sharding — dividir o mapa

Imagine uma tabela gigantesca.

CUSTOMERS

1
2
3
...
900.000.000

Podemos dividir:

SHARD A
customers 1-300M

SHARD B
customers 300M-600M

SHARD C
customers 600M-900M

Agora distribuímos armazenamento e processamento.

Fantástico.

Até alguém perguntar:

“Quero uma consulta envolvendo clientes dos três shards.”

😐

Jack lentamente guarda o mapa.

Porque novamente:

ganhamos escala e compramos complexidade.


🦖 11. Agora entra o velho dinossauro IBM Z

Aqui a aventura muda completamente.

Enquanto muita arquitetura moderna nasceu tentando descobrir como coordenar milhares de máquinas menores, o mainframe evoluiu durante décadas com uma obsessão diferente:

executar workloads críticos com altíssima disponibilidade, isolamento, gerenciamento e previsibilidade.

Não significa que IBM Z elimina System Design.

Muito pelo contrário.

Temos:

                INTERNET
                    |
                    v
             API MANAGEMENT
                    |
                    v
             z/OS Connect
                    |
          +---------+---------+
          |                   |
          v                   v
        CICS                  MQ
          |                   |
          v                   v
         Db2                CICS
                              |
                              v
                             Db2

Agora aparecem exatamente as perguntas do barco da imagem.

Quanto tráfego?

Qual latência?

Qual TPS?

Qual prioridade?

Qual transação pode esperar?

Qual não pode?

O que ocorre se Db2 estiver degradado?

O que acontece se MQ começar a acumular mensagens?

Qual é nosso recovery?

Como detectaremos o problema?


🎩 12. WLM — o guia da expedição

Aqui encontramos uma das coisas que considero fascinantes no z/OS.

Workload Manager.

Imagine três workloads:

PAGAMENTO PIX
RELATÓRIO GERENCIAL
BATCH ESTATÍSTICO

Todos querem recursos.

Mas eles não possuem a mesma importância.

Se estamos no meio de uma tempestade, Jack Colton não perguntaria:

“Quem pediu água primeiro?”

Ele perguntaria:

“Quem precisa dela para continuarmos vivos?”

Essa é uma excelente forma didática de introduzir WLM.

Service classes, goals e importância ajudam o sistema a administrar recursos considerando objetivos do negócio.


🔭 13. Observability — Jack precisa saber onde estão os inimigos

Temos uma aplicação lenta.

A pior resposta possível:

“Parece ser o mainframe.”

😂

Então vamos investigar.

CLIENT
  |
  | 20 ms
  v
API
  |
  | 40 ms
  v
GATEWAY
  |
  | 30 ms
  v
CICS
  |
  | 2100 ms
  v
DB2

Agora temos evidência.

Observabilidade transforma:

“acho que...”

em:

“está acontecendo aqui.”

Logs dizem o que aconteceu.

Metrics mostram como o sistema está se comportando.

Traces ajudam a mostrar por onde a transação passou.

Alertas dizem:

Jack, temos problema.


🚨 14. Failover — sempre tenha uma rota de fuga

Jack Colton jamais entraria numa fortaleza sem olhar por onde poderia sair.

Arquitetura deveria possuir a mesma paranoia saudável.

Perguntamos:

E SE A API CAIR?

E SE O BANCO CAIR?

E SE UMA REGIÃO CAIR?

E SE A REDE CAIR?

E SE MQ PARAR?

E SE O STORAGE FALHAR?

E SE O OPERADOR ERRAR?

E essa última merece destaque.

Porque componentes falham.

Software possui bugs.

Discos quebram.

Redes desaparecem.

Mas seres humanos também cometem erros.

Por isso arquitetura resiliente não considera somente machine failure.

Considera também human failure.


👨‍💻 15. People + Process + Technology

E chegamos à pequena placa escondida no navio da imagem.

PEOPLE
PROCESS
TECHNOLOGY

Essa talvez seja mais importante do que todas as outras.

Você pode ter:

Kafka
Redis
Kubernetes
OpenShift
MQ
CICS
Db2
WLM
Sysplex
Observability
AI

Mas às 03:17 surge um alerta.

Ninguém sabe quem é responsável.

O runbook está desatualizado.

O telefone do especialista mudou.

A senha emergencial expirou.

A documentação aponta para um servidor aposentado em 2019.

Então temos uma infraestrutura extremamente sofisticada administrada por:

¯\_(ツ)_/¯

🏜️ 16. A maior lição de Jack Colton

Jack não sobrevivia porque possuía sempre o melhor equipamento.

Ele sobrevivia porque conseguia adaptar-se ao ambiente.

Essa é uma belíssima definição de arquitetura resiliente.

Não precisamos construir um sistema incapaz de falhar.

Provavelmente nem conseguiríamos.

Precisamos construir sistemas capazes de:

detectar, absorver, degradar controladamente, recuperar e aprender.

Isso muda completamente a mentalidade.


🥚 Easter egg — A verdadeira Joia do Nilo

Durante todo o artigo estivemos procurando a joia.

Talvez ela estivesse diante de nós desde o início.

Não era:

CACHE

Nem:

QUEUE

Nem:

SHARDING

Nem mesmo:

MAINFRAME

A verdadeira joia era:

TRADE-OFF

Porque cada decisão arquitetural é uma troca.

Performance    ↔ Cost
Consistency    ↔ Availability
Simplicity     ↔ Flexibility
Latency        ↔ Durability
Scale          ↔ Complexity
Automation     ↔ Control

E existe uma última lição que Jack Colton provavelmente escreveria na porta do CPD:

Nunca escolha uma tecnologia apenas porque ela atravessou o deserto de outra pessoa. Descubra primeiro qual é o seu deserto.

☕🏜️💻

No Bellacosa Mainframe, System Design não é desenhar uma arquitetura que pareça bonita quando o mar está calmo.

É olhar para as pedras, tubarões, tempestades, gargalos, hot partitions, latência, falhas em cascata e aquele programa COBOL de 1997 que ninguém quer tocar...

colocar os óculos escuros...

e perguntar:

“Certo. Se tudo isso der errado às 03:17, como continuamos navegando?”

Aí, meu caro aventureiro, começa o verdadeiro System Design.

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