Basics of Load Balancers
Nagesh Vasanthakumara
Senior Member Of Technical Staff @ Salesforce | Performance Engineer
What is Load Balancing?
As the name implies, Load Balancing is a mechanism or component which performs the load balancing operation. Load balancing is a key component of a highly-available infrastructures. Commonly used to improve the performance and reliability of web sites, applications, databases and other services by distributing the traffic across multiple backend servers also known as a server farm or server pool.
Modern high-traffic websites must serve hundreds of thousands of concurrent requests from users and respond back all in a fast and reliable manner. Load Balancing helps effectively in distributing these high volumes across multiple backend servers.
Let us take an example of this architecture, when a request directly go to a application server. If that single server goes down, the user will no longer be able to access the website. In addition, if many users try to access the server simultaneously and if it is unable to handle the load, they may experience slow load times or may be unable to connect at all.
This single point of failure can be mitigated by introducing a Load-Balancer and at least one additional web server on the backend. Typically, all of the backend servers will supply identical content so that users receive consistent content regardless of which server responds.
What is a Load Balancer?
Load Balancer is a virtual server which receives incoming client requests, uses the load balancing algorithm to select an application server, and forwards the requests to the selected application server.
A Load Balancer acts as the traffic cop sitting in front of application servers and routing client requests across all servers capable of fulfilling those requests in a manner that maximizes speed and capacity utilization and ensures that no one server is overworked, which could degrade performance. If a single server goes down, the Load Balancer redirects traffic to the remaining online servers. When a new server is added to the server group, the Load Balancer automatically starts to send requests to it.
Load Balancer allows users to intelligently distribute traffic to a single IP across any number of servers using a number of different protocols. This means that the processing load can be shared across many nodes, rather than being limited to a single server increasing performance during times of high activity. It increases the reliability of your web application and allows you to build your application with redundancy in mind. If one of your server nodes fails, the traffic is programmatically distributed to other nodes without any interruption in service.
Functions of a Load Balancer
- Distributes client requests or network load efficiently across multiple servers.
- Ensures high availability and reliability: By sending requests only to servers that are online.
- Provides the flexibility to add or subtract servers per demand: As the user base of your website increases, you may have to think of upgrading from a single server to a dual server configuration. Load Balancing helps in adding or removing those servers as and when demand changes.
- Limiting points of failure: In the event that one of the nodes in your cluster experiences any kind of hardware or software failure the traffic can be redistributed to the other nodes keeping your website up.
Load Balancer Algorithms
The load balancing algorithm is used to determine which of the healthy servers on the backend will be selected to serve the client request. A few of the commonly used algorithms are:
- Round Robin – Requests are distributed across the group of servers sequentially. This method will evenly distribute the traffic across nodes, but does not take into account the current load or responsiveness of the nodes.
- Least Connections – A new request is sent to the server with the fewest number of active connections. This method does not consider the current load or responsiveness of the nodes.
- IP Hash – The IP address of the client is used to determine which server receives the request. This method ensures that a particular user will consistently connect to the same server.
- Historical Intelligence or the Perceptive Algorithm - This method decides which node to send the traffic to using both the current number of open connections between the load balancer and the server, and the response times of the nodes.
What kind of traffic can Load Balancers handle?
- HTTP — Standard HTTP balancing directs requests based on standard HTTP mechanisms. The Load Balancer sets the X-Forwarded-For, X-Forwarded-Port headers to give the backend information about the original request.
- HTTPS — HTTPS balancing functions the same as HTTP balancing, with the addition of encryption. Encryption is handled in one of two ways: either with SSL passthrough which maintains encryption all the way to the backend or with SSL termination which places the decryption burden on the load balancer but sends the traffic unencrypted to the back end.
- TCP — For applications that do not use HTTP or HTTPS, TCP traffic can also be balanced. For example, traffic to a database cluster could be spread across all of the servers.
- UDP — More recently, some load balancers have added support for load balancing core internet protocols like DNS and syslogd that use UDP.
Load Balancer can be used at different level.
- Link level : This is called link load balancing, and it consists in choosing what network link to send a packet to.
- Network level : This is called network load balancing, and it consists in choosing what route a series of packets will follow.
- Server level : this is called server load balancing and it consists in deciding what server will process a connection or request.
Health Check
Health check is the process by which the Load Balancer determines if the backend servers are available to serve traffic. Health checking generally falls into two categories:
- Active: The Load Balancer sends a ping on a regular interval (e.g., an HTTP request to a /healthcheck endpoint) to the backend and uses this to gauge health.
- Passive: The Load Balancer detects health status from the primary data flow. e.g., Load Balancer might decide a backend is unhealthy if there have been three connection errors in a row.
Types of Load Balancers
Load Balancers typically come in two types: hardware-based and software-based.
Hardware Load Balancer is a PC class CPU, network interfaces with packet processing capabilities, and some software to bind it all together. Vendors of hardware-based solutions load proprietary software onto the machine they provide, which often uses specialized processors. To cope with increasing traffic at your website, you have to buy more or bigger machines from the vendor.
On the other hand, Software solutions generally run on commodity hardware, making them less expensive and more flexible. You can install the software on the hardware of your choice or in cloud environments. If you know your traffic won't be too high, software load balancers are the best to choose.
Session Persistence
As we know, information about a user’s session is often stored locally in the browser. For an example, in an e commerce application the items in a user’s cart might be stored at the browser level until the user is checking out. Changing which server receives requests from that client in the middle of the shopping session can cause performance issues or outright transaction failure. In such cases, it is essential that all requests from a client are sent to the same server for the duration of the session. This is known as session persistence.
Session persistence is a means of directing a client request(s) to the same, single backend server for the duration of that session. This kind of persistence is also referred to as a sticky session.
Advantages of a Load Balancer
- Increased Scalability: Amount of traffic on the server has a direct effect on the performance of the website. If there is a sudden spike in the traffic, it will become difficult for the server to handle the load and the website may stop responding. With the help of a Load Balancer, we can distribute the load across multiple servers to handle the extra traffic.
- Redundancy: When one of the web server fails, request will be routed to the other working servers. There by achieving the redundancy.
- Reduced Downtime, Increased Performance: Maintenance and planned downtime can be planned without affecting the website performance during non-peak hours.
- Efficiently Manages Failures: Load Balancer detects the server failures early on and manages them efficiently, making sure that failure doesn’t affect the incoming workload.
- Increased Flexibility: IT admins will have the flexibility in handling website traffic by using multiple Load Balancers. When there is a need for maintenance work on the server, they can do it without impacting the server up-time.
This was about the basics of Load Balancing/Load Balancer. Please feel free to comment for the improvement of this article.
Thank you all!
Performance Test Engineer
6 年Nice article and it very useful to me.
Cloud Performance Test Architect at Ericsson
6 年Here i think you missed to mention one important load balancing algo:?Ratio-based Round Robin? ratio-based round robin deals with unequal sized servers. With this approach, the more powerful servers get additional requests on each round.