Carga Automatica de Servidores Tuxedo

A capacidade do Tuxedo de gerenciar as instâncias de servidores ativas é possivelmente um dos recursos mais mal explorados pelos clientes com que tive contato, isso por que, a configuração do recurso não é obvia como a maioria dos demais e depende do entendimento de outros recursos para seu uso.

O bom funcionamento de um ambiente é (entre outras coisas) diretamente ligado a capacidade desse ambiente atender a um volume de trabalho que lhe é conferido, quando capacidade de resposta é referência ao número disponível de um determinado recurso, temos nas mãos um paradigma de gestão, pois no ambiente computacional todo recurso possui limitações.

A definição de valores fixos para um determinado recurso pode ocasionar comportamentos distintos:

  • Os valores serem superiores ao necessário e gerar o consumo desnecessário de recursos no ambiente computacional.
  • Os valores serem inferiores ao necessário e gerar lentidão e ou indisponibilidade do recurso. Obrigando a alocação de recursos operacionais extras para gestão da indisponibilidade.

Em ambos os casos o resultado não será satisfatório, pois leva ao uso descomedido de recursos escassos, na busca de um uso racional, o Tuxedo nos oferece uma alternativa muito atraente.

 

Definição de Demanda x Capacidade de Resposta

Conhecer a demanda de um determinado servidor é um requisito não funcional que deve(ria) ser conhecido no momento da construção dos serviços. Uma vez que se conhece a demanda e é aferida a performance dos serviços no momento dos testes, é possível definir a performance do servidor e o número de instâncias necessárias para atender a demanda linear.

Sendo, R tempo de resposta média do servidor, D demanda diária de requisições e I o número de instâncias, podemos realizar o seguinte cálculo, divide-se as requisições diárias pelo número de segundos de um dia e multiplica-se pelo tempo de resposta do serviço.

Se R = 2s e D = 500.000, precisamos de 11.5 instâncias ativas para podermos atender a carga linear de requisições. A rigor, são muito raros os cenários onde um serviço atende a demanda regular de invocações, é comum haver variações durante o período, podendo gerar um ou mais momentos de pico e consequentemente momentos de vales.

A variação de demanda obriga o administrador do ambiente Tuxedo a pensar nos valores adequados de instâncias que vão atender a demanda de pico, a demanda média, a demanda de vale do serviço e qual tempo de resposta é considerado aceitável para um pequeno nível de retenção das chamadas.

Tendo em conta o seguinte cenário:

O serviço X é uma operação transacional com o SLA é de 5s, o tempo médio de resposta em ambiente operacional é de 1.3s e será invocado 200.000 vezes durante o dia, sendo que, 40% dessas chamadas serão concentradas no período das 12pm-14-pm e 18h-20h.

É necessário se preocupar com a demanda de pico e a demanda regular, não há informação suficiente para avaliar a demanda de vale para o serviço, dessa forma, o volume de pico é:

  • 40% das transações: 80.000
  • Período do volume: 4 horas
  • Transações por segundo: 5.6
  • Instâncias necessárias: (5.6 x 1.3) = 8 (como não existe meia instância, arredonda-se para cima)

Demanda regular:

  • 60% das transações: 120.000
  • Período do volume: 20 horas
  • Transações por segundo: 1.7
  • Instâncias necessárias (1.7 x 1.3) = 3

Requisições Previstas x Instâncias Necessárias

Os números acima são valores absolutos, indicam a média absoluta de requisições no momento de baixa demanda e o máximo absoluto no momento de pico, no entanto, existe uma variação entre os dois momentos, o ambiente pode estar operando em um regime abaixo da média no momento A e com o aumento da carga, no momento alcança o pico após 1 hora de trabalho, isso indica que não é necessário ocupar antecipadamente os recursos necessários para atender uma demanda esperada, sendo que, esse volume poderá levar uma hora para ser alcançado.

A melhor forma de gerir o número de instâncias disponíveis é avaliar a demanda de requisições e a capacidade de resposta de forma dinâmica, elevando o número de instâncias disponíveis de acordo com o aumento de demanda e reduzindo a capacidade disponível sempre que aferida disponibilidade ociosa, liberando recursos para outros componentes do ambiente.

Ativação dinâmica de Instâncias

 

O gráfico acima apresenta o comportamento do Tuxedo quando definida a adequação dinâmica de recursos, no período de 2 minutos, um determinado serviço teve um aumento de invocações, sendo que, o número de instâncias ativas não eram capazes de atender adequadamente, para isso, levando em conta os parâmetros definidos, o Tuxedo ativou instâncias extras do servidor para que fosse possível adequar a capacidade de resposta, em seguida, desabilitou algumas instâncias por não serem mais necessárias.

 

Definindo o Comportamento do Servidor Tuxedo

Para ativação e desativação dinâmica de servidores no Tuxedo, é necessário definir o número médio requisições retidas por um determinado período de tempo no ambiente, por exemplo:

  • Sempre que o servidorX tiver uma média de 4 requisições ou mais retidas por um tempo superior a 3 segundos, deve ser ativada uma nova instância, até que se alcance o valor máximo de instâncias prevista ou que o número de mensagens retidas fique abaixo do valor definido.
  • Quando o servidorX tiver 2 requisições ou menos em média retidas por mais de 30 segundos, deve ser desativada uma instância do servidor até que se alcance o número mínimo de instâncias previstas.

Uma vez que se prevê a demanda e faz-se a definição da adequação da capacidade, não é necessário executar nenhum tipo de ação operacional para que seu serviço atenda de forma correta a variações de volume de requisições.

Como dito no inicio do post, para que funcione a capacidade de adequação de carga no Tuxedo, é necessário conhecer uma série de características distintas que unidas permite tirar o melhor da plataforma, nesse momento, iremos abstrair o conhecimento claro dessas outras características e vamos nos focar na configuração do recurso de gestão dinâmica, para isso devem ser definidos os seguintes parâmetros.

Parâmetros do Servidor

  • MIN – Número mínimo de servidores, número de instâncias que devem ser carregadas ao ativar o servidor.
  • MAX – Número máximo de instâncias do servidor.
  • RQADDR – Nome de identificação da fila de requisições do servidor.
  • REPLYQ – Indica se o servidor necessita de fila de resposta.
  • CLOPT – Parâmetros de ativação do servidor.
O parâmetro CLOPT é onde indica-se os parâmetros para ativação e desativação de instâncias, usando como base os valores do exemplo acima, obtemos a seguinte configuração:
CLOPT="-A -p 2,30:4,3"

Detalhe:

-p – Indica a opção de controle do número de instâncias.

<carga regular> , <período> : <carga superior> , <período> – Indica as características da carga regular para desativação de instâncias e da carga superior para ativação de novas instâncias.

Cada servidor deve usar uma fila exclusiva, não pode ser feita a definição de uma mesma fila para serviços distintos.

Uma visão um pouco mais ampla da configuração nos apresenta:

ServidorX
    SRVID=100 SRVGRP=APGR101
    MIN=3  MAX=10
    RQADDR=SERVXRQ  REPLYQ=Y
    CLOPT="-A -p 2,30:4,3"

 

Antes de Encerrar…

… algumas considerações finais, não foi discutido aqui detalhes básicos da arquitetura Tuxedo, como por exemplo, ipc, computação distribuída, load-balance e peso de invocação, esses temas ficam para um momento oportuno.

Instâncias do servidor?

Para quem é novo no mundo Tuxedo, entender alguns termos e algumas características é fundamental para conseguir extrair o máximo dessa plataforma transacional.

  • Servidor – Aplicação de negócio (binário) que é executado associado ao Tuxedo.
  • Serviço- Interface ou interfaces providas por um servidor.
  • Máquina – Equipamento físico onde é executado o ambiente transacional.