Apêndice C. Arquivos de Configuração de Amostra

Este apêndice contém arquivos de configuração de amostra para o componente Dispatcher do Balanceador de Carga.

Arquivos de Configuração do Balanceador de Carga de Amostra

Os arquivos de amostra estão localizados no seguinte diretório:

Sistemas — AIX, Linux e Solaris do Arquivo de Configuração Dispatcher

#!/bin/bash
#
# configuration.sample - Arquivo de configuração de amostra para o
componente Dispatcher
#
#
# Assegure-se de que o usuário root seja aquele que executa este script.
#
# iam=`whoami`
 
# if [ "$iam" != "root" ]if [ "$iam" != "root" ]
#  then 
#  echo "Você deve efetuar login como root para executar este script"
#   exit 2
# fi 

#
# Primeiro inicie o servidor
#
# dsserver start
# sleep 5

#
# Em seguida, inicie o executor
#
# dscontrol executor start

#
#  O Dispatcher pode ser removido a qualquer momento usando os 
# comandos "dscontrol executor stop" e "dsserver stop" para 
# parar o executor e o servidor respectivamente antes da remoção do 
# software Dispatcher.
#
# A próxima etapa na configuração do Dispatcher é configurar o 
# NFA (Non-Forwarding Address) e o(s) endereço(s) do(s) cluster(s).
#
# O NFA é usado para acessar remotamente a máquina do Dispatcher 
# para propósitos de administração ou configuração. Esse 
# endereço é necessário, pois o Dispatcher encaminhará pacotes 
# para o(s) endereço(s) do(s) cluster(s).
# 
# O endereço do CLUSTER é o nome do host (ou endereço IP)  ao 
# qual os clientes remotos serão conectados.
#
# Em qualquer lugar neste arquivo, é possível usar nomes do host e endereços 
# IP alternadamente.
#

# NFA=hostname.domain.name
# CLUSTER=www.yourcompany.com

# echo "Carregando o Non-Forwarding Address"
# dscontrol executor set nfa $NFA

#
#  A próxima etapa na configuração do Dispatcher é criar 
# um cluster. O Dispatcher roteará pedidos enviados para o 
# endereço do cluster para as máquinas servidor correspondentes
# definidas para esse cluster. Você pode configurar e processar 
# múltiplos endereços de cluster usando o Dispatcher. 

# Use uma configuração semelhante para CLUSTER2, CLUSTER3, etc.
#

# echo "Carregando o primeiro o endereço do CLUSTER"
# dscontrol cluster add $CLUSTER

#
# Agora devemos definir as portas que este cluster usará. Quaisquer 
# pedidos recebidos pelo Dispatcher em uma porta definida serão 
# encaminhados para a porta correspondente de uma das máquinas 
# do servidor.
#

# echo "Criando portas para CLUSTER: $CLUSTER"

# dscontrol port add $CLUSTER:20+21+80

#
# A última etapa é incluir cada uma das máquinas servidor nas 
# portas neste cluster.
# Novamente, é possível usar o nome do host ou o endereço IP 
# da máquinas servidor.
#

# SERVER1=server1name.domain.name
# SERVER2=server2name.domain.name 
# SERVER3=server3name.domain.name

# echo "Incluindo máquinas servidor"
# dscontrol server add $CLUSTER:20+21+80:
# $SERVER1+$SERVER2+$SERVER3

#
#  Iniciaremos agora os componentes de balanceamento de carga do 
# Dispatcher. O componente principal de balanceamento de carga é denominado 
# gerenciador e os segundos componentes de balanceamento de carga são os 
# orientadores. Se o gerenciador e os orientadores não estiverem em execução, o 
# Dispatcher enviará pedidos em um formato round-robin. Depois que o 
# gerenciador foi iniciado, as decisões de peso baseadas no número 
# de conexões novas e ativas são implementadas e os pedidos 
# recebidos são enviados ao melhor servidor. Os orientadores fornecem ao 
# gerenciador insight adicional em uma habilidade de servidores para pedidos de 
# serviço, e também detectando se um servidor está ativo. Se
# um orientador detectar que um servidor está inativo, ele será 
# marcado como inativo (somente se as proporções do gerenciador tiverem sido 
# configuradas para incluir a entrada do orientador) e nenhum pedido adicional será
# roteado para o servidor.

#  A última etapa da configuração dos componentes de balanceamento de carga 
# é configurar as proporções do gerenciador. O gerenciador atualiza o 
# peso de cada um dos servidores baseado em quatro políticas:
#   1. O número de conexões ativas em cada servidor.
#   2. O número de novas conexões para cada servidor.
#   3. Entrada dos orientadores.
#   4. Entrada do orientador de nível de sistema.
# Essas proporções devem somar até 100. Como um exemplo, configurando as 
# proporções do gerenciador como
#    dscontrol manager proportions 48 48 0 0
# entrada de 48% de conexões novas e ativas serão fornecidas na 
# decisão de peso, os orientadores contribuirão com 4% e 
# a entrada do sistema não será considerada.
#
# NOTA: Por padrão as proporções do gerenciador são configuradas como 50 50 0 0
#

# echo "Iniciando o gerenciador..."
# dscontrol manager start

# echo "Iniciando o orientador FTP na porta 21 ..."
# dscontrol advisor start ftp 21
# echo "Iniciando o orientador HTTP na porta 80 ..."
# dscontrol advisor start http 80
# echo "Iniciando o orientador Telnet na porta 23 ..."
# dscontrol advisor start telnet 23
# echo "Iniciando o orientador SMTP na porta 25 ..."
# dscontrol advisor start smtp 25
# echo "Iniciando o orientador POP3 na porta 110 ..."
# dscontrol advisor start pop3 110
# echo "Iniciando o orientador NNTP na porta 119 ..."
# dscontrol advisor start nntp 119
# echo "Iniciando o orientador SSL na porta 443 ..."
# dscontrol advisor start ssl 443
#

# echo "Configurando as proporções do gerenciador..."
# dscontrol manager proportions 58 40 2 0

#
# A etapa final da configuração da máquina do Dispatcher é definir 
# o alias do Network Interface Card (NIC).
#
# NOTA: NÃO use este comando em um ambiente de alta 
# disponibilidade. Os scripts go* configurarão a NIC e 
# o loopback, conforme necessário.
# dscontrol executor configure $CLUSTER

#  Se o endereço do cluster estiver em uma NIC ou sub-rede diferente 
#  do NFA, use o seguinte formato para o comando 
de configuração do cluster.
#  dscontrol executor configure $CLUSTER tr0 0xfffff800
#  em que tr0 é a NIC (tr1 para a segunda placa do token ring, en0 
#  para a primeira placa de Ethernet) e 0xfffff800 é uma máscara 
#  de sub-rede válida para o seu site.
#

#
# Os seguintes comandos são configurados como os valores padrão.  
# Use estes comandos como um guia a ser alterado dos padrões.
#  dscontrol manager loglevel    1
#  dscontrol manager logsize     1048576
#  dscontrol manager sensitivity 5
#  dscontrol manager interval    2
#  dscontrol manager refresh     2
#
#  dscontrol advisor interval ftp  21  5
#  dscontrol advisor loglevel ftp  21  1
#  dscontrol advisor logsize  ftp  21  1048576
#  dscontrol advisor timeout  ftp  21  unlimited
#  dscontrol advisor interval telnet 23 5
#  dscontrol advisor loglevel telnet 23 1
#  dscontrol advisor logsize  telnet 23 1048576
#  dscontrol advisor timeout  telnet 23 unlimited
#  dscontrol advisor interval smtp 25  5
#  dscontrol advisor loglevel smtp 25  1
#  dscontrol advisor logsize  smtp 25  1048576
#  dscontrol advisor timeout  smtp 25  unlimited
#  dscontrol advisor interval http 80  5
#  dscontrol advisor loglevel http 80  1
#  dscontrol advisor logsize  http 80  1048576
#  dscontrol advisor timeout  http 80  unlimited
#  dscontrol advisor interval pop3 110 5    
#  dscontrol advisor loglevel pop3 110 1
#  dscontrol advisor logsize  pop3 110 1048576
#  dscontrol advisor timeout  pop3 110 unlimited
#  dscontrol advisor interval nntp 119 5
#  dscontrol advisor loglevel nntp 119 1
#  dscontrol advisor logsize  nntp 119 1048576
#  dscontrol advisor timeout  nntp 119 unlimited
#  dscontrol advisor interval ssl  443 5
#  dscontrol advisor loglevel ssl  443 1
#  dscontrol advisor logsize  ssl  443 1048576
#  dscontrol advisor timeout  ssl  443 unlimited
#

Sistemas Windows do Arquivo de Configuração Dispatcher

O seguinte é um arquivo de configuração do Balanceador de Carga de amostra denominado configuration.cmd.sample para uso com o Windows.

@echo off
rem configuration.cmd.sample - Arquivo de configuração de amostra para o
componente Dispatcher.
rem

rem dsserver deve ser iniciado pelos Serviços

rem

rem
rem Em seguida, inicie o executor
rem
rem call dscontrol executor start

rem

rem A próxima etapa na configuração do Dispatcher é configurar o
rem NFA (Non-Forwarding Address) e configurar o(s) endereço(s) do(s) 
rem cluster(s).
rem

rem O NFA é usado para acessar remotamente a máquina 
rem do Dispatcher para propósitos de configuração de administração. Esse 
rem endereço é necessário, pois o Dispatcher encaminhará 
rem pacotes para o(s) endereço(s) do(s) cluster(s).

rem
rem O endereço do CLUSTER é o nome do host (ou endereço IP) ao qual 
rem os clientes remotos serão conectados.
rem

rem Em qualquer lugar neste arquivo, é possível usar nomes do host e endereços 
rem IP alternadamente. 
rem  NFA=[Non-Forwarding Address]
rem CLUSTER=[o nome do cluster]
rem

rem set NFA=hostname.domain.name
rem set CLUSTER=www.yourcompany.com

rem echo "Carregando o Non-Forwarding Address"
rem call dscontrol executor set nfa %NFA%

rem
rem Os seguintes comandos são configurados como valores padrão. 
rem Use esses comandos para alterar os padrões

rem  call dscontrol executor set fintimeout 30
rem
rem A próxima etapa na configuração do Dispatcher é criar 
rem um cluster. O Dispatcher roteará pedidos enviados para 
rem o endereço do cluster para as máquinas servidor correspondentes 
rem definidas para esse cluster. É possível configurar e servir
rem múltiplos endereços de cluster usando o Dispatcher.
rem Use uma configuração semelhante para CLUSTER2, CLUSTER3, etc.
rem

rem echo "Carregando o primeiro o endereço do CLUSTER"
rem call dscontrol cluster add %CLUSTER%

rem
rem Agora devemos definir as portas que este cluster usará. Quaisquer 
rem pedidos recebidos pelo Dispatcher em uma porta definida serão 
rem encaminhados para a porta
rem correspondente de uma das máquinas servidor.
rem

rem echo "Criando portas para CLUSTER: %CLUSTER%"
rem call dscontrol port add %CLUSTER%:20+21+80

rem
rem A última etapa é incluir cada uma das máquinas servidor nas 
rem portas neste cluster. Novamente, é possível usar o 
rem nome do host ou o endereço IP das máquinas servidor.
rem

rem set SERVER1=server1name.domain.name
rem set SERVER2=server2name.domain.name
rem set SERVER3=server3name.domain.name

rem echo "Incluindo máquinas servidor"
rem call dscontrol server add %CLUSTER%:20+21+80:
rem %SERVER1%+%SERVER2%+%SERVER3%

rem
rem Iniciaremos agora os componentes de balanceamento de carga do 
rem Dispatcher. O componente principal de balanceamento de carga é denominado 
rem gerenciador e os segundos componentes de balanceamento de carga são os 
rem orientadores. Se o gerenciador e os orientadores não estiverem
rem em execução, o Dispatcher enviará pedidos em um formato 
rem round-robin. Depois que o gerenciador foi iniciado, as decisões de peso 
rem baseadas no número de conexões novas e ativas são 
rem implementadas e os pedidos recebidos são enviados ao melhor
rem servidor. Os orientadores fornecem ao gerenciador insight adicional 
rem em uma habilidade de servidores para pedidos de serviço, e também 
rem detectando se um servidor está ativo. Se um orientador detectar 
rem que um servidor está inativo, ele será marcado como inativo (somente se as
rem as proporções do gerenciador tiverem sido configuradas para incluir a entrada 
rem do orientador) e nenhum pedido adicional será roteado para o servidor.
rem A última etapa da configuração dos componentes de balanceamento de carga 
rem é configurar as proporções do gerenciador. O 
rem gerenciador atualiza o peso de cada um dos servidores baseado 
rem em quatro políticas:

rem   1. O número de conexões ativas em cada servidor.
rem   2. O número de novas conexões para cada servidor.
rem   3. Entrada dos orientadores.
rem   4. Entrada do orientador de nível de sistema.
rem
rem  Essas proporções devem incluir até 100. Como um exemplo, 
rem  configurando as proporções do cluster usando
rem      dscontrol cluster set <cluster> proportions 48 48 4 0
rem  será fornecida entrada de 48% de conexões ativas e novas na 
rem  decisão de peso, o orientador contribuirá com 4% e 
rem  a entrada do sistema não será considerada.
rem
rem NOTA: Por padrão as proporções do gerenciador são configuradas como 
rem 50 50 0 0

rem echo "Iniciando o gerenciador..."
rem call dscontrol manager start

rem echo "Iniciando o orientador FTP na porta 21 ..."
rem call dscontrol advisor start ftp 21
rem echo "Iniciando o orientador HTTP na porta 80 ..."
rem call dscontrol advisor start http 80
rem echo "Iniciando o orientador Telnet na porta 23 ..."
rem call dscontrol advisor start telnet 23
rem echo "Iniciando o orientador SMTP na porta 25 ..."
rem call dscontrol advisor start smtp 25
rem echo "Iniciando o orientador POP3 na porta 110 ..."
rem call dscontrol advisor start pop3 110
rem echo "Iniciando o orientador NNTP na porta 119 ..."
rem call dscontrol advisor start nntp 119
rem echo "Iniciando o orientador SSL na porta 443 ..."
rem call dscontrol advisor start ssl 443
rem

rem echo "Configurando as proporções do cluster..."
rem call dscontrol cluster set %CLUSTER% proportions 58 40 2 0

rem
rem A etapa final da configuração da máquina do Dispatcher é
rem  criar o alias do Network Interface Card (NIC).
rem
rem NOTA: NÃO use este comando em um ambiente de alta 
rem disponibilidade. Os scripts go* configurarão a NIC e 
rem o loopback, conforme necessário.
rem
rem dscontrol executor configure %CLUSTER%

rem  Se o endereço do cluster estiver uma NIC ou sub-rede diferente 
rem  do NFA, use o seguinte formato para o comando 
rem  de configuração do cluster.
rem  dscontrol executor configure %CLUSTER% tr0 0xfffff800
rem  em que tr0 é a NIC (tr1 para a segunda placa do token ring,
rem  en0 para a primeira placa de Ethernet) e 0xfffff800 é 
rem  uma máscara de sub-rede válida para o seu site.
rem

rem
rem Os seguintes comandos são configurados como valores padrão.
rem Use estes comandos como um guia a ser alterado dos padrões.
rem call dscontrol manager loglevel    1
rem call dscontrol manager logsize     1048576
rem call dscontrol manager sensitivity 5
rem call dscontrol manager interval    2
rem call dscontrol manager refresh     2
rem
rem call dscontrol advisor interval ftp  21  5
rem call dscontrol advisor loglevel ftp  21  1
rem call dscontrol advisor logsize  ftp  21  1048576
rem call dscontrol advisor timeout  ftp  21  unlimited
rem call dscontrol advisor interval telnet 23 5
rem call dscontrol advisor loglevel telnet 23 1
rem call dscontrol advisor logsize  telnet 23 1048576
rem call dscontrol advisor timeout  telnet 23 unlimited
rem call dscontrol advisor interval smtp 25  5
rem call dscontrol advisor loglevel smtp 25  1
rem call dscontrol advisor logsize  smtp 25  1048576
rem call dscontrol advisor timeout  smtp 25  unlimited
rem call dscontrol advisor interval http 80  5
rem call dscontrol advisor loglevel http 80  1
rem call dscontrol advisor logsize  http 80  1048576
rem call dscontrol advisor timeout  http 80  unlimited
rem call dscontrol advisor interval pop3 110 5
rem call dscontrol advisor loglevel pop3 110 1
rem call dscontrol advisor logsize  pop3 110 1048576
rem call dscontrol advisor timeout  pop3 110 unlimited
rem call dscontrol advisor interval nntp 119 5
rem call dscontrol advisor loglevel nntp 119 1
rem call dscontrol advisor logsize  nntp 119 1048576
rem call dscontrol advisor timeout  nntp 119 unlimited
rem call dscontrol advisor interval ssl  443 5
rem call dscontrol advisor loglevel ssl  443 1
rem call dscontrol advisor logsize  ssl  443 1048576
rem call dscontrol advisor timeout  ssl  443 unlimited
rem

Orientador de Amostra

O seguinte é um arquivo do orientador de amostra denominado ADV_sample.

/**
 * ADV_sample: O orientador HTTP do Balanceador de Carga
 * 
 * 
 * Esta classe define um orientador customizado de amostra do Balanceador de Carga. Como todos os
 * orientadores, este orientador customizado estende a função da base do orientador,
 * denominada ADV_Base. É a base do orientador que realmente executa a maioria das
 * funções do orientador, como relatório carregado novamente para o Balanceador de Carga
 * para uso no algoritmo de peso do Balanceador de Carga. A base do orientador também
 * executa conexões do soquete e operação de encerramento e fornece método de envio de recebimento 
 * para uso pelo orientador. O próprio orientador é usado apenas para
 * enviar e receber dados para/da porta no servidor que está sendo
 * avisado. Os métodos TCP dentro da base do orientador são programados para calcular 
 * o carregamento. Um sinalizador dentro do construtor na ADV_base sobrescreve o 
 * carregamento existente pelo novo carregamento retornado do orientador, se desejado.
 *
 * Nota: Baseado em um valor configurado no construtor, a base do orientador fornece
 * o carregamento para o algoritmo de peso nos intervalos especificados. Se o orientador
 * real não foi concluído, para que possa retornar um carregamento válido, a base do
 * orientador usará o carregamento anterior.
 *  
 * NOMENCLATURA 
 * 
 * A convenção de nomenclatura é a seguinte:
 *
 *  - O arquivo deve estar localizado no seguinte diretório do Balanceador de Carga:
 *   
 *    lb/servers/lib/CustomAdvisors/ (lb\servers\lib\CustomAdvisors no Windows)
 *
 * - O nome do Orientador deve ser precedido por "ADV_". O orientador pode ser 
 *    iniciado apenas com o nome, no entanto; por exemplo, o orientador "ADV_sample"
 *    pode ser iniciado com "amostra".
 *
 * - O nome do orientador deve ser com letras minúsculas.
 *
 *  Portanto, com essas regras em mente, esta amostra é referida como:
 * 
 *             <base directory>/lib/CustomAdvisors/ADV_sample.class
 *
 *
 * Os orientadores, assim como com o restante do Balanceador de Carga, deve ser compilado com a 
 * versão de pré-requisito do Java. Para garantir o acesso às classes do Balanceador de Carga, certifique-se
 * de que o arquivo ibmlb.jar (localizado no subdiretório lib do diretório
 * base) esteja incluído na CLASSPATH do sistema.
 *
 * Métodos fornecidos pelo ADV_Base:
 * 
 * - ADV_Base (Construtor):
 *
 *   - Parms
 *     - String sName = Nome do orientador
 *     - String sVersion = Versão do orientador
 *     - int iDefaultPort = Número da porta padrão para o orientador em
 *     - int iInterval = Intervalo no qual avisar nos servidores
 *     - String sDefaultName = Não utilizado.  Deve ser transmitido como "".
 *     - boolean replace = True - Substituem o valor de carregamento sendo calculado
 *                                pela base do orientador
 *                         False - incluídos no valor de carregamento sendo calculado
 *                                 pela base do orientador
 *   - Return
 *     - Os construtores não possuem valores de retorno.
 *
 * Como a base do orientador é baseada em encadeamento, ela tem vários outros métodos
 * disponíveis para uso por um orientador. Esses métodos podem ser referidos usando
 * o parâmetro CALLER transmitido no getLoad().
 *
 * Estes métodos são os seguintes:
 * 
 * - send - Enviam um pacote de informações na conexão do soquete estabelecida
 *           para o servidor na porta especificada.
 *   - Parms
 *     - String sDataString - Os dados a serem enviados no formulário de uma cadeia
 *   - Return
 *     - int RC - Se os dados foram enviados com êxito ou não: zero indica que os
 *                 dados foram enviados; um número inteiro negativo indica um erro.
 * 
 * - receive - Recebem informações da conexão do soquete.
 *   - Parms
 *     - StringBuffer sbDataBuffer - Os dados recebidos durante a chamada de recebimento
 *   - Return
 *     - int RC - Se os dados foram recebidos com êxito ou não; zero
 *                indica que os dados foram enviados; um número inteiro negativo indica
 *                um erro.
 *
 * Se a função fornecida pela base do orientador não for suficiente, 
 * você poderá criar uma função apropriada dentro do orientador e,
 * em seguida, os métodos fornecidos pela base do orientador serão ignorados.  
 *
 * Uma questão importante relativa ao carregamento retornado é se, é preciso aplicá-la 
 * ao carregamento que está sendo gerado dentro da base do orientador 
 * ou substituí-la. Existem instâncias válidas de ambas as situações.
 * 
 * Esta amostra é essencialmente o orientador HTTP do Balanceador de Carga. Ela funciona de maneira
 * muito simples: um pedido enviado--um pedido head de http--é emitido. Logo que uma
 * resposta é recebida, o método getLoad é terminado, sinalizando a base do orientador
 * para parar sincronização do pedido. Em seguida, o método é concluído. As
 * informações retornadas não são analisadas; o carregamento é baseado no tempo
 * necessário para executar as operações de envio e recebimento.
 */

pacote CustomAdvisors;
importar com.ibm.internet.nd.advisors.*;

public class ADV_sample extends ADV_Base implements ADV_MethodInterface
{
  String COPYRIGHT = 
            "(C) Copyright IBM Corporation 1997, All Rights Reserved.\n";

  static final String  ADV_NAME              = "Sample";
  static final int     ADV_DEF_ADV_ON_PORT   = 80;
  static final int     ADV_DEF_INTERVAL      = 7;

  // Nota: A maioria dos protocolos de servidor requerem um retorno de linha ("\r") e alimentação de
  //       linha ("\n") no final das mensagens. Se for assim, inclua-as na
  //       cadeia aqui.
  static final String  ADV_SEND_REQUEST      = 
    "HEAD / HTTP/1.0\r\nAccept: */*\r\nUser-Agent: " +
    "IBM_Load_Balancer_HTTP_Advisor\r\n\r\n";

  /**
   * Construtor.
   *
   * Parms:  Nenhum; mas o construtor de ADV_Base possui vários parâmetros 
   *         que devem ser transmitidos para ele.
   *
   */
  public ADV_sample()
  {
    super( ADV_NAME,
       "2.0.0.0-03.27.98",
           ADV_DEF_ADV_ON_PORT,
           ADV_DEF_INTERVAL,
           "",     // não usado
           false);
    super.setAdvisor( this );
  }


  /**
   * ADV_AdvisorInitialize
   *
   * Qualquer inicialização específica ao orientador que deve ocorrer depois que a
   * a base do orientador for iniciada. Este método é chamado apenas uma vez e, tipicamente, não 
   * é usado.
   */
  public void ADV_AdvisorInitialize()
  {
    return;
  }


  /**
   * getLoad()
   *
   * Este método é chamado pela base do orientador para concluir a operação do
   * orientador, baseada nos detalhes específicos para o protocolo. Neste orientador de amostra,
   * apenas um único envio e recebimento são necessários; se a lógica mais
   * complexa for necessária, múltiplos envios e recebimentos poderão ser emitidos. Por
   * exemplo, uma resposta poderá ser recebida e analisada. Baseados nas 
   * informações aprendidas com isso, outro envio e recebimento puderam ser emitidos.
   *
   * Parâmetros:
   * 
   * - iConnectTime - O carregamento atual conforme se refere à duração de tempo que
   *                  levou para ser concluída a conexão com o servidor por meio da
   *                  porta especificada.
   *
   * - caller - Uma referência à classe base do orientador em que os métodos 
   *            fornecidos pelo Balanceador de Carga devem executar pedidos TCP simples,
   *            principalmente de envio e recebimento.
   *
   * Resultados:
   *
   * - O carregamento - Um valor expresso em milissegundos, que pode ser incluído
   *   no carregamento existente ou que pode substituir o carregamento existente, conforme 
   *   determinado pelo sinalizador "substituir" do construtor.
   *
   *   Quanto maior for o carregamento, mais tempo levará para que o servidor responda; 
   *   portanto, o peso se tornará menor dentro do Balanceador de Carga.
   *
   *   Se o valor for negativo, um erro será assumido. Um erro de um 
   *   orientador indica que o servidor que o orientador está tentando alcançar não está
   *   acessível e foi identificado como estando inativo. O Balanceador de Carga não
   *   tentará fazer o balanceamento de carga par um servidor que está inativo. O Balanceador de Carga 
   *   continuará o balanceamento de carga para o servidor quando um valor positivo for recebido.
   *
   */
  public int getLoad(int iConnectTime, ADV_Thread caller)
  {
    int iRc;
    int iLoad = ADV_HOST_INACCESSIBLE;  // -1

    // Enviar pedido tcp
    iRc = caller.send(ADV_SEND_REQUEST);
    if (iRc >= 0)
    {
      // Executar um recebimento
      StringBuffer sbReceiveData = new StringBuffer("");
      iRc = caller.receive(sbReceiveData);

      /**
      *  No modo de orientador normal (o sinalizador "substituir" é falso), o carregamento
      *  retornado é 0 ou 1 indicando que o servidor está ativo ou inativo. 
      *  Se o recebimento tiver êxito, um carregamento de zero será retornado
      *  indicando que o carregamento construído dentro do orientador base deve ser usado.
      * 
      *  Caso contrário, (o sinalizador "substituir" é verdadeiro), retorne o valor do carregamento desejado.
      */

      if (iRc >= 0)
      {
        iLoad = 0;
      }
    }
    return iLoad;
  }

} // Terminar - ADV_sample