不是什么二战的北非参谋长?!不可不知阿里注册中心nacos(一)
前序
基本概念看这个:
今天来学学Nacos
转载链接:https://mp.weixin.qq.com/s/TR2kVjmI-SrjiI8HsJRTew
正文
Nacos&Ribbon&Feign核心微服务架构图
架构原理
1、微服务系统在启动时将自己注册到服务注册中心,同时外发布 Http 接口供其它系统调用(一般都是基于Spring MVC)
2、服务消费者基于 Feign 调用服务提供者对外发布的接口,先对调用的本地接口加上注解@FeignClient,Feign会针对加了该注解的接口生成动态代理,服务消费者针对 Feign 生成的动态代理去调用方法时,会在底层生成Http协议格式的请求,类似 /stock/deduct?productId=100
3、Feign 最终会调用Ribbon从本地的Nacos注册表的缓存里根据服务名取出服务提供在机器的列表,然后进行负载均衡并选择一台机器出来,对选出来的机器IP和端口拼接之前生成的url请求,生成调用的Http接口地址 http://192.168.0.60:9000/stock/deduct?productId=100,最后基于HTTPClient调用请求
Nacos架构图
Nacos核心功能点
服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。
Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。
服务心跳:在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。
服务同步:Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。
服务发现:服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存
服务健康检查:Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)
Nacos服务注册表结构:Map<namespace, Map<group::serviceName, Service>>
Nacos服务端源码单机运行
git clone https://github.com/alibaba/nacos
选择Tag 1.1.4版本
注意,nacos源码导入要求maven 3.2.5以上版本
直接运行console模块里的 com.alibaba.nacos.Nacos.java
1 # 增加启动vm参数,注意nacos.home目录要改成你自己源码对应的distribution模块目录
2 ‐Dnacos.standalone=true ‐Dnacos.home=D:\ideaProjects\nacos\distribution
源码导读
1.入口是spring-cloud-alibaba-nacos-discovery.jar里的spring.fatories文件里的EnableAutoConfiguration对应NacosDiscoveryAutoConfiguration
2.NacosDiscoveryAutoConfiguration以@bean的方式注入了3个bean,分别是NacosRegistration、NacosServiceRegistr、NacosAutoServiceRegistration。源码就从这3个类往下顺藤摸瓜
3.NacosAutoServiceRegistration继承于父类AbstractAutoServiceRegistration,AbstractAutoServiceRegistration实现了ApplicationListener接口,spring容器启动的时候会调用实现了ApplicationListener接口的类里的处理事件方法onApplicationEvent

浙公网安备 33010602011771号