Class LoadBalancer

  • All Implemented Interfaces:
    Runnable

    public class LoadBalancer
    extends Base
    implements Runnable
    A non-sticky HTTP load-balancer.
    Version:
    1.0, 2002-07-29
    Author:
    Cameron Purdy
    • Field Detail

      • m_addrportHost

        protected LoadBalancer.AddressPort m_addrportHost
        The AddressPort combination that the load balancer will listen on.
      • m_aAddrPortDest

        protected LoadBalancer.AddressPort[] m_aAddrPortDest
        The AddressPort combinations that the load balancer will balance to.
      • m_propOptions

        protected Properties m_propOptions
        The optional settings that the load balancer will use.
      • m_threadRunning

        protected Thread m_threadRunning
        The Thread that the load balancer is started on.
      • m_listHandler

        protected List m_listHandler
        The list of RequestHandler daemons.
      • m_fRoundRobin

        protected boolean m_fRoundRobin
        Toggles between random and round-robin load balancing.
      • m_random

        protected Random m_random
        Random number generator.
      • m_iNextDestination

        protected int m_iNextDestination
        Round-robin index.
    • Constructor Detail

      • LoadBalancer

        public LoadBalancer​(LoadBalancer.AddressPort addrportHost,
                            LoadBalancer.AddressPort[] aAddrPortDest,
                            Properties propOptions)
        Instantiate a LoadBalancer object that will listen on a host address/port and redirect requests to destination addresses/ports.
        Parameters:
        addrportHost - the AddressPort combination for this host
        aAddrPortDest - the array of AddressPort combinations that requests will be sent to
    • Method Detail

      • main

        public static void main​(String[] asArgs)
        Command-line capability to start the load balancer.
      • showInstructions

        public static void showInstructions()
        Display the instructions for the command-line utility.
      • run

        public void run()
        Start the LoadBalancer.
        Specified by:
        run in interface Runnable
      • getHost

        public LoadBalancer.AddressPort getHost()
        Determine the AddressPort that the load balancer listens on.
        Returns:
        the AddressPort that the load balancer listens on
      • getDestinationCount

        public int getDestinationCount()
        Determine the number of AddressPort combinations that the load balancer balances requests to.
      • getDestination

        public LoadBalancer.AddressPort getDestination​(int i)
        Determine one of the AddressPort combinations that the load balancer balances requests to. (Indexed property "Destination".)
        Parameters:
        i - an index in the range 0 < i < getDesinationCount()
        Returns:
        the AddressPort that the load balancer listens on
      • getNextDestinationSocket

        public Socket getNextDestinationSocket()
        Open a socket to route to.
        Returns:
        the next available Socket to route a request to
      • getNextDestination

        protected LoadBalancer.AddressPort getNextDestination()
        Determine the next AddressPort combination to route to.
        Returns:
        the next AddressPort combination to route a request to
      • getRandomDestination

        protected LoadBalancer.AddressPort getRandomDestination()
        Determine a random AddressPort combination to route to.
        Returns:
        a random AddressPort combination to route a request to
      • getRoundRobinDestination

        protected LoadBalancer.AddressPort getRoundRobinDestination()
        Using a round-robin algorithm, determine the next AddressPort combination to route to.
        Returns:
        the next AddressPort combination to route a request to
      • getQueue

        protected LoadBalancer.Queue getQueue()
        Determine the Queue that Socket connections are placed into.
        Returns:
        the Queue of Socket objects that have been accepted
      • getProperty

        public String getProperty​(String sName,
                                  String sDefault)
        Determine the value of a String option.
        Parameters:
        sName - the property name that specifies the option to look up
        sDefault - the default option value to use if the option is not set
        Returns:
        the value of the specified option, or the passed default value if the option is not set
      • getProperty

        public int getProperty​(String sName,
                               int nDefault)
        Determine the value of an integer option.
        Parameters:
        sName - the property name that specifies the option to look up
        nDefault - the default option value to use if the option is not set
        Returns:
        the value of the specified option, or the passed default value if the option is not set
      • getProperty

        public boolean getProperty​(String sName,
                                   boolean fDefault)
        Determine the value of a boolean option.
        Parameters:
        sName - the property name that specifies the option to look up
        fDefault - the default option value to use if the option is not set
        Returns:
        the value of the specified option, or the passed default value if the option is not set
      • parseThreadExtension

        protected static String parseThreadExtension​(Daemon daemon)
        Parse the extension glued onto the end of a daemon's thread's name.
        Parameters:
        daemon - a Daemon object
        Returns:
        the extension glued onto the end of a daemon's thread's name
      • instantiateQueue

        protected LoadBalancer.Queue instantiateQueue()
        Factory method: Create a queue.
        Returns:
        a Queue instance
      • instantiateRequestHandler

        protected LoadBalancer.RequestHandler instantiateRequestHandler​(LoadBalancer.Queue queue)
        Factory method: Create a RequestHandler.
        Parameters:
        queue - a Queue of Socket objects
        Returns:
        a RequestHandler instance
      • instantiateResponseHandler

        protected LoadBalancer.ResponseHandler instantiateResponseHandler​(LoadBalancer.RequestHandler daemonRequest)
        Factory method: Create a ResponseHandler.
        Parameters:
        daemonRequest - the RequestHandler that the ResponseHandler will belong to
        Returns:
        a ResponseHandler instance