...
/Client-side Load Balancer for Twitter
Client-side Load Balancer for Twitter
Let's understand how Twitter performs client-side load balancing.
Introduction
In the previous lesson, we conceived the design of Twitter using a dedicated load balancer. Although this method works, and we've employed it in other designs, it may not be the optimal choice for Twitter. This is because Twitter offers a variety of services on a large scale, using numerous instances and dedicated load-balancers are not a suitable choice for such systems. To understand the concept better, let's understand the history of Twitter's design.
Twitter’s design history
The initial design of Twitter included a monolithic (Ruby on Rails) application with a MySQL database. As Twitter scaled, the number of services increased and the MySQL database was sharded. A monolithic application design like this is a disaster because of the following reasons:
A large number of developers work on the same codebase, which makes it difficult to update individual services.
One service's upgrade process may lead to the breaking of another.
Hardware costs grow because a single machine performs numerous services.
Recovery from failures is both time-consuming and complex.
With the way Twitter has evolved, the only way out was many microservices where each service can be served through hundreds or thousands of instances.
Client-side load balancing
In a client-side load balancing technique, there's no dedicated intermediate load-balancing infrastructure between any two services with a large number of instances. A node requesting a set of nodes for a service has a built-in load balancer. We refer to the requesting node or service as a client. The client can use a variety of techniques to select a suitable instance to request the service. The illustration below depicts the concept of client-side load balancing. Every new arriving service or instance will register itself with a service registry so that other services are aware of its existence.
In the diagram above, Service A has to choose a relatively less-burdened instance of Service B. Therefore, it will make use of the load balancer component inside it to choose the most suitable instance of Service B. Using the same client-side load balancing method, Service B will talk to other services. It’s clear that Service A is the client when it is calling Service B, whereas Service B is the client when it is talking to ...