Nacos内核设计之一致性协议(上)

简介: Nacos内核设计之一致性协议(上)

Nacos一致性协议


Nacos技术架构

image.png

先简单介绍下Nacos的技术架构 从而对nacos有一个整体的认识 如图Nacos架构分为四层 用户层、应用层、核心层、各种插件 再深入分析下nacos一致性协议的发展过程及原理实现

为什么nacos需要一致性协议

Nacos是一个需要存储数据的一个组件 为了实现这个目标,就需要在Nacos内部实现数据存储 单机下其实问题不大,简单的内嵌关系型数据库即可 但是集群模式下 就需要考虑如何保障各个节点之间的数据一致性以及数据同步 而要解决这个问题 就不得不引入共识算法 通过算法来保障各个节点之间的数据的一致性

为什么Nacos会在单个集群中同时运行CP协议以及AP协议呢

  • 从服务注册来看

服务之间感知对方服务的当前可正常提供服务的实例信息,必须从服务发现注册中心进行获取,因此对于服务注册发现中心组件的可用性,提出了很高的要求,需要在任何场景下,尽最大可能保证服务注册发现能力可以对外提供服务

image.png

服务A和服务B往注册中心注册 服务A从注册中心获取服务B的信息 访问服务B 服务B从注册中心获取服务A的信息 访问服务A

image.png

如果数据丢失的话,是可以通过心跳机制快速弥补数据丢失

  • 对于非持久化数据(即需要客户端上报心跳进行服务实例续约)

不可以使用强一致性共识算法

image.png

必须要求集群内超过半数的节点正常 整个集群才可以正常对外提供服务

最终一致共识算法

最终一致共识算法的话,更多保障服务的可用性,并且能够保证在一定的时间内各个节点之间的数据能够达成一致

  • 对于持久化数据

强一致性

因为所有的数据都是直接使用调用Nacos服务端直接创建,因此需要由Nacos保障数据在各个节点之间的强一致性,故而针对此类型的服务数据,选择了强一致性共识算法来保障数据的一致性


image.png

nacos集群包括3个节点 分别位于不同的网络分区 服务A往节点1上注册 然后持久化到节点1对应的本地存储上 此时要保证节点1对应的持久化数据必须同步到节点2和节点3上

  • 从配置管理来看
    强一致性


image.png

在nacos服务端修改了配置 必须同步到集群中的大部分节点即必须要求集群中的大部分节点是强一致性的

强制一致性算法的选择

image.png

Nacos选择了JRaft 是因为JRaft支持多RaftGroup,为Nacos后面的多数据分片带来了可能

最终一致性算法的选择

image.png

最终一致性协议算法 例如Gossip和Eureka内的数据同步算法 而Nacos使用的是阿里自研的Distro算法 该算法集中了Gossip和Eureka同步算法的优势

Gossip缺点

image.png

对于原生的Gossip,由于随机选取发送消息的节点,也就不可避免的存在消息重复发送给同一节点的情况,增加了网络的传输的压力,也给消息节点带来额外的处理负载

Distro

image.png

引入了Server的概念 每个节点负责一部分数据以及将自己的数据同步给其他节点,有效的降低了消息冗余的问题


相关文章
|
Java Nacos
对于Nacos 2.x版本,默认是通过gRPC协议进行通信的
对于Nacos 2.x版本,默认是通过gRPC协议进行通信的
842 7
|
24天前
|
存储 算法 Nacos
Nacos支持哪些协议
Nacos支持哪些协议
|
5月前
|
Nacos 微服务
Zookeeper 的 ZAB 协议 以及 zookeeper 与 nacos 注册中心比对
Zookeeper 的 ZAB 协议 以及 zookeeper 与 nacos 注册中心比对
96 4
|
存储 缓存 中间件
Nacos架构与原理 - 自研 Distro 协议 (AP分布式协议)
Nacos架构与原理 - 自研 Distro 协议 (AP分布式协议)
212 0
|
存储 运维 算法
Nacos架构与原理 - CAP一致性协议 ( Raft & Distro)
Nacos架构与原理 - CAP一致性协议 ( Raft & Distro)
341 0
|
存储 运维 算法
说透 Nacos 一致性协议
说透 Nacos 一致性协议
233 0
|
存储 Kubernetes 网络协议
Nacos 的一致性协议介绍与在liunx 上安装
在介绍一致性协议前先了解一下CAP理论 Consistency 一致性,在分布式系统中的所有数据备份,在同一时刻是否同样的值; Availability 可用性,只要收到用户的请求,服务器就必须给出回应; Partition tolerance 分区容错性,以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择
284 0
Nacos 的一致性协议介绍与在liunx 上安装
|
存储 缓存 中间件
Nacos内核设计之一致性协议(下)
Nacos内核设计之一致性协议(下)
256 0
Nacos内核设计之一致性协议(下)
|
6天前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
|
1月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心
74 1
Nacos配置中心