服务注册与发现框架 | CAP模型 | 控制台管理 | 社区活跃度 |
---|---|---|---|
Eureka | AP | 支持 | 低(2.x版本闭源) |
Zookeeper | CP | 不支持 | 中 |
Consul | CP | 支持 | 高 |
Nacos | AP/CP | 支持 | 高 |
计算机专家 埃里克·布鲁尔(Eric Brewer)于2000 年在ACM 分布式计算机原理专题讨论会(简称:PODC)中鹈鹕的分布式系统设计要靠路的三个核心要素:
1. 一致性(Consistency):同一时刻的同一请求的结果相同,所有的数据要求有强一致性(Strong Consistency)
2. 可用性(Availability):所有实例的读写请求在一定时间内可以得到正确的响应
3. 分区容错性(Partition tolerance):在网络异常(光缆断裂、设备故障、宕机)的情况下,系统仍能提供正常的服务
以上三个特点就是CAP原则(又称CAP原理),但是三个特性不可能同时慢煮,所有分布式系统设计要考虑的是在满足P(分区容错性)的前提下选择C(一致性)还是A(可用性),即:CP或AP
cp原则属于强一致性原则,要求所有节点可以查询的数据随时都要保持一致(同步中的数据不可查询),即:若干个节点形成一个逻辑的共享区域,某一个节点更新的数据多会立即同步到其他数据节点之中,当数据同步完成后才能返回成功的结果,但是实际的运行工程中网络故障在所难免,如果此时若干个服务节点之间无法通信时就会出现错误,从而牺牲了以可用性原则(A),例如关系型数据库中的事务。
AP原则属于弱一致性原则,在集群中只要有存货的节点那么所发送来的所有请求多可以得到正确的响应,在竞选数据同步处理操作中即使某些节点没有成功的实现数据同步也返回成功,这样的牺牲一致性原则(C原则)。
使用场景: 对于数据的同步一定会发出指令,但是最终的节点是否真的实现了同步,并不保证,可是却可以及时的得到数据更新成功的响应,可以应用在网络环境不是很好的场景中。
nacos无缝支持一些主流的开源生态,同时再阿里进行Nacos设计的时候重复的考虑了市场的运作(市面上大多都是以单一的实现形式为主,例如:zookeeper使用的是CP、而Eureka 采用的是AP),在Nacos中提供了两种模式的动态切换。
curl -X PUT ‘$NACOS_SERVER:8848/nacos/vi/ns/operator/switches?entry=serverMode&value=CP’
注意⚠️:临时和持久的区别主要是在健康检查失败后的表现,持久化实例健康检查失败后会被标记成不健康,而临时实例会直接从列表中被删除。
命名空间(Namespace)
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的Group 和 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
配置分组(Group)
Nacos中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如Buy或Trade) 对配置进行分组,从而区分Data ID 相同的配置集。当您在Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组默认采用DEFAULT_GROUP。配置分组的常见场景:不同的应用或组建使用了相同的配置类型,如database_url 配置和MQ_topic配置。
配置集 ID(Data ID)
Nacos中的莫哥配置集的ID。 配置集ID是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类java包(如com.taobao.tc.refund.level)的命名规则保证全局唯一性。此命名规则非强制。
配置集:一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。
这三者关系类似于Java里面的package 名和类名,最外层的Namespace 是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
默认情况
Namespace = public , Griup=DEFAULT_GROUP,默认Cluster是DEFAULT
具体情况
Nacos默认的命名空间是public ,我面就可以利用Namespace 来实现隔离,比如我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace 之间是隔离的。
Group本身就是分组的意思,它可以把不同的微服务划分到同一个分组里面去。
剩下的就是具体微服务,一个Service可以包含多个Cluster,Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比如说,将一个Service部署在北京和杭州的机房中,北京机房的Service就可以起名为(BJ),杭州机房中的Service就可以起名为(HZ),这样就可以尽量让同一个机房的微服务互相调用,提升性能。
Group分组默认是:DEFAULT_GROUP,所以现在我们就需要分出两组,一组为“dev开发组”,另一组是“test测试组”
1.新建Group
2.新建TEST 测试分组
bootstrap.yml文件:
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 # Nacos 服务注册中心地址
config:
server-addr: localhost:8848 # Nacos 作为配置中心地址
file-extension: yaml # 指定yaml格式的配置
group: TEST_GROUP #指定分组
#${prefilx}-${spring.application.name}.${file-extension}
#${spring.application.name}-${spring.profiles.active}.${file-extension}
#nacos-config-client-dev.yaml
#nacos-config-client-test.yaml
application.yml文件内容
spring:
profiles:
#active: dev # 表示开发环境
#active: prd # 表示生产环境
#active: test # 表示测试环境
active: info #
Namespace(命名空间)方案,默认此方案为public,此方案不能删除,我们现在来新建两个命名方案
1.服务管理-服务列表页面查看
此时我们就可以切花对应的命名空间,然后通过GROUP和DataID来进行切换,如果想切换命名空间,需要通过命名空间ID来进行切换。
2.按照域名配置(Namespace+Group+DataId)编写
先通过namespace 命名空间ID来确认使用的命名空间
bootstrap.yml文件配置:
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 # Nacos 服务注册中心地址
config:
server-addr: localhost:8848 # Nacos 作为配置中心地址
file-extension: yaml # 指定yaml格式的配置
group: DEV_GROUP #指定分组
namespace: 31aa0a73-6bef-4911-8ae4-7e6c0272e6ad # 命名空间
#${prefilx}-${spring.application.name}.${file-extension}
#${spring.application.name}-${spring.profiles.active}.${file-extension}
#nacos-config-client-dev.yaml
#nacos-config-client-test.yaml
3.测试:访问:http://localhost:3377/config/info 来进行测试