文章目录
- 一、环境隔离
- 1. Namespace(命名空间):
- 2. Group(分组):
- 3. Services(服务):
- 4. DataId(数据ID):
- 5. 实战演示:
- 5.1 默认情况(public):
- 5.2 Namespace的创建:
- 5.3 微服务接入namespace:
- 二、服务分级存储模型
- 1. 服务级别:
- 2. 集群级别:
- 3. 区域级别:
- 三、权重配置
- 1. 服务升级:
- 2. 服务选择:
- 四、临时实例与持久实例
- 1. 临时实例:
- 2. 持久化实例:
一、环境隔离
在Nacos中,数据模型的相关概念包括namespace、group、services和dataId。
1. Namespace(命名空间):
- Namespace是Nacos的最高级别的隔离单位,用于隔离不同的应用或环境。
- 每个Namespace都是相互隔离的,拥有独立的配置和服务注册表。
- 通过Namespace可以实现不同环境的配置和服务管理,如开发环境、测试环境和生产环境可以使用不同的Namespace。
2. Group(分组):
- Group是在同一个Namespace下对服务或配置进行逻辑上的分组。
- 通过Group可以对服务或配置进行分类和管理,方便进行版本控制、灰度发布等操作。
- 一个Group可以包含多个服务或配置。
3. Services(服务):
- Services表示一组提供相同服务的实例集合。
- 在Nacos中,服务注册中心用于将服务实例注册到服务列表中,并提供服务发现和负载均衡等功能。
- 每个服务都有一个唯一的服务名(Service Name),可以根据服务名来查找和管理服务实例。
4. DataId(数据ID):
- DataId是指在Nacos中唯一标识一个配置的字符串。
- 对于配置管理来说,DataId对应于配置文件的文件名或者配置项的唯一标识符。
- 对于服务注册和发现来说,DataId对应于服务的唯一标识符。通过DataId可以唯一定位到一个配置或服务。
这些概念在Nacos中的组织结构和管理方式,可以帮助用户更好地进行配置管理和服务注册与发现。
5. 实战演示:
5.1 默认情况(public):
在Nacos中,默认情况下,所有的服务(services)、配置(data)和分组(group)都在同一个Namespace中,该Namespace的名称为public。这意味着默认情况下,所有的服务和配置都在同一个命名空间下进行管理和隔离。
5.2 Namespace的创建:
找到命名空间菜单:
新建命名空间:
命名空间不填默认会自动生成,填写完,点击确定按钮。
可以看到,页面里已经创建好了一个新的namespace。
5.3 微服务接入namespace:
这里可以先看下这篇文章:Spring Cloud Alibaba 整合 Nacos 实战
5.3.1 消费者 consumer 默认处于public命名空间:
5.3.2 provider修改yml配置:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: c431c2a3-91bc-40ed-a99c-6fe856ac1e7d
5.3.3 启动provider 对应namespace如下:
5.3.4 consumer向provider发起调用:
控制台报错如下:
因为namespace不同,会导致consumer找不到provider
二、服务分级存储模型
在分布式系统中,实例之间的关系可以分为以下几个级别:
1. 服务级别:
每个实例都属于同一个服务,即 consumer 服务。
2. 集群级别:
多个实例可以组成一个集群。
例如consumer-1、consumer-2和consumer-3 可以组成一个consumer-service集群。
127.0.0.1:8101 # 北京机房
127.0.0.1:8102 # 上海机房
127.0.0.1:8103 # 上海机房
3. 区域级别:
如果实例分布在不同的区域或数据中心,可以将它们划分为不同的区域级别。
例如,consumer-1和 consumer-2 部署在北京机房,而consumer-3 部署在上海。
服务分级模型如下:
在微服务相互访问时,最好优先访问同一集群的实例,因为本地访问速度更快。仅当本集群不可用时,才考虑访问其他集群的实例。
例如:北京机房的consumer服务应该优先调用北京同机房的provider服务,在调不通的情况下才应该去访问上海机房的provider服务。
接下来,给consumer配置不通集群
在Nacos中,可以通过配置 cluster-name 属性 来指定集群的名称。可以将同一机房内的实例都配置相同的集群名称,这样它们就会被认为是同一个集群的成员。
修改yml如下:
spring:
application:
name: consumer #微服务名称
#配置nacos注册中心地址
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
cluster-name: SH
此时启动,三个consumer对应实例,打开nacos控制台的服务列表:
点击详情,可以看到consumer有两台在上海集群,一台在北京:
三、权重配置
Nacos中的服务权重功能可以帮助解决一些问题,包括服务升级和服务选择。
1. 服务升级:
当系统需要进行服务升级或者版本迭代时,可以通过设置服务的权重来实现平滑的升级过程。例如,如果要升级一个服务的新版本,可以先将新版本的实例的权重设置为较低的值,然后逐步提高权重,同时降低旧版本实例的权重,实现新旧版本的平滑过渡。
2. 服务选择:
通过设置不同实例的权重,可以实现对不同实例的选择和分配。例如,可以将某些性能更好或者资源更充足的实例设置较高的权重,从而使得请求更有可能被路由到这些实例上。这样可以实现负载均衡和资源优化,提高系统的性能和可用性。
通过Nacos的权重功能,可以灵活地控制和调整服务的权重,以满足不同场景和需求。这为服务的管理和运维提供了更多的控制和灵活性。
在nacos控制台,找到 consumer 服务的实例列表,点击编辑,即可修改权重:
这里我们将provider 权重修改为0:
通过consumer 调用 provider 则该实例永远不会被访问,报错如下:
权重为 0 表示该实例的服务不可用或不参与负载均衡,因此请求不会被路由到该实例上。
四、临时实例与持久实例
1. 临时实例:
默认nacos就是临时实例,临时实例是指在服务注册后,当实例下线或者断开连接时,Nacos会立即将其从服务列表中删除。
这意味着临时实例在下线后不会被其他服务调用。
2. 持久化实例:
与之相对的是持久化实例,持久化实例在下线后仍然会保留在服务列表中,其他服务仍然可以调用它。
在Nacos中,可以通过配置来指定实例是临时实例还是持久化实例。
修改yml文件中ephemeral属性为false :
spring:
cloud:
nacos:
discovery:
ephemeral: false
观察consumer的临时实例 已经变为了 false
观察provider的临时实例 已经变为了 false