Entendendo Listeners e Handlers

Falando um pouco mais sobre o que se ganha com o Tuxedo e que se não souber usar só vai atrapalhar, vamos discutir rapidamente sobre Listeners e Handlers.

 

Um pouco de feijão com arroz

Tuxedo é uma plataforma que possui uma série de características próprias, por exemplo, controle de acesso, protocolo de comunicação e controle de threads. Existe também a definição de tipos de clientes entre clientes locais e clientes remotos.

Clientes locais são aqueles que acessam o ambiente transacional a partir de uma máquina que faça parte do ambiente, sem a necessidade de uso de rede. Esses clientes utilizam a memória compartilhada (via IPC) para se comunicar.

Cliente remoto é todo aquele que acessa o ambiente transacional por meio de um canal de rede.

 

Listener, o porteiro

Para que clientes remotos possam acessar o ambiente transacional é necessário que exista uma porta de acesso, na arquitetura Tuxedo uma das portas mais conhecidas é o Workstation Listener, que em poucas palavras é um dos São Pedros da plataforma, é ele quem decide quem entra e quem fica de fora e quando entra, quais seus direitos.

Como todo bom chefe, o Listener delega o trabalho para os Workstation Handlers, esses sim fazem o trabalho sujo de ligar o cliente aos serviços que desejam utilizar.

Mas chega de metáforas ruins, vamos ver como isso funciona na prática e com que temos que nos atentar.

 

Abra una porta e ganhe uma peneira

O Workstation Listener (WSL) é o servidor que disponibiliza uma porta de acesso ao Tuxedo, a definição de qual será a porta que o servidor deverá abrir é uma decisão tomada no momento da configuração.

WSL     SRVGRP="SG1110"   SRVID=3
        RESTART=Y GRACE=0 MAXGEN=100
        CLOPT="-A -- -n //hostname:10000 -m 2 -M 2"

No exemplo de configuração acima é indicado endereço de rede “//hostname:10000″, informando que a porta “10000” deve ser usada para acesso dos clientes externos, como é nos detalhes que mora o perigo, o que faz os administradores de ambientes Tuxedo muitas vezes quebrarem a cabeça é o que vem logo em seguida, os parâmetros “-m 2 -M 2″.

Os parâmetros m e M indicam qual o número mínimo e o número máximo de  Workstation Handlers devem ser ativados associado ao servidor WSL em questão, no exemplo são fixos dois servidores.

Workstation Handler é um delegado do cliente remoto, ele recebe os comandos enviados pelo cliente remoto e executa em seu nome no ambiente local Tuxedo, acessando diretamente a memória compartilhada. Para que seja possível receber os comandos do cliente remoto, o Handler abre uma porta de conexão para que possa ser realizada a comunicação, diferente do WSL onde se conhece a porta que se abrirá, as portas abertas pelo Handler são de conhecimento do Listener, sendo assim, ao carregar o ambiente podemos ter algo parecido com a imagem abaixo.

 

Delegação de responsabilidade

O processo de acesso do cliente ao ambiente Tuxedo é executado seguindo uma série de ações, como o único endereço de acesso conhecido é o do WSL (o endereço declarado na configuração), o cliente se conecta a esse servidor e executa a autenticação no ambiente, concluída essa etapa, o WSL delega a responsabilidade de tratar as operações do cliente para um dos WSH disponível.

Ao final, o WSL responde para o cliente o endereço de rede do Handler que deve ser invocado nas chamadas, o cliente por sua vez, se conecta ao servidor WSH indicado.

Se os parágrafos acima ficaram confusos, não se preocupe, aqui embaixo temos mais um diagrama ilustrativo para ajudar.

Sequência de ações:

  1. O cliente é autenticado no WSL;
  2. O cliente é delegado para o WSH disponível;
  3. É informado ao cliente o WSH de conexão;
  4. O cliente se conecta ao WSH indicado.

Passando pelo muro de fogo

Como comentado anteriormente, a única porta conhecida previamente é a do servidor WSL, por outro lado, a comunicação entre o cliente e o ambiente Tuxedo utiliza ao menos duas portas, fazendo as contas, sobra uma porta que não se conhece, além disso, não é possível definir empiricamente qual porta o WSH utilizará, em cada carga do ambiente são selecionadas portas distintas.

Após a carga do servidor:

tcp    0   0 127.0.0.1:10000         0.0.0.0:*           LISTEN      24706/WSL
tcp    0   0 127.0.0.1:26055         0.0.0.0:*           LISTEN      24707/WSH
tcp    0   0 127.0.0.1:26056         0.0.0.0:*           LISTEN      24708/WSH

Após o reinicio do servidor:

tcp    0   0 127.0.0.1:10000         0.0.0.0:*           LISTEN      24706/WSL
tcp    0   0 127.0.0.1:30458         0.0.0.0:*           LISTEN      24707/WSH
tcp    0   0 127.0.0.1:30459         0.0.0.0:*           LISTEN      24708/WSH

Em ambientes corporativos, por questões de segurança toda comunicação entre equipamentos é doutrinada por firewall, faz parte da doutrina definir quais portas podem ser acessadas em determinado servidor, se não é conhecida a porta que o WSH utilizará o cliente conseguirá acessar o WSL mas não conseguirá completar a conexão com o WSH pois será impedido pelo firewall.

Para se conhecer as portas que serão utilizadas pelo WSH é necessário declarar na configuração servidor WSL, no entanto, deve-se ter muito cuidado com essa questão, caso as portas declaradas estejam em uso no momento da carga do servidor, o ambiente não será carregado adequadamente.

WSL     SRVGRP="SG1110"   SRVID=3
        RESTART=Y GRACE=0 MAXGEN=100
        CLOPT="-A -- -n //hostname:10000 -m 4 -M 10 -p 10001 -P 10010"

Como evolução da configuração original, são usados o parâmetros p e P para a carga do servidor WSL, esses parâmetros indicam a menor e a maior porta a serem alocadas pelos WSH quando carregados, os valores padrão são “-p 2048 -P 65535″.

Portas alocadas pelos WSH quando definida a faixa permitida:

tcp    0   0 127.0.0.1:10000         0.0.0.0:*          LISTEN      28559/WSL       
tcp    0   0 127.0.0.1:10001         0.0.0.0:*          LISTEN      28562/WSH       
tcp    0   0 127.0.0.1:10002         0.0.0.0:*          LISTEN      28563/WSH       
tcp    0   0 127.0.0.1:10009         0.0.0.0:*          LISTEN      28560/WSH       
tcp    0   0 127.0.0.1:10010         0.0.0.0:*          LISTEN      28561/WSH

Agora que se conhece as portas pelas quais o cliente irá se comunicar com o WSH, é possível cadastrar as regras no firewall para que a comunicação possa ocorrer sem problemas.

 

Quando fucinho não é tomada

Permitir o acesso de clientes remotos significa que esses clientes podem estar em qualquer lugar, como por exemplo em outra rede, caso a comunicação entre as redes envolva o mascaramento dos endereços internos por meio de NAT (Network Address Translation), além de indicar o IP/DNS interno e a porta que o servidor utilizará na máquina, é necessário indicar o IP/DNS e a porta pública que os clientes devem utilizar fora da rede interna para acessar o WSL.

Para indicar a configuração de acesso via rede pública utiliza-se o parâmetro H.

WSL     SRVGRP="SG1110"   SRVID=3
        RESTART=Y GRACE=0 MAXGEN=100
        CLOPT="-A -- -n //hostname:10000 -m 4 -M 10 -p 10001 -P 10010
                     -H //publicname:10000"

No exemplo acima a configuração indica que o servidor irá abrir a porta local 10000 no IP associado ao nome hostname e que receberá comunicação pelo IP associado ao nome publicname.