01、Nacos源码分析-Client重要Api

  • Instance:实例,代表一个Nacos Client主机实例。
  • ServiceInfo:微服务信息实例。其包含着一个Instance列表。
  • NamingService: 该接口只有一个实现类,NacosNamingService。通过这个类的实例,可以完成Client与Server间的通信,例如注册/取消注册,订阅/取消订阅,获取Server状态,获取Server中指定的Instance。

1.Nacos系统架构

 

Config Service
Naming Service
Nacos Core
OpenAI

Provider App
Consumer App
Name Server

2.Nacos数据模型

Name Server用于记录各个命名空间namespace中的实例信息。namespace、group与服务service或资
源dataId间的关系如下图。

 

 

DEFAULT_GROUP%40%40abcmsc-provider-depart@@DEFAULT
即groupId@@微服务名称@@clusterName

namespace、group、cluster、instance之间的关系如下图。

 

3.Nacos临时与持久实例

在服务注册时有一个属性ephemeral用于描述当前实例在注册时是否以临时实例出现。为true则为临时
实例,默认值;为false则为持久实例。

 

临时实例与持久实例的实例的存储位置与健康检测机制是不同的。

  • 临时实例:默认情况。服务实例仅会注册在Nacos内存,不会持久化到Nacos磁盘。其健康检测机制为Client模式,即Client主动向Server上报其健康状态(类似于推模式)。默认心跳间隔为5秒。在15秒内Server未收到Client心跳,则会将其标记为“不健康”状态;在30秒内若收到了Client心跳,则重新恢复“健康”状态,否则该实例将从Server端内存清除。即对于不健康的实例,Server会自动清除。
  • 持久实例:服务实例不仅会注册到Nacos内存,同时也会被持久化到Nacos磁盘。其健康检测机制为Server模式,即Server会主动去检测Client的健康状态(类似于拉模式),默认每20秒检测一次。健康检测失败后服务实例会被标记为“不健康”状态,但不会被清除,因为其是持久化在磁盘的。其对不健康持久实例的清除,需要专门进行。

临时实例适合于存在突发流量暴增可能的互联网项目。因为临时实例可以实现弹性扩容。

4.Nacos重要Api

Instance类: 实例,代表一个Nacos Client主机实例。

 

ServiceInfo类: 微服务信息实例。其包含着一个Instance列表。

 

NamingService: 该接口只有一个实现类,NacosNamingService。通过这个类的实例,可以完成Client与Server间的通信,例如注册/取消注册,订阅/取消订阅,获取Server状态,获取Server中指定的Instance。