Entendendo Listeners e Handlers
Publicado por rst em 4/jan/2012 no TUXEDO | 0 comentário
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:
- O cliente é autenticado no WSL;
- O cliente é delegado para o WSH disponível;
- É informado ao cliente o WSH de conexão;
- 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.
Leia mais
