什么是Nacos
Nacos 是阿里巴巴为淘宝在高并发流量困境下所开发的一套云原生组件,主要功能是作为注册中心和配置管理,拥有良好的拓展性、可用性、易用性等优点,经历了淘宝双11的高并发场景,性能也是由实践验证后证实其可靠程度。
Nacos 配置模块概念
1、NameSpace
命名空间的主要作用就是在隔离在不同环境下项目的不同配置,常用的应用场景就是在开发环境与测试环境、生产环境等不同的服务器下使用不同的配置。如果不设置命名空间,则会默认使用public命名空间。
2、Group
Nacos 中的⼀组配置集,是配置的维度之⼀。通过⼀个有意义的字符串(如ABTest 中的实验组、对照组)对配置集进行分组,从而区分 Data ID 相同的配置集。当您在Nacos 上创建⼀个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置项,如database_url 配置和 MQ_Topic 配置
3、Nacos配置模型
Nacos一致性协议
Nacos中同时实现了AP和CP模式,两种模式中取决于服务注册时选择的节点类型,有临时节点和永久节点两种不同的类型。而两种不同的节点之间实现不一样的模式,根据底层实现的不同也采用了不同的一致性算法。
Nacos中临时节点和永久节点
临时节点也被称为非持久化节点,临时节点会定时向Nacos上传心跳,如果一定时间内没有接收到心跳,Nacos会认为该实例不健康,再经过一段时间则会删除该不健康实例。相对应的永久节点,也是持久化节点,作为Nacos服务端全程保持连接的服务,服务下的实例如果断开连接,Nacos会主动发起健康监测,询问对应实例是否健康,如果没有返回则视为实例断开连接。在Nacos2.0中,持久化作为注册服务时需要填写的属性,一般来说持久化节点保存的是业务的基础服务,没有这类服务则核心业务不可用,非持久化节点作为动态发现的主要对象,保存的一般是业务功能,不影响核心功能的拓展业务。
Raft算法和Distro算法
Raft算法作为强一致性算法,需要满足多数原则才能算通过数据同步,在nacos中作为临时节点无法保证节点可靠性,如果半数以上的临时节点断开连接那么nacos就会无法满足算法要求而下线,显然不太适合使用Raft。所以nacos研发了一套Distro算法应用于临时节点,大致思路写请求是通过访问任意服务器,服务器会根据你的key转发至负责该范围key的服务器,将写请求平均分配到每个服务器上,然后由服务器在写入之后定时对其他服务器进行数据同步。新加入的服务器则需要全量拉取数据进行同步,Distro集群会有心跳机制,保证元数据一致。