A custom advisor is a small piece of Java code, provided as a class
file, that is called by the Load Balancer base code to determine the load
on a server. The base code provides all necessary administrative services,
including starting and stopping an instance of the custom advisor, providing
status and reports, recording history information in a log file, and reporting
advisor results to the manager component.
About this task
Custom advisors are called after native, or standard, advisors have
been searched. If the Load Balancer does not find a specified advisor among
the list of standard advisors, it consults the list of custom advisors. When
the Load Balancer base code calls a custom advisor, the following steps happen:
- The Load Balancer base code opens a connection with the server machine.
- If the socket opens, the base code calls the specified advisor’s GetLoad
function.
- The advisor’s GetLoad function performs the steps that the user has defined
for evaluating the server’s status, including waiting for a response from
the server. The function terminates execution when the response is received.
- The Load Balancer base code closes the socket with the server and reports
the load information to the manager. Depending on whether the custom advisor
operates in normal mode or in replace mode, the base code sometimes does additional
calculations after the GetLoad function terminates.
Custom advisors can be designed to interact with the Load Balancer
in either normal mode or replace mode. The choice for the mode of operation
is specified in the custom advisor file as a parameter in the constructor
method. (Each advisor operates in only one of these modes, based on its design.)
- Normal mode: the custom advisor exchanges data with the server,
and the base advisor code times the exchange and calculates the load value.
The base code then reports this load value to the manager. The custom advisor
returns the value zero to indicate success, or negative one to indicate an
error.
To specify normal mode, set the replace flag in the constructor
to false.
- Replace mode: the base code does not perform any timing measurements.
The custom advisor code performs whatever operations are specified, based
on its unique requirements, and then returns an actual load number. The base
code accepts the load number and reports it, unaltered, to the manager. For
best results, normalize your load numbers between 10 and 1000, with 10 representing
a fast server and 1000 representing a slow server.
To specify replace mode,
set the replace flag in the constructor to true.
Like all advisors, a custom advisor extends the functionality
of the advisor base class, which is called ADV_Base. The advisor base performs
most of the advisor’s functions, such as reporting loads back to the manager
for use in the manager’s weight algorithm. The advisor base also performs
socket connect and close operations and provides send and receive methods
for use by the advisor. The advisor is used only for sending and receiving
data on the specified port for the server that is being investigated. The
TCP methods provided within the advisor base are timed to calculate load.
A flag within the constructor of the advisor base overwrites the existing
load with the new load returned from the advisor, if desired.
Note: Based on
a value set in the constructor, the advisor base supplies the load to the
weight algorithm at specified intervals. If the advisor has not completed
processing and cannot return a valid load, the advisor base uses the previously
reported load.