当前位置: 首页 > 后端技术 > Java

为什么Nacos在一个集群中同时运行CP协议和AP协议?

时间:2023-04-01 23:12:44 Java

CAP理论CAP是:Consistency(一致性)Availability(可用性)Partitiontolerance(分区容忍度)这三个属性分别对应分布式系统的三个指标:而CAP理论是:一个分布式系统,是不可能做到的所有三个同时。如下图所示:为什么Nacos在一个集群中同时运行CP协议和AP协议?这其实是从Nacos的场景说起:Nacos是一个集服务注册发现和配置管理于一体的组件。因此,对于集群下节点间的数据一致性保证问题,需要拆分成两个方面:从服务注册发现的角度来看,服务发现注册中心是当前微服务体系中非常重要的组成部分。必须从服务发现注册中心获取服务感知对方服务且当前可以正常提供服务的实例信息。因此,对服务注册和发现中心组件的可用性提出了很高的要求。需要保证服务注册和发现能力在任何场景下都能尽可能对外提供服务;同时Nacos的服务注册和发现设计采用心跳。完善服务数据补偿机制。如果数据丢失,可以通过这种机制快速弥补数据丢失。因此,为了满足服务发现注册中心的可用性,这里不适合使用强一致性共识算法,因为需要强一致性共识算法对外提供服务。如果当前集群可用的节点数不超过一半,整个算法就会直接“罢工”,如果最终达成共识算法,服务的可用性会更有保障,会能够保证节点间的数据在一定时间内能够达成共识。以上都是针对Nacos服务发现注册中的非持久化服务(即客户端需要上报心跳来更新服务实例)。对于Nacos服务发现注册中的持久化服务,由于所有的数据都是直接调用Nacos服务器创建的,Nacos需要保证各个节点之间数据的强一致性,所以对于这类服务对于数据,强共识选用一致性算法保证数据一致性。从配置管理的角度来说,配置数据直接在Nacos服务器上创建和管理。必须保证大部分节点都保存了配置数据,才能认为配置保存成功,否则配置更改会丢失。如果出现这种情况,问题就很严重了。如果发布了重要的配置变更而丢失了变更动作,很可能会导致现网出现严重的故障。因此,对于配置数据的管理,需要要求很大一部分节点是强一致性的,而这里只能使用强一致性共识算法。参考:1.《Nacos 架构与原理》