Spring Cloud笔记01: Nacos简介
2022-02-22
1.Nacos是什么 #
Nacos是什么?Nacos官网首页上对Nacos定义如下:
Nacos是一个用于构建云原生应用的动态服务发现、配置管理和服务管理平台。
从Nacos的定义可以看出,Nacos有两个核心功能: 服务发现和配置管理。
使用Nacos可以帮助我们发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助我们快速实现动态服务发现、服务配置、服务元数据和流量管理。
2.Nacos的架构 #
下图是Nacos的功能模块架构图:
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服务领域模型的分级存储模型:
服务: 在服务层级上可以配置元数据、服务的保护阈值、路由机制、健康检查开关。
关于服务保护阈值: 服务保护阈值是一个0~1之间的数,如果服务的健康实例数与服务总实例数的比例小于这个阈值,表示提供提供服务的服务实例已经不够了,此时Nacos会开启服务保护模式,Nacos将不会再主动剔除服务实例,同时还会将它认为不再健康的实例也返回给消费者,虽然这样可能会造成请求失败,但可以保障最低限度的服务可用性。
集群: 在每个服务实例启动时,可以设置服务实例所属的集群,这样一个服务的多个实例可以分属于不同的集群。在集群这个层面上可以配置健康检查模式、元数据、同步机制。
实例: 可以在Nacos控制台查看服务实例的IP、端口、配置它的元数据、查看健康状态、修改上下线状态、配置路由权重。
3.2 Nacos的数据模型 #
Nacos数据模型的key由(Namespace, Group, Service/DataId)
三元组唯一确定。Namespace、Group、Service/DataId是一个依次包含的结构,如下图所示。
Namespace: 即命名空间,可用来区分开发环境、测试环境、生产环境。 Group: 是一个命令空间下的分组,不同分组之间的微服务是相互隔离的。 Service/DataId: 分组之下是服务(例如:“用户服务”, “订单服务”)。
以Namespace+Group+Service/DataId
为key可以定位到一个具体的微服务。例如生产环境中biz分组的用户服务的key可能是prod.biz.userService
这样的。