mirror of https://github.com/grpc/grpc-go.git
53 lines
2.0 KiB
Markdown
53 lines
2.0 KiB
Markdown
# Custom Load Balancer
|
|
|
|
This example shows how to deploy a custom load balancer in a `ClientConn`.
|
|
|
|
## Try it
|
|
|
|
```
|
|
go run server/main.go
|
|
```
|
|
|
|
```
|
|
go run client/main.go
|
|
```
|
|
|
|
## Explanation
|
|
|
|
Two echo servers are serving on "localhost:20000" and "localhost:20001". They
|
|
will include their serving address in the response. So the server on
|
|
"localhost:20001" will reply to the RPC with `this is
|
|
examples/customloadbalancing (from localhost:20001)`.
|
|
|
|
A client is created, to connect to both of these servers (they get both server
|
|
addresses from the name resolver in two separate endpoints). The client is
|
|
configured with the load balancer specified in the service config, which in this
|
|
case is custom_round_robin.
|
|
|
|
### custom_round_robin
|
|
|
|
The client is configured to use `custom_round_robin`. `custom_round_robin`
|
|
creates a pick first child for every endpoint it receives. It waits until both
|
|
pick first children become ready, then defers to the first pick first child's
|
|
picker, choosing the connection to localhost:20000, except every chooseSecond
|
|
times, where it defers to second pick first child's picker, choosing the
|
|
connection to localhost:20001 (or vice versa).
|
|
|
|
`custom_round_robin` is written as a delegating policy wrapping `pick_first`
|
|
load balancers, one for every endpoint received. This is the intended way a user
|
|
written custom lb should be specified, as pick first will contain a lot of
|
|
useful functionality, such as Sticky Transient Failure, Happy Eyeballs, and
|
|
Health Checking.
|
|
|
|
```
|
|
this is examples/customloadbalancing (from localhost:50050)
|
|
this is examples/customloadbalancing (from localhost:50050)
|
|
this is examples/customloadbalancing (from localhost:50051)
|
|
this is examples/customloadbalancing (from localhost:50050)
|
|
this is examples/customloadbalancing (from localhost:50050)
|
|
this is examples/customloadbalancing (from localhost:50051)
|
|
this is examples/customloadbalancing (from localhost:50050)
|
|
this is examples/customloadbalancing (from localhost:50050)
|
|
this is examples/customloadbalancing (from localhost:50051)
|
|
```
|