| # 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) |
| ``` |