Are you aware of the concept of load balancers 🤔? They play an important role in improving application’s performance ⚡ and availability by distributing the requests load across multiple servers. A Load Balancer(LB) also keeps track of the status of all the resources while distributing requests. If a server is not available to take on new requests (due to failed health checks or elevated error rates), LB will stop sending traffic to such a server.
Generally, in any large scale system we add LBs at three places:
1️⃣ Between the user and the web server
2️⃣ Between web servers and an internal platform layer, like application servers or cache servers.
3️⃣ Between internal platform layers and database.
There are many ways to implement load balancing, such as:
1️⃣ Hardware Load Balancers
These are purpose-built devices mainly designed to distribute high volumes network traffic efficiently (something like a Citrix NetScaler).
2️⃣ Software Load Balancers
These, on the other hand, are implemented in software and can be deployed on common hardware devices or virtually in the cloud. Although, functionality wise these are similar to hardware load balances but these are very much cost effective. These are well-suited for cloud environments and agile deployments that demand scalability and adaptability (e.g. HAProxy, NGINX, AWS ALB)
3️⃣ DNS Load Balancers
DNS load balancers leverage the Domain Name System (DNS) to distribute traffic across multiple servers or endpoints. They are particularly useful for geographic load balancing and content delivery networks (CDNs) across multiple locations. These can be implemented with hardware appliances, software solutions, or cloud-based services.