1.Nacos实现原理了解吗?
Nacos是注册中心,主要是帮助我们管理服务列表。Nacos的实现原理大概可以从下面三个方面来讲:
- 服务注册与发现:当一个服务实例启动时,它会向
Nacos Server
发送注册请求,将自己的信息注册到注册中心。Nacos Serve会将这些信息保存在内存中,并提供REST接口供其它服务查询。 - 服务健康检测:Nacos通过心跳检测来检查服务是否正常,服务实例会定期向Nacos Serve发送心跳。如果Nacos Serve在定期的时间内没有收到服务实例的心跳,则会将其标注为不可用。如果还没有收到心跳,就从服务实例中移除。
- 服务负载均衡:Nacos会向客户端返回一个服务列表,客户端可以选择本地的负载均衡算法选择其中的一个进行调用。
Eureka的实现原理是一样的。
服务实例启动时,会将自己的信息注册到注册中心。Nacos Serve会将注册信息保存在内存,并提供REST接口供其它服务访问。Nacos通过心跳监测来检查服务实例是否异常,如果定期时间内没有返回心跳,就将服务实例设置为不可用。如果过段时间还没有返回心跳,则将服务实例从实例列表中移除。注册中心会将服务实例列表发送给Nacos客户端,Nacos客户端会根据本地的负载均衡算法选择一个实例调用。
2.Nacos是如何实现配置的动态更新的?
- Nacos采用的是长轮询的方式向Nacos Server发起配置更新的查询功能,服务端配置没有变更的时候连接是一直打开的,直到服务端配置发生变更或者连接超时才会返回。
- Nacos 客户端需要获取服务端的变更配置,比较本地配置信息和服务器的配置信息。一旦发现服务端的配置有差异就表示服务器的配置有更新,需要将更新的配置拉取到本地。
Nacos采用长轮询的方式来检查配置信息变更,如果服务端配置信息没变更,连接就会一直打开。如果服务端的配置信息发生变更,就将变更的配置信息拉取到本地。
3.Nacos如何完成配置共享和热更新的?
- 首先添加配置信息到Nacos中
- 然后在
bootstrap.yaml
文件中拉取共享配置。
Spring 在初始化的时候会读取bootstrap文件。比如我们将购物车上限数量10,设置到Nacos中。这样我们更新购物车上限数量时,就不需要重启系统了。
Nacos实现配置共享和热更新时,首先将配置信息添加到Nacos中,然后在bootstrap.yaml文件中拉取共享配置。Spring初始化的时候会先读取bootstrap.yaml文件,然后读取application.yaml文件。