1.Nacos是什么

Nacos是什么?Nacos官网首页上对Nacos定义如下:

Nacos是一个用于构建云原生应用的动态服务发现、配置管理和服务管理平台。

从Nacos的定义可以看出,Nacos有两个核心功能: 服务发现和配置管理。

使用Nacos可以帮助我们发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助我们快速实现动态服务发现、服务配置、服务元数据和流量管理。

2.Nacos的架构

下图是Nacos的功能模块架构图:

nacos-architecture.jpeg

Naming Service和Config Service是Nacos Server的两个核心模块。

Provider APP和Consumer APP通过Open API与Nacos Server的核心模块进行通信。 Nacos的Open API是一组对外暴露的RESTful风格的HTTP接口,https://nacos.io/zh-cn/docs/open-api.html这个链接是Nacos OpenAPI的文档。

从Nacos的OpenAPI文档可以看出,使用Nacos OpenAPI可以实现:

  • 配置管理
    • 获取配置
    • 监听配置
    • 发布配置
    • 删除配置
    • 查询历史版本
    • 查询历史版本详情
    • 查询配置上一版本信息
  • 服务发现
    • 注册实例
    • 注销实例
    • 修改实例
    • 查询实例列表
    • 查询实例详情
    • 发送实例心跳
    • 创建服务
    • 删除服务
    • 修改服务
    • 查询服务
    • 查询服务列表
    • 查询系统开关
    • 修改系统开关
    • 查看系统当前数据指标
    • 查看当前集群Server列表
    • 查看当前集群leader
    • 更新实例的健康状态
    • 批量更新实例元数据(Beta)
    • 批量删除实例元数据(Beta)
  • 命名空间
    • 查询命名空间列表
    • 创建命名空间
    • 修改命名空间
    • 删除命名空间

上面Nacos OpenAPI的功能清单中包含以下名词"配置", “服务”, “实例”, “命名空间”。前面三个比较好理解,“命名空间"是用来干什么的呢。

好多中大型集群系统都会提供"命名空间"的抽象,一般都是用来做租户或隔离的。Nacos的"命名空间"是做什么的呢? 这就要引出Nacos的服务领域模型和数据模型。

3.Nacos的领域模型和数据模型

3.1 Nacos的服务领域模型

Nacos的服务领域模型以服务维度构建,注意这里的服务是指一个微服务的名称(例如:“用户服务”, “订单服务”)。

“服务"是Nacos领域模型中最上层的对象,在"服务"下面还有"集群"和"实例”。

服务、集群、实例共同组成了Nacos服务领域模型的分级存储模型:

nacos-domain-model.jpeg

服务: 在服务层级上可以配置元数据服务的保护阈值路由机制健康检查开关

关于服务保护阈值: 服务保护阈值是一个0~1之间的数,如果服务的健康实例数与服务总实例数的比例小于这个阈值,表示提供提供服务的服务实例已经不够了,此时Nacos会开启服务保护模式,Nacos将不会再主动剔除服务实例,同时还会将它认为不再健康的实例也返回给消费者,虽然这样可能会造成请求失败,但可以保障最低限度的服务可用性。

集群: 在每个服务实例启动时,可以设置服务实例所属的集群,这样一个服务的多个实例可以分属于不同的集群。在集群这个层面上可以配置健康检查模式元数据同步机制

实例: 可以在Nacos控制台查看服务实例的IP、端口、配置它的元数据、查看健康状态、修改上下线状态、配置路由权重。

3.2 Nacos的数据模型

Nacos数据模型的key由(Namespace, Group, Service/DataId)三元组唯一确定。Namespace、Group、Service/DataId是一个依次包含的结构,如下图所示。

nacos-data-model.jpeg

Namespace: 即命名空间,可用来区分开发环境、测试环境、生产环境。 Group: 是一个命令空间下的分组,不同分组之间的微服务是相互隔离的。 Service/DataId: 分组之下是服务(例如:“用户服务”, “订单服务”)。

Namespace+Group+Service/DataId为key可以定位到一个具体的微服务。例如生产环境中biz分组的用户服务的key可能是prod.biz.userService这样的。

参考