Load Balancer
Introduction
Load Balancer is an element of the K2 architecture that can be used to distribute the load among multiple application servers. The K2 API thus has the ability to connect to multiple application servers simultaneously. When sending a request, the least busy server is evaluated first and it receives the request for processing.

Picture: Load Balancer and K2 API
Example of using Load Balancer and K2 API:
The K2 API receives the request for processing. Load Balancer is addressed for the fastest request processing. The Load Balancer sends a request to all ASs and finds out their current load. It evaluates the least busy server and passes this information to the K2 API. The K2 API thus sends the request directly via the selected application server to the Load Balancer.
LoadBalancer can also be used for web K2, which when the user logs on, finds the most suitable application server and connects the user to it.

Picture: Load Balancer and Web K2
Example of using Load Balancer and Web K2:
Web K2 accepts the user's login request. The web K2 Load Balancer will contact the request to process the request as quickly as possible. The Load Balancer sends a request to all AS and finds out their current load. Web K2 passes the information on the least busy server. Web K2 will use the best evaluated server and thus the fastest processing of the user's login request will take place. Every other request of a given user is already processed by a specific selected AS.
Each K2 API and K2 web installation has its own Load Balancer. In the installation, you can set a specific list of application servers and the configuration of the Load Balancer, which can affect the algorithm for selecting a suitable application server.
Load Balancer evaluates the most suitable application server for request processing in two modes:
- Loading and evaluating the best AS before each connection request (preLoadingEnabled = false)
- Before each request to create a connection, the application servers are bypassed with a request for their statistics, which are processed and evaluated. The most appropriate AS is then used for the given request.
- Load and evaluate the best AS continuously (preLoadingEnabled = true)
- Statistics are read in the specified time interval and the best AS is evaluated. Each connection request is evaluated based on the calculated result of the statistics.
Load Balancer parameters
- requestTimeout:(default 1s) Each connection request is evaluated based on the calculated result of the statistics. If a connection fails with the AS by this time, or the AS does not respond by this time, the AS will be dropped for this particular evaluation. Upon the next request, it will be added to the list of possible application servers again.
- validTimeout: (default 0 u preLoadingEnabled = false, 1000- preLoadingEnabled = true) - the time for which the detected statistics and thus the best AS are valid.
- maxHistoryCount:(default 0) - number of records in history. If the number is 0, the history is not recorded. It is used only for debugging the optimal setting of parameters, when we can look into the history of the distribution of requests and adjust the parameters accordingly.
- preLoadingEnabled:(default false) - enable / disable mode with continuous loading of statistics. If set to true, then validTimeout means the time interval in which the statistics are updated.
- The appServers section defines the application servers that will be used by the Load Balancer. The default is the one used in the K2 API / K2 Web configuration
- Ex. for K2 API (Web K2 is similar only, configuration is done in JSON) "<add server =". "pipe =" ScriptService "/>”
- server: IP or PC name
- pipe: pipe AS name
- the multiplier section is used to set the weight of individual statistics and thus to influence the calculation algorithm
- Ex. for K2 API (Web K2 is similar only, configuration is done in JSON) <add uid="bscSystemCPUAvg" value="1"/>"
- uid: statistic identifier
bscSystemCPUAvg - average CPU usage over time
bscSystemFreeMemory - currently free operation memory
bscAppPoolSpandAvg - average waiting time for the K2 AS request before it is serviced
bscAppNCLSessions - number of connected web K2 users
bscAppAnonymousSessions - number of anonymous threads for K2 API
bscAppSchedulerSessions - number of running scheduled tasks
- value: the value by which the received statistic value will be multiplied by AS. This makes it possible to influence the weight of a given parameter.
A value of 0 disables the evaluation of this parameter during the calculation.
If in any mode the Load Balancer does not connect with the AS in the required time interval, or the AS does not supply statistics in the specified time, it is excluded from the evaluation for the given AS pass. In the next pass, the Load Balancer will try to connect to the AS again.