Annexe C. Exemples de fichiers de configuration

La présente annexe contient des exemples de fichiers de configuration pour le composant Dispatcher de Load Balancer.

Exemples de fichiers de configuration Load Balancer

Les exemples de fichiers se trouvent dans le répertoire suivant :

Dispatcher Fichier de configuration — systèmes AIX, Linux et Solaris

#!/bin/bash
#
# configuration.sample - Exemple de fichier de configuration pour
composant
Dispatcher
#
#
# Ce script doit être lancé par le superutilisateur.
#
# iam=`whoami`
 
# if [ "$iam" != "root" ]if [ "$iam" != "root" ]
#  then 
#  echo "Vous devez vous connecter en tant que superutilisateur pour exécuter ce script"
#   exit 2
# fi 

#
# Démarrez d'abord le serveur
#
# dsserver start
# sleep 5

#
# Démarrez ensuite l'exécuteur
#
# dscontrol executor start

#
#  Il est possible d'arrêter le répartiteur à tout moment à l'aide 
# des commandes "dscontrol executor stop" et "dsserver stop" 
# pour arrêter respectivement l'exécuteur et le serveur avant 
# d'arrêter le logiciel Dispatcher.
#
# L'étape suivante dans la configuration du répartiteur est de définir 
# l'adresse NFA (adresse de non-réacheminement) et les adresses de clusters.
#
# L'adresse NFA permet d'accéder à distance au répartiteur 
# afin d'effectuer des opérations d'administration et de configuration. 
# Cette adresse est obligatoire car le répartiteur doit acheminer 
# des paquets vers les adresses de clusters.
# 
# L'adresse CLUSTER correspond au nom d'hôte (ou à l'adresse IP) 
# auquel les clients distants se connectent.
#
# Vous pouvez indifféremment utiliser les noms d'hôte et les adresses IP 
# dans ce fichier.
#

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

# echo "Chargement de l'adresse de non réacheminement"
# dscontrol executor set nfa $NFA

#
# L'étape suivante dans la configuration du répartiteur consiste à créer 
# un cluster. Le répartiteur acheminera les requêtes envoyées 
# à l'adresse de cluster vers les serveurs associés
# à ce cluster. Vous pouvez configurer plusieurs adresses de 
# clusters et leur associer plusieurs serveurs à l'aide du répartiteur. 

# Utilisez une configuration similaire pour CLUSTER2, CLUSTER3, etc.
#

# echo "Chargement de la première adresse de cluster"
# dscontrol cluster add $CLUSTER

#
# L'étape suivante consiste à définir les ports utilisés par ce cluster. 
# Toute requête reçue par le répartiteur sur un port défini 
# sera réacheminée vers le port correspondant de l'un 
# des serveurs.
#

# echo "Création de ports pour le cluster : $CLUSTER"

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

#
# La dernière étape consiste à associer chaque serveur 
# aux ports de ce cluster.
# Vous pouvez utiliser indifféremment le nom 
# d'hôte ou l'adresse IP des serveurs.
#

# SERVER1=server1name.domain.name
# SERVER1=nomserveur1.domaine.nom
# SERVER2=nomserveur2.domaine.nom 
# SERVER3=nomserveur3.domaine.nom

# echo "Ajout des serveurs"
# dscontrol server add $CLUSTER:20+21+80:
# $SERVER1+$SERVER2+$SERVER3

#
# Nous allons maintenant lancer les composants d'équilibrage de charge 
# du répartiteur. Le premier composant s'appelle le gestionnaire. 
# Les autres composants d'équilibrage de charge sont les 
# conseillers. Si le gestionnaire et les conseillers ne fonctionnent pas, 
# le répartiteur envoie des requêtes au format de permutation circulaire
# (round-robin). Une fois le gestionnaire lancé, les décisions de pondération 
# basées sur le nombre 
# de connexions nouvelles et actives sont utilisées, et
# les requêtes entrantes 
# sont envoyées au meilleur serveur. Les conseillers fournissent 
# au gestionnaire des informations supplémentaires sur la capacité
# du serveur de répondre 
# aux demandes etde déterminer si un serveur fonctionne. Si
# si un serveur est actif ou non. Si un conseiller détecte 
# l'inactivité d'un serveur, ce dernier est arrêté. 
# ont été définies pour inclure les données de l'assistant) et aucune autre demande n'est envoyée au serveur.

# La dernière étape de configuration des composants d'équilibrage de charge 
# est la définition des proportions du gestionnaire. Ce dernier met à 
# jour la pondération de chaque serveur en fonction de quatre règles :
#   1. Nombre de connexions actives sur chaque serveur.
#   2. Nombre de nouvelles connexions sur chaque serveur.
#   3. Informations fournies par les conseillers.
#   4. Informations fournies par le conseiller au niveau système.
# La somme de ces proportion doit être égale à 100. Par exemple, 
# si l'on définit les proportions du gestionnaire de la façon suivante :
#    dscontrol manager proportions 48 48 0 0
# 48 % des informations proviendront des connexions nouvelles, 48%, 
# des connexions actives, 4%, des conseillers et les entrées 
# système ne sont pas prises en compte.
#
# REMARQUE : par défaut, les proportions du gestionnaire sont définies à  50 50 0 0.
#

# echo "Démarrage du gestionnaire (manager)..."
# dscontrol manager start

# echo "Démarrage du conseiller (advisor) FTP sur le port 21..."
# dscontrol advisor start ftp 21
# echo "Démarrage du conseiller (advisor) HTTP sur le port 80..."
# dscontrol advisor start http 80
# echo "Démarrage du conseiller (advisor) Telnet sur le port 23..."
# dscontrol advisor start telnet 23
# echo "Démarrage du conseiller (advisor) SMTP sur le port 25..."
# dscontrol advisor start smtp 25
# echo "Démarrage du conseiller (advisor) POP3 sur le port 110..."
# dscontrol advisor start pop3 110
# echo "Démarrage du conseiller (advisor) NNTP sur le port 119..."
# dscontrol advisor start nntp 119
# echo "Démarrage du conseiller (advisor) SSL sur le port 443..."
# dscontrol advisor start ssl 443
#

# echo "Définition des proportions du gestionnaire..."
# dscontrol manager proportions 58 40 2 0

#
#  L'étape finale de la configuration de la machine Dispatcher consiste à affecter 
#  un alias à la carte NIC (Network Interface Card).
#
# REMARQUE : N'utilisez pas cette commande dans un environnement 
# haute disponibilité. Les scripts go* configureront les cartes NIC et 
# le bouclage, si nécessaire.
# dscontrol executor configure $CLUSTER

#  Si l'adresse de cluster se trouve sur une autre carte NIC 
#  ou un sous-réseau autre que ceux de l'adresse NFA, utilisez la syntaxe suivante pour la commande de configuration de 
cluster.
#  dscontrol executor configure $CLUSTER tr0 0xfffff800
# tr0 étant votre carte NIC (tr1, la seconde carte réseau en anneau à jeton, 
# en0 la première carte ethernet) et 0xfffff800 étant un masque 
# de sous-réseau valide pour votre site.
#

#
# Les commandes suivantes permettent de définir les valeurs par défaut.  
# Utilisez ces commandes pour modifier les valeurs par défaut.
#  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
#

Dispatcher Fichier de configuration — systèmes Windows

Voici un exemple de fichier de configuration de Load Balancer intitulé configuration.cmd.sample à utiliser sous Windows.

@echo off
rem configuration.cmd.sample - Exemple de fichier de configuration pour
rem le composant Dispatcher.
rem

rem Démarrez dsserver à partir du panneau Services

rem

rem
rem Démarrez ensuite l'exécuteur
rem
rem call dscontrol executor start

rem

rem L'étape suivante de la configuration de Dispatcher consiste à définir
rem l'adresse NFA (adresse de non-réacheminement) et les 
rem adresses de clusters.
rem

rem L'adresse NFA permet d'accéder à distance au répartiteur 
rem afin d'effectuer des opérations d'administration de configuration. 
rem Cette adresse est obligatoire car le répartiteur doit réacheminer 
rem des paquets vers les adresses de clusters.

rem
rem L'adresse CLUSTER est le nom d'hôte (ou l'adresse IP) auquel 
rem les clients distants se connectent.
rem

rem Vous pouvez indifféremment utiliser les noms d'hôte et les adresses IP 
rem dans ce fichier. 
rem NFA=[adresse de non-réacheminement]
rem CLUSTER=[nom du cluster]
rem

rem set NFA=nom_hôte.domaine.nom
rem set CLUSTER=www.votresociété.com

rem echo "Chargement de l'adresse de non réacheminement"
rem call dscontrol executor set nfa %NFA%

rem
rem Les valeurs par défaut sont affectées aux commandes suivantes. 
rem Utilisez ces commandes pour modifier les valeurs par défaut.

rem  call dscontrol executor set fintimeout 30
rem
rem L'étape suivante dans la configuration du répartiteur consiste à
créer 
rem un cluster. Le répartiteur acheminera les requêtes envoyées 
rem à l'adresse de cluster vers les serveurs associés 
rem à ce cluster. Vous pouvez configurer plusieurs adresses de
rem clusters à l'aide du répartiteur.
rem Utilisez une configuration similaire pour CLUSTER2, CLUSTER3, etc.
rem

rem echo "Chargement de la première adresse de cluster"
rem call dscontrol cluster add %CLUSTER%

rem
rem L'étape suivante consiste à définir les ports utilisés par ce cluster. 
rem Une requête reçue par le répartiteur sur un port défini 
rem est réacheminée vers le port correspondant
rem de l'un des serveurs.
rem

rem echo "Création des ports de CLUSTER : %CLUSTER%"
rem call dscontrol port add %CLUSTER%:20+21+80

rem
rem La dernière étape consiste à associer chaque serveur aux 
rem ports définis pour le cluster. Vous pouvez utiliser indifféremment 
rem le nom d'hôte ou l'adresse IP des machines serveurs.
rem

rem set SERVER1=nomserveur1.domaine.nom
rem set SERVER2=nomserveur2.domaine.nom
rem set SERVER3=nomserveur3.domaine.nom

rem echo "Ajout des serveurs"
rem call dscontrol server add %CLUSTER%:20+21+80:
rem %SERVER1%+%SERVER2%+%SERVER3%

rem
rem Nous allons maintenant lancer les composants d'équilibrage de charge 
rem du répartiteur. Le premier composant s'appelle le gestionnaire. 
rem Les autres composants d'équilibrage de charge sont les 
rem conseillers. Si le gestionnaire et les conseillers ne sont pas
rem actifs, le répartiteur envoie des requêtes au format de permutation circulaire 
rem (round-robin). Une fois le gestionnaire lancé, les décisions de 
rem pondération basées sur le nombre de connexions nouvelles et actives 
rem sont utilisées et les requêtes entrantes sont envoyées au meilleur
rem serveur. Les conseillers donnent un aperçu au gestionnaire de la 
rem capacité des serveurs à répondre aux requêtes et à détecter 
rem déterminer si un serveur est arrêté. Si un conseiller détecte 
rem qu'un serveur est arrêté, il est marqué comme étant arrêté (dès lors que
rem les parties gestionnaire ont été définies pour inclure 
rem les entrées du conseiller) et aucune autre demande n'est envoyée au serveur.
rem entrées du conseiller) et aucune requête ne sera acheminée vers le serveur.
rem La dernière étape de configuration des composants d'équilibrage de charge 
rem est la définition des proportions du gestionnaire. Ce dernier met à 
rem jour la pondération de chaque serveur en fonction 
rem de quatre règles :

rem   1. Nombre de connexions actives sur chaque serveur.
rem   2. Nombre de nouvelles connexions pour chaque serveur.
rem   3. Informations fournies par les conseillers.
rem   4. Informations fournies par le conseiller au niveau système.
rem
rem  La somme de ces proportions doit être égale à 100. Par exemple, 
rem si l'on définit les proportions avec
rem      dscontrol cluster set <cluster> proportions 48 48 4 0
rem  48 % des informations proviendront des connexions nouvelles, 
rem  des connexions actives, 4 % des conseillers et les entrées 
rem  du système ne sont pas prises en compte.
rem
rem REMARQUE : par défaut, les propriétés du gestionnaires sont
définies comme suit : 
rem 50 50 0 0

rem echo "Démarrage du gestionnaire (manager)..."
rem call dscontrol manager start

rem echo "Démarrage du conseiller (advisor) FTP sur le port 21..."
rem call dscontrol advisor start ftp 21
rem echo "Démarrage du conseiller (advisor) HTTP sur le port 80..."
rem call dscontrol advisor start http 80
rem echo "Démarrage du conseiller Telnet sur le port 23 ..."
rem call dscontrol advisor start telnet 23
rem echo "Démarrage du conseiller SMTP sur le port 25 ..."
rem call dscontrol advisor start smtp 25
rem echo "Démarrage du conseiller POP3 sur le port 110 ..."
rem call dscontrol advisor start pop3 110
rem echo "Démarrage du conseiller NNTP sur le port 119 ..."
rem call dscontrol advisor start nntp 119
rem echo "Démarrage du conseiller SSL sur le port 443 ..."
rem call dscontrol advisor start ssl 443
rem

rem echo "Définition des proportions du cluster..."
rem call dscontrol cluster set %CLUSTER% proportions 58 40 2 0

rem
rem  L'étape finale de configuration du répartiteur est
rem  l'affectation d'un alias à la carte d'interface réseau (NIC).
rem
rem
rem REMARQUE : N'utilisez pas cette commande dans un environnement à 
rem haute disponibilité. Les scripts go* configureront les cartes NIC 
rem et l'unité de bouclage si nécessaire.
rem
rem dscontrol executor configure %CLUSTER%

rem  Si votre adresse de cluster se trouve sur une autre carte NIC 
rem  ou sur un sous-réseau autre que l'adresse NFA, utilisez la 
rem  commande de configuration de cluster suivante.
rem  dscontrol executor configure %CLUSTER% tr0 0xfffff800
rem  où tr0 est la carte NIC (tr1 pour la seconde carte réseau en anneau à jeton,
rem  en0, la première carte Ethernet) et 0xfffff800, 
rem  un masque de sous-réseau valide de votre site.
rem

rem
rem Les valeurs par défaut sont affectées aux commandes suivantes.
rem Utilisez ces commandes pour modifier les valeurs par défaut.
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

Conseiller type

Vous trouverez ci-dessous un exemple de fichier de conseiller intitulé ADV_type.

/**
 * ADV_type : Conseiller HTTP de Load Balancer
 * 
 * 
 * Cette classe définit un exemple de conseiller personnalisé pour Load Balancer. A l'instar de tout
 * les conseillers, le conseiller personnalisé étend la fonction de la base du conseiller
 * appelée ADV_Base. C'est en fait la base du conseiller qui exécute
 * la plupart des fonctions du conseiller, telles que la communication des charges à Load Balancer
 * pour les utiliser dans l'algorithme de pondération de Load Balancer.
 * La base du conseiller effectue également les opérations d'ouverture et de
 * fermeture de socket et fournit des méthodes d'envoi et de 
 * réception au conseiller. Le conseiller lui-même permet uniquement
 * d'envoyer et de recevoir des données vers et depuis le port du serveur
 * avisé. Les méthodes TCP de la base de l'assistant sont programmées pour calculer la 
 * la charge. Un indicateur du constructeur de ADV_base remplace, si vous le souhaitez, 
 * la charge existante par la nouvelle charge renvoyée par le conseiller.
 *
 * Remarque : en fonction d'une valeur définie dans le constructeur, la base de l'assistant fournit
 * la charge à l'algorithme de pondération à une fréquence donnée. Si
 * l'assistant n'a pas terminé ses opérations afin de
 * renvoyer une charge valide, la base de l'assistant utilise
 * la charge précédente.
 *  
 * ATTRIBUTION DE NOM 
 * 
 * La convention d'attribution de nom est la suivante :
 *
 *  - Le fichier doit se trouver dans le répertoire Load Balancer suivant :
 *   
 *    lb/servers/lib/CustomAdvisors/ (lb\servers\lib\CustomAdvisors sous Windows)
 *
 * - Le nom de l'assistant doit être précédé de "ADV". L'assistant peut 
 *   être lancé avec uniquement le nom, mais l'assistant "ADV_sample", par exemple,
 *   peut être lancé avec "modèle".
 *
 * - Le nom du conseiller doit être en minuscules.
 *
 *  En respectant ces règles, le chemin et le nom du conseiller
 *  donné en exemple sont les suivants :
 * 
 *    <répertoire de base>/lib/CustomAdvisors/ADV_sample.class
 *
 *
 * Les conseillers, tout comme les autres éléments de Load Balancer,
 * doivent être compilés avec la version Java recommandée. Pour 
 * garantir l'accès aux classes Load Balancer, vérifiez que le fichier
 * ibmlb.jar (dans le sous-répertoire lib du répertoire
 * de base) figure dans la variable CLASSPATH du système.
 *
 * Méthodes fournies par ADV_Base :
 * 
 * - ADV_Base (Constructeur) :
 *
 *   - Paramètres
 *     - String sName = Nom du conseiller
 *     - String sVersion = Version du conseiller
 *     - int iDefaultPort = Numéro de port par défaut utilisé par le conseiller
 *     - int iInterval = Intervalle que doivent utiliser les serveurs
 *     - String sDefaultName = Non utilisé.  indiquer "".
 *     - boolean replace = True - remplacement de la valeur de la charge
 *                                par la base du conseiller
 *	                     False - ajout à la valeur de la charge calculée
 *                                par la base du conseiller
 *   - Return
 *     - Les constructeurs n'ont pas de valeurs de retour.
 *
 * la base de conseiller étant basée sur une arborescence,
 * le conseiller a de nombreuses autres méthodes
 * d'utilisation à sa disposition. Ces méthodes peuvent
 * être référencées en utilisant le paramètre CALLER dans
 * getLoad().
 *
 * Ces méthodes sont les suivantes :
 * 
 * - send - Envoie un paquet de données concernant la connexion
 *           socket établie sur le port spécifié du serveur.
 *   - Paramètres
 *     - String sDataString - Les données à envoyer se présentent sous forme de chaîne
 *   - Return
 *     - int RC - Indique si les données ont été correctement envoyées ;
 *                 un zéro indique que les données ont été envoyées ; un
 *                 entier négatif indique une erreur.
 * 
 * - receive - Reçoit des informations de la connexion socket.
 *   - Paramètres
 *     - StringBuffer sbDataBuffer - Données reçues pendant l'appel
 *   - Return
 *     - int RC - Indique si les données ont été correctement
 *       reçues ; un zéro  indique que les données ont été
 *                envoyées ; un entier négatif indique une
 *                erreur.
 *
 * Si la fonction fournie par la base du conseiller n'est pas 
 * suffisante, vous pouvez créer la fonction appropriée dans le
 * conseiller et les méthodes fournies par la base du conseiller
 * seront alors ignorées.  
 *
 * Il est essentiel de savoir si la charge renvoyée doit être 
 * appliquée à la charge générée dans la base de l'assistant ou 
 * remplacée ; les deux situations sont possibles.
 * 
 * Cet exemple concerne principalement l'assistant HTTP de Load Balancer. Son fonctionnement
 * est très simple : une demande d'envoi (demande HEAD HTTP) est émise. Lorsque la réponse
 * est reçue, la méthode getLoad prend fin
 * en indiquant à la base de l'assistant d'arrêter de chronométrer la demande. La méthode se termine. Les
 * informations renvoyées ne sont pas
 * analysées ; la charge dépend du délai nécessaire
 * pour exécuter les opérations d'envoi et de réception.
 */

package CustomAdvisors;
import com.ibm.internet.nd.advisors.*;

public class ADV_sample extends ADV_Base implements ADV_MethodInterface
{
  String COPYRIGHT = 
            "(C) Copyright IBM Corporation 1997, Tous droits réservés.\n";

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

  // Remarque : La plupart des protocoles de serveur
  // requièrent un retour chariot ("\r") et un passage à
  // la ligne ("\n") à la fin des messages. Si tel est le
  // cas, incluez-les dans la chaîne ci-dessous.
  static final String  ADV_SEND_REQUEST      = 
    "HEAD / HTTP/1.0\r\nAccept: */*\r\nUser-Agent: " +
    "IBM_Load_Balancer_HTTP_Advisor\r\n\r\n";

  /**
   * Constructeur.
   *
   * Paramètres : Aucun, mais le constructeur de ADV_Base 
   * comporte plusieurs paramètres qui doivent lui être transmis.
   *
   */
  public ADV_type()
  {
    super( ADV_NAME,
       "2.0.0.0-03.27.98",
           ADV_DEF_ADV_ON_PORT,
           ADV_DEF_INTERVAL,
           "",     // not used
           false);
    super.setAdvisor( this );
  }


  /**
   * ADV_AdvisorInitialize
   *
   * Toute initialisation d'assistant qui doit être exécutée après
   * le démarrage de la base de l'assistant. Cette méthode n'est appelée qu'une seule fois et n'est généralement 
   * pas utilisée.
   */
  public void ADV_AdvisorInitialize()
  {
    return;
  }


  /**
   * getLoad()
   *
   * Cette méthode est appelée par la base du conseiller pour terminer
   * l'opération du conseillée, basée sur des détails propres au protocole.
   * Dans cet exemple de conseiller, une seule opération d'envoi
   * et de réception est nécessaire ; si une logique plus
   * complexe est nécessaire, il est possible d'émettre des envois
   * et réceptions multiples. Par exemple, une réponse peut être
   * reçue et sa syntaxe peut être analysée. Sur la base 
   * des informations obtenues, un autre ordre d'envoi et de
   * réception peut alors être émis.
   *
   * Paramètres :
   * 
   * - iConnectTime - la charge actuelle car elle fait référence au temps
   *                  nécessaire à l'établissement d'une connexion
   *                  avec le serveur sur le port spécifié.
   *
   *
   * - caller - Une référence à la classe de la base du conseiller
   *            dans laquelle les méthodes fournies par Load 
   *            Balancer doivent répondre à de simples demandes
   *            TCP, principalement des demandes d'envoi et de
   *            réception.
   *
   * Résultats :
   *
   * - La charge - Valeur exprimée en millisecondes, pouvant être
   *   ajoutée à la charge existante, ou la remplacer, suivant la 
   *   valeur de l'indicateur "replace" du constructeur.
   *
   *   Plus la charge est importante, plus le serveur met de temps 
   *   à répondre et donc plus la charge de Load Balancer diminue.
   *
   *   Si la valeur est négative, il s'agit d'une erreur. Une erreur 
   *   du conseiller indique que le serveur auquel le conseiller tente
   *   d'accéder n'est pas accessible et qu'il est arrêté. Load Balancer
   *   ne tente pas d'équilibrer la charge d'un serveur arrêté. Load Balancer 
   *   équilibre de nouveau la charge du serveur lorsqu'une valeur positive est reçue.
   *
   */
  public int getLoad(int iConnectTime, ADV_Thread caller)
  {
    int iRc;
    int iLoad = ADV_HOST_INACCESSIBLE;  // -1

    // Send tcp request
    iRc = caller.send(ADV_SEND_REQUEST);
    if (iRc >= 0)
    {
      // Réception
      StringBuffer sbReceiveData = new StringBuffer("");
      iRc = caller.receive(sbReceiveData);

      /**
      *  En mode conseiller normal (l'indicateur "replace" a la valeur false),
      *  la valeur renvoyée est 0 ou 1 selon que le serveur est actif ou inactif. 
      *  En cas de bonne réception, une charge de zéro est renvoyée pour
      *  indiquer que la charge élaborée dans la base du conseiller n'est pas utilisée.
      * 
      *  Sinon (l'indicateur "replace" a la valeur true), renvoie la valeur de charge souhaitée.
      */

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

} // End - ADV_type