|
|
|
@ -25,9 +25,10 @@ like storage. |
|
|
|
|
|
|
|
|
|
This thicker client places more of the load balancing logic in the client. For |
|
|
|
|
example, the client could contain many load balancing policies (Round Robin, |
|
|
|
|
Random, etc) used to select servers from a list. In this model, a load balancer |
|
|
|
|
would be responsible for providing a list of servers and let the client choose |
|
|
|
|
the preferred server from the list. |
|
|
|
|
Random, etc) used to select servers from a list. In this model, a list of |
|
|
|
|
servers would be either statically configured in the client, provided by the |
|
|
|
|
name resolution system, an external load balancer, etc. In any case, the client |
|
|
|
|
is responsible for choosing the preferred server from the list. |
|
|
|
|
|
|
|
|
|
One of the drawbacks of this approach is writing and maintaining the load |
|
|
|
|
balancing policies in multiple languages and/or versions of the clients. These |
|
|
|
@ -36,14 +37,14 @@ to server communication so the client would need to get thicker to support |
|
|
|
|
additional RPCs to get health or load information in addition to sending RPCs |
|
|
|
|
for user requests. |
|
|
|
|
|
|
|
|
|
It would also significantly complicate the API: the new design hides the load |
|
|
|
|
balancing complexity of multiple layers and presents it as a simple list of |
|
|
|
|
servers to the client. |
|
|
|
|
It would also significantly complicate the client's code: the new design hides |
|
|
|
|
the load balancing complexity of multiple layers and presents it as a simple |
|
|
|
|
list of servers to the client. |
|
|
|
|
|
|
|
|
|
### External Load Balancing Service |
|
|
|
|
|
|
|
|
|
The client load balancing code is kept simple and portable, implementing |
|
|
|
|
straightforward algorithms (ie, Pick First, Round Robin) for server selection. |
|
|
|
|
well-known algorithms (ie, Round Robin) for server selection. |
|
|
|
|
Complex load balancing algorithms are instead provided by the load balancer. The |
|
|
|
|
client relies on the load balancer to provide _load balancing configuration_ and |
|
|
|
|
_the list of servers_ to which the client should send requests. The balancer |
|
|
|
@ -76,7 +77,7 @@ specific list of “picked” servers in a particular order. The balancer can |
|
|
|
|
optionally provide an expiration interval after which the server list should no |
|
|
|
|
longer be trusted and should be updated by the balancer. |
|
|
|
|
|
|
|
|
|
The load balancer is may open reporting streams to each server contained in the |
|
|
|
|
The load balancer may open reporting streams to each server contained in the |
|
|
|
|
server list. These streams are primarily used for load reporting. For example, |
|
|
|
|
Weighted Round Robin requires that the servers report utilization to the load |
|
|
|
|
balancer in order to compute the next list of servers. |
|
|
|
|