本节开始分析Balance执行原理,通过上面流程可知,Balance Build的创建来自于Resolver的解析完成后调用updateResolverState方法,我们从updateResolverState方法开始分析Balance执行流程。
1. Balance调用流程
1)updateResolverState(s resolver.State, err error) error
方法的传入参数是Resolver的Addr的地址列表。
2)applyServiceConfigAndBalancer(sc *ServiceConfig, addrs []resolver.Address)
方法传入需要使用的BalanceName,以及Resolver的Addr地址列表。
3)switchBalancer(name string)
方法传入负载均衡名称,根据负载均衡方法查询已经注册的负载均衡实现句柄,调用负载均衡的Build
方法。
4)Build方法返回的是Balance的实例句柄,并被保存起来。
5)updateClientConnState
方法是每个Balance句柄都要实现的接口,用于创建真正的TCP连接并更新连接状态。至此,Balance模块并没有执行负载均衡,负载均衡的选择是在客户端SayHello
服务调用时进行Pick选择。
6)调用服务函数SayHello