WebSphere Load Balancer pour IPv4 et IPv6
Systèmes d'exploitation : AIX, HP-UX, Linux, Solaris, Windows

             Personnalisation de la table des matières et des résultats de la recherche

Exemple : Exemple de conseiller

Il s'agit d'un exemple de fichier de conseiller appelé ADV_sample.

/ * *
 * ADV_sample : Conseiller HTTP de Load Balancer
 *
 *
 * Cette classe définit un exemple de conseiller personnalisé pour Load Balancer. 
 * Comme tous les conseillers, le conseiller personnalisé étend la fonction de
 * la base du conseiller, intitulée ADV_Base. En fait, c'est la base du
 * conseiller qui effectue la plupart des fonctions du conseiller, telles que
 * la communication des charges à Load Balancer afin que ces dernières soient
 * utilisées dans l'algorithme de pondération de Load Balancer. La base du
 * conseiller effectue également les opérations de connexion et de fermeture
 * de la connexion et fournit des méthodes d'envoi et de réception qui seront
 * utilisées par le conseiller. Le conseiller n'est lui-même utilisé que pour
 * l'envoi de données vers le port du serveur conseillé et pour la réception
 * de données sur ce dernier. Les méthodes TCP de la base du conseiller sont
 * programmées pour calculer 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
 * du conseiller fournit la charge à l'algorithme de pondération à un
 * intervalle donné. Si le véritable conseiller n'a pas terminé ses opérations
 * afin de renvoyer une charge valide, la base du conseiller utilise la charge
 * précédente. 
 * CONVENTION DE DENOMINATION
 *
 * La convention de dénomination est la suivante :
 *
 *  - Le fichier doit se trouver dans le répertoire Load Balancer suivant :
 *
 *     ulb/servers/lib/CustomAdvisors/ (ulb\servers\lib\CustomAdvisors sous Windows)
 *
 *  - Le nom du conseiller doit être précédé de "ADV_". Le conseiller peut
 *    cependant n'être démarré qu'avec son nom. Par exemple, le conseiller
 * "ADV_sample" peut être démarré en entrant "sample".
 
 * - Le nom du conseiller doit être en minuscules.
 *
 * En gardant ces règles à l'esprit, notre exemple s'intitule donc :
 *
 *     <répertoire de base="">/lib/CustomAdvisors/ADV_sample.class
 *
 *
 * Les conseillers, comme les autres composants de Load Balancer, doivent être
 * compilés avec la version prérequise de Java. Pour que les classes Load
 * Balancer soient accessibles, assurez-vous que le fichier ibmlb.jar (situé
 * dans le sous-répertoire lib du répertoire de base) est inclus dans la
 * variable CLASSPATH du système.
 *
 * Méthodes fournies par ADV_Base :
 *
 * - ADV_Base (Constructeur) :
 *
 *   - Paramètres
 *     - Chaîne sName = Nom du conseiller
 *     - Chaîne sVersion = Version du conseiller
 *     - Entier iDefaultPort = Numéro de port par défaut pour les conseils
 *     - Entier iInterval = Intervalle des conseils sur les serveurs
 *     - Chaîne sDefaultName = Inutilisée. Doit être transmise sous la forme "".
 *     - Booléen replace = True - Remplace la valeur de charge calculée par la
 *                                base du conseiller
 *                         False - S'ajoute à la valeur de charge calculée
 *                                 par la base du conseiller
 *   - Retour
 *     - Les constructeurs ne possèdent pas de valeurs de retour.
 *
 * La base du conseiller étant basée sur une arborescence,
 * le conseiller a de nombreuses autres méthodes qui peuvent être utilisées par
 * un conseiller. Ces méthodes peuvent être référencées à l'aide du paramètre
 * CALLER transmis dans la méthode getLoad().
 *
 * Ces méthodes se présentent comme suit :
 *
 * - send - Envoie au serveur un paquet de données concernant la connexion de
 * socket établie, sur le port spécifié.
 * - Paramètres
 *   - Chaîne sDataString - Données à envoyer sous forme de chaîne
 * - Retour
   - Entier RC - Indique si les données ont été envoyées ou non : 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
 *     - Chaîne Buffer sbDataBuffer - Données reçues lors de l'appel de réception
 *   - Retour
 *     - Entier RC - Indique si les données ont été reçues ou non ; 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 ; les méthodes
 * fournies par la base du conseiller seront alors ignorées.
 *
 * Il faut ensuite déterminer si la charge renvoyée doit être appliquée à la
 * charge générée dans la base du conseiller ou remplacée ; il existe des
 * instances valides de ces deux cas.
 *
 * Cet exemple concerne principalement le conseiller HTTP de Load Balancer. Il
 * fonctionne très simplement : une demande d'envoi (demande http principale)
 * est émise. Dès que la réponse est reçue, la méthode getLoad est arrêtée et la
 * base du conseiller arrête alors de calculer la durée de la demande. La
 * méthode est alors terminée. Les informations renvoyées ne sont pas
 * analysées ; la charge est fonction du temps nécessaire pour effectuer 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, 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; 

    // Note: Most server protocols require a carriage return ("\r") and line 
    // feed ("\n") at the end of messages. If so, include them in 
    // your string here. 
    
    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 d'ADV_Base possède plusieurs
     *              paramètres qui doivent lui être transmis. 
     * 
     */ 
     public ADV_sample() 
     { 
       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 spécifique au conseiller qui doit être mise
      * en oeuvre après le démarrage de la base du conseiller. 
      * 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 conseiller, à partir de détails spécifiques 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
       *                  écoulé pour établir la connexion au serveur via 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
       *   effectuer des demandes TCP simples (principalement des envois et des
       *   réceptions).
       *
       * Résultats :
       *
       * - Charge - Valeur exprimée en millisecondes, pouvant être ajoutée
       *   à la charge existante ou pouvant la remplacer, selon la valeur de
       *   l'option "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 a été identifié comme étant arrêté. 
       * Load Balancer ne tentera pas d'équilibrer un serveur arrêté. Load
       * Balancer recommencera à équilibrer la charge du serveur à la réception
       * d'une valeur positive. 
       * 
       */ 
      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)
        {
            // Perform a receive
            StringBuffer sbReceiveData = new StringBuffer("");
            iRc = caller.receive(sbReceiveData);

         /**
          * Dans le mode de conseiller normal (l'option "replace" a la valeur
          * false), la charge renvoyée est 0 ou 1, ce qui indique que le
          * serveur est actif ou arrêté. 
          * 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), la valeur de
          * charge souhaitée est renvoyée.

          */
 
          if (iRc >= 0) 
          {
             iLoad = 0; 
          } 
        } 
        return iLoad; 
      } 
  } // End - ADV_sample
Rubrique de référence    

Conditions d'utilisation | Commentaires

Dernière mise à jour : 31 juillet 2008 3:18:06 PM EDT
http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.edge.doc/lb/info/ae/rprf_advexample.html