1.Nacos架构图
- Provider App:服务提供方-是指提供可复用和可调用服务的应用方。
- Consumer App:服务消费方-是指会发起对某个服务调用的应用方。
- Name Service:用过VIP(Vritual IP)或者DNS的方法实现Nacos高可用的服务路由。
- Nacos Service:Nacos服务提供者,里面包含Open API 是功能访问入口,Config Service 配置服务、Name Servcie注册服务,Consistency Protocol 是一致性协议,用于Nacos集群节点的数据同步,这里使用的是Raft算法;
- Nacos Console:Nacos控制台。
整个Nacos集群,服务提供者通过Vip(virtual Ip)访问Nacos Server 高可用集群,基于Open Api 完成服务的注册和服务的查询。Nacos Servcie 本身可以支持主备模式。底层采用数据一致性算法完成从节点的数据同步。
2.Nacos注册中心原理
服务实例启动时启动到服务注册表中,关闭时注销;
服务消费者查询服务注册表,获得可用实例并缓存在本地,服务调用时先从本地读取服务注册表;
服务注册中心需求调用服务实例的健康检查API来验证它是否能够处理请求。
3.Nacos和CAP
集群下AC模式NACOS所有节点在同一时间看到的数据是一致的;而AP模式的定义是NACOS客户端所有的请求都会收到响应。
何时选择使用何种模式?
1.一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如 Spring cloud 和 Dubbo 服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。(注册中心作为系统中很重要的的一个服务,需要尽最大可能对外提供可用的服务,通常选择 AP 来保证服务的高可用)
2.如果需要在服务级别编辑或者存储配置信息,那么 CP 是必须,K8S服务和DNS服务则适用于CP模式。CP模式下则支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。(采用 CP 协议,则需要当前集群可用的节点数过半才能工作)
临时实例和永久实例的区别
1.临时实例只是临时存在于注册中心中,会在服务下线或不可用时被注册中心剔除,临时实例会与注册中心保持心跳,注册中心会在⼀段时间没有收到来自客户端的心跳后会将实例设置为不健康,然后在⼀段时间后进行剔除。
2.永久实例在被删除之前会永久的存在于注册中心,且有可能并不知道注册中心存在,不会主动向注册中心上报心跳,那么这个时候就需要注册中心主动进行探活。文章来源:https://www.toymoban.com/news/detail-441312.html
4.临时实例健康检查机制
在 Nacos 中,用户可以通过两种方式进行临时实例的注册,通过 Nacos 的 OpenAPI 进行服务注册或通过 Nacos 提供的 SDK 进行服务注册。两种方式都是由客户端向注册中心发送心跳,注册中心会在连接断开或是心跳过期后将不健康的实例移除。
OpenAPI 的注册方式实际是用户根据自身需求调用 Http 接口对服务进行注册,然后通过 Http 接口发送心跳到注册中心。在注册服务的同时会注册⼀个全局的客户端心跳检测的任务。在服务⼀段时间没有收到来自客户端的心跳后,该任务会将其标记为不健康,如果在间隔的时间内还未收到心跳,那么该任务会将其剔除。
SDK 的注册方式实际是通过 RPC 与注册中心保持连接(Nacos 2.x 版本中,旧版的还是仍然通过OpenAPI 的方式),客户端会定时的通过 RPC 连接向 Nacos 注册中心发送心跳,保持连接的存活。如果客户端和注册中心的连接断开,那么注册中心会主动剔除该 client 所注册的服务,达到下线的效果。同时 Nacos 注册中心还会在注册中心启动时,注册⼀个过期客户端清除的定时任务,用于删除那些健康状态超过⼀段时间的客户端。(Nacos2.x默认使用SDK方式,推荐使用改方式)文章来源地址https://www.toymoban.com/news/detail-441312.html
到了这里,关于三、nacos注册中心实现原理分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!