Translate

quarta-feira, 1 de julho de 2020

CICS Conversacional e Pseudo-Conversacional - Parte I

 

Bellacosa Mainframe e as tecnicas de conversação em programas CICS parte I

☕ Um Café no Bellacosa Mainframe

CICS Conversacional e Pseudo-Conversacional

Parte 1 — Das Conversas Eternas ao Modelo que Move o Mundo

"Salve, jovem Padawan Mainframe! Pegue seu café, abra uma sessão do SDSF, deixe o IPCS de prontidão e venha comigo entender uma das maiores sacadas de engenharia já criadas pela IBM. Hoje vamos falar sobre dois conceitos que sustentam boa parte das aplicações bancárias do planeta: CICS Conversacional e Pseudo-Conversacional."


O que é uma aplicação Conversacional?

Imagine que você está conversando com alguém pelo telefone.

Você liga.

A pessoa atende.

A ligação permanece aberta.

Vocês conversam.

Você pensa.

Procura um documento.

Vai tomar café.

Volta.

Continua falando.

Finalmente desliga.

Foi exatamente esta filosofia que inspirou o primeiro modelo de aplicações CICS.

Modelo Conversacional

O programa permanece residente na memória durante toda a interação com o usuário.

Visualmente:

Usuário
   │
EXEC CICS RECEIVE
   │
Programa permanece ativo
   │
Processa
   │
EXEC CICS SEND
   │
Espera usuário
   │
EXEC CICS RECEIVE
   │
Processa
   │
EXEC CICS SEND
   │
...
   │
EXEC CICS RETURN

O programa nunca sai da memória.

A task permanece viva.

A TCA continua alocada.

O TCB continua associado.

A área de trabalho permanece disponível.

Tudo fica esperando.

Inclusive o usuário.


O problema

Vamos imaginar um banco em 1982.

Existem:

5.000 terminais.

3.000 usuários.

2.000 consultas simultâneas.

Cada usuário fica parado.

Lendo a tela.

Pensando.

Conferindo CPF.

Procurando documentos.

Tomando café.

Atendendo telefone.

Conversando.

Enquanto isso...

O programa continua residente.

A task continua viva.

O CICS continua consumindo recursos.

A memória continua ocupada.


O nascimento da pseudo-conversação

Os engenheiros da IBM olharam para isso e disseram:

"Por que manter um programa carregado esperando um ser humano pensar?"

E a resposta foi brilhante.

Não vamos esperar.

Vamos embora.

Quando o usuário voltar...

Criamos outra task.

Recuperamos o estado.

Continuamos.

Nascia a pseudo-conversação.


O que é Pseudo-Conversação?

A pseudo-conversação é um modelo onde o programa não fica esperando.

Ele:

Mostra a tela.

Encerra a task.

Libera recursos.

Quando o usuário aperta ENTER...

Uma nova task é criada.

Tudo continua.

Como se nada tivesse acontecido.


Fluxo


Usuário

   │

Executa CLI1

   │

Programa COBOL

   │

SEND MAP

   │

RETURN TRANSID

COMMAREA

   │

Task termina



=====================


Usuário digita


ENTER


=====================


Nova Task


Recebe COMMAREA


RECEIVE MAP


Processa


SEND MAP


RETURN


É quase uma ilusão.

Parece conversacional.

Mas não é.

Por isso o nome:

Pseudo-Conversacional.


Comparando os dois modelos

CaracterísticaConversacionalPseudo
Task ativaSimNão
Programa residenteSimNão
Consome memóriaAltaBaixa
EscalabilidadeRuimExcelente
Usado atualmenteRaroPadrão
Ideal para milhares usuáriosNãoSim

Por que a IBM venceu?

Porque ela resolveu um problema gigantesco.

Imagine.

100 mil usuários.

Cada um esperando.

Em modelo conversacional.

Seria inviável.

No pseudo.

As tasks duram poucos milissegundos.

O usuário pensa.

Mas o mainframe trabalha em outra coisa.


Analogia moderna

Conversacional:

Você deixa o Uber esperando na porta enquanto toma banho.

Pseudo-conversacional:

Você pede outro Uber quando estiver pronto.

O custo muda completamente.


O segredo: COMMAREA

A memória da aplicação.

Entre uma task e outra.

Exemplo:


01 WS-COMM.

   05 WS-CLIENTE.

      10 WS-CODIGO PIC 9(6).

      10 WS-NOME PIC X(30).

      10 WS-PAGINA PIC 99.

      10 WS-MODO PIC X.



Primeira execução

Como descobrir?

Usando:

EIBCALEN



IF EIBCALEN = ZERO

   PERFORM PRIMEIRA-VEZ

END-IF


Primeira vez.

Sem COMMAREA.


Retorno



IF EIBCALEN > ZERO

   PERFORM RETORNO


END-IF


Existe contexto.

Usuário voltou.


Salvando estado



EXEC CICS RETURN

TRANSID('CLI1')

COMMAREA(WS-COMM)

LENGTH(100)

END-EXEC.


CICS guarda.

Task termina.

Memória liberada.


Criando nova task

Usuário aperta ENTER.

CICS cria:

Nova TCA

Nova Task

Novo TCB

Novo EIB

Mas entrega a COMMAREA.

Tudo continua.

Mágica.

Engenharia.

IBM.


O papel do BMS

Sem BMS.

Pseudo-conversação seria muito mais complicada.

Precisaríamos:

Salvar coordenadas.

Salvar cursor.

Salvar atributos.

Salvar campos.

O BMS faz tudo isso.


SEND MAP

Mostra tela.



EXEC CICS SEND MAP

MAP('TELA1')

MAPSET('CLIMAP')

ERASE

FREEKB

END-EXEC.



RECEIVE MAP

Recebe dados.



EXEC CICS RECEIVE MAP

MAP('TELA1')

MAPSET('CLIMAP')

INTO(TELA1I)

END-EXEC.



Curiosidade Bellacosa Mainframe

Muitos sistemas bancários desenvolvidos em 1985 ainda utilizam exatamente este modelo.

Mudou o hardware.

Mudou o storage.

Mudou a CPU.

Mudou a interface.

Mas a arquitetura continua.

E continua funcionando.

Talvez esta seja uma das maiores demonstrações da elegância da engenharia IBM.


Easter Egg Mainframe

Alguns desenvolvedores chamavam aplicações conversacionais de:

Programas preguiçosos.

Porque passavam a maior parte do tempo...

Esperando o usuário pensar.

Enquanto os programas pseudo-conversacionais eram apelidados de:

Programas ninja.

Aparecem.

Executam.

Desaparecem.

Voltam.

Executam.

Somem novamente.

Tudo em poucos milissegundos.


Continua...

Na Parte 2 veremos:

✔ Problemas clássicos do modelo conversacional;

✔ Deadlocks de recursos;

✔ Pseudo-conversação com múltiplas telas;

✔ COMMAREA versus Channels e Containers;

✔ Web Services no CICS;

✔ REST, SOAP e z/OS Connect;

✔ Exemplos COBOL completos;

✔ Boas práticas;

✔ Troubleshooting;

✔ Curiosidades e easter eggs pouco conhecidos do universo CICS.


Sem comentários:

Enviar um comentário