一、主要涵盖内容
1.服务端控制台源码环境搭建
2.服务端保存客户端注册信息
3.客户端的心跳检测机制
4.客户端服务发现
5.ribbon负载均衡
二、服务端控制台源码环境搭建
nacos服务端源码地址:https://github.com/alibaba/nacos
git clone下载后我这边与之前搭建环境版本保持一致,切换到1.1.4版本:
启动console项目:
启动后直接报错,是因为nacos默认走cluster集群配置,而我们本地还没配置集群环境
跟踪报错代码StartingSpringApplicationRunListener.logClusterConf():
那么只要STANDALONE_MODE为true,就可以走单机模式了。
也就是读取STANDALONE_MODE_PROPERTY_NAME的环境变量,那么我们再启动的时候修改环境变量就行了:
debug方式启动项目:
启动成功后访问控制台http://localhost:8848/nacos/#/login,初始账号密码:nacos/nacos
那么到此就恭喜你,你这边搭建好了源码服务端环境。
三、客户端注册服务接口
debug启动demo-a微服务,客户端自动注册调用NacosServiceRegistry.register方法,并打断点进行跟踪:
接口地址为/nacos/v1/ns/instance,params将注册需要的namespace、group、clsuter信息都传递过去
此时服务端项目naming进行断点调试:
客户端微服务基本注册信息被接受进来:
创建service并初始化service
同时service再init时候会开启定时任务进行心跳检测
最后将service中包含了namespace、group等信息,将service包裹成一个key,然后将instances列表放入consistencyService中:
四、客户端心跳机制
客户端微服务demo-a以debug方式启动,定位到NacosNamingService.registerInstance
进来服务端naming项目进行断点跟踪:
该过程可以可以再次将客户端注册信息进行重新注册,以防之前心跳失败后被剔除列表
五、客户端服务发现
这块就不具体展开来详细讲解了,以下为截图跟进具体的查询逻辑:
前面我们跟踪过了nacos-naming项目,
六、Ribbon负载均衡
Ribbon的使用只需要在RestTemplate上面加入注解@LoadBalanced既可实现服务发现
ribbin的负载均衡器默认为ZoneAvoidanceRule,同时也可以在配置文件中进行指定其它负载均衡策略
样例:
以下是摘抄自网上的负载均衡策略整理:
接下来咋们跟踪一下ribbon具体的处理逻辑,先找到自动装配类LoadBalancerAutoConfiguration:
进入装配类中查看:
同时后面配置了RestTemplateCustomizer定制化类:
最关键的就是LoadBalancerInterceptor拦截器了,接下来跟踪一下调用
调用代码:
浏览器访问(demo-a微服务测试地址调用demo-b服务):http://localhost:8001/sayHello/123
原始访问地址为http://demo-b/xxx:
跟踪进入ribbon的负载均衡逻辑,从服务列表中根据算法选择一个server
RibbonLoadBalancerClient将uri地址进行替换
好了,如果您看到这相信对整个nacos的服务端、客户端、客户端负载均衡应该有了大致的了解了。整个nacos这块先告一段落,后续文章中会继续分享分布式事物处理方案。