【Nacos架构 原理】内核设计之Nacos一致性协议

ops/2024/10/11 2:51:54/

文章目录

      • Nacos一致性协议
        • 为什么需要一致性协议
        • Nacos选择了Raft(强一致性)&Distro(最终一致性)
          • 服务发现角度
          • 配置管理角度
      • Nacos自研Distro协议
        • 背景
        • 设计思想
        • 数据初始化
        • 数据校验
        • 写操作
        • 读操作

Nacos一致性协议

为什么需要一致性协议

集群模式下,就需要考虑如何保障各个节点之间数据一致性以及数据同步。要想解决这个问题,就不得不引入共识算法,通过算法来保障各个节点之间的数据的一致性。

Nacos选择了Raft(强一致性)&Distro(最终一致性)
服务发现角度
  • 如果服务可以自己上报自己的健康状态,那就是非持久化服务
  • 如果服务要依赖naocs-server去探测,那就是持久化服务,比如DNS协议场景
    对于非持久化服务,由于强调服务的可用性而不是数据的即时一致性,采用了最终一致性共识算法。这种算法可以保证服务的持续可用性,同时确保一定时间内数据在各个节点间达成一致。
    非持久化服务通过给注册中心发送心跳让注册中心确认自己的健康状况,所以注册中心必须是高可用的,需要能够随时确认非持久化服务的健康状态,所以对于非持久化服务的数据一致性选择的是最终一致性

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

配置管理角度

配置数据,是直接在 Nacos 服务端进行创建并进行管理的,必须保证大部分的节点都保存了此配置数据才能认为配置被成功保存了,否则就会丢失配置的变更,如果出现这种情况,问题是很严重的,如果是发布重要配置变更出现了丢失变更动作的情况,那多半就要引起严重的现网故障了,因此对于配置数据的管理,是必须要求集群中大部分的节点是强一致的,而这里的话只能使用强一致性共识算法

Nacos自研Distro协议

背景

Distro协议是Nacos社区自研的一种AP分布式协议,是面向临时实例设计的一种分布式协议,其保证了在某些Nacos节点宕机后,整个临时实例处理系统依旧可以正常工作。作为一种有状态的中间件应用的内嵌协议,Distro保证了各个Nacos节点对于海量注册请求的统一协调和存储。

设计思想

Distro协议的主要设计思想

  • Nacos每个节点是平等的都可以处理写请求,同时把新数据同步到其他节点。
  • 每个节点只负责部分数据定时发送自己负责数据的校验值到其他节点来保持数据一致性。
  • 每个节点独立处理读请求,及时从本地发出响应
数据初始化

新加入的Distro节点会进行全量数据拉取。具体操作是轮询所有的Distro节点,通过向其他的机器发送请求拉取全量数据
在这里插入图片描述
全量拉取操作之后,Nacos的每台机器上都维护了当前的所有注册上来的临时实例数据

数据校验

在Distro集群启动之后,各台机器之间会定期发送心跳。心跳信息主要为各个机器上的所有数据的元信息(使用元信息的原因是,需要保证网络中数据传输的量级维持在一个较低水平)这种数据校验会以心跳的形式进行,即每台机器会在固定时间间隔向其他机器发起一次数据校验请求。
在这里插入图片描述
一旦数据校验过程中,某台机器发现其他机器上的数据与本地数据不一致,会发起一次全量拉取请求,将数据补齐

写操作

对于一个已经启动完成的 Distro 集群,在一次客户端发起写操作的流程中,当注册非持久化的实例的写请求打到某台 Nacos 服务器时,Distro 集群处理的流程图如下:
在这里插入图片描述
整个步骤包括几个部分(图中从上到下顺序):

  • 前置的 Filter 拦截请求,并根据请求中包含的 IP 和 port 信息计算其所属的 Distro 责任节点,并将该请求转发到所属的 Distro 责任节点上。
  • 责任节点上的 Controller 将写请求进行解析
  • Distro 协议定期执行 Sync 任务,将本机所负责的所有的实例信息同步到其他节点上。
读操作

由于每台机器上都存放了全量数据,因此在每一次读操作中,Distro 机器会直接从本地拉取数据。快速响应。
在这里插入图片描述
这种机制保证了 Distro 协议可以作为一种 AP 协议,对于读操作都进行及时的响应。在网络分区的情况下,对于所有的读操作也能够正常返回;当网络恢复时,各个 Distro 节点会把各数据分片的数据进行合并恢复。


http://www.ppmy.cn/ops/123773.html

相关文章

五、创建型(建造者模式)

建造者模式 概念 建造者模式是一种创建型设计模式,通过使用多个简单的对象一步步构建一个复杂的对象。它将一个复杂对象的构建过程与其表示分离,从而使同样的构建过程可以创建不同的表示。 应用场景 复杂对象构建:当一个对象有多个属性&…

k8s 中存储之 PV 持久卷 与 PVC 持久卷申请

目录 1 PV 与 PVC 介绍 1.1 PersistentVolume(持久卷,简称PV) 1.2 PersistentVolumeClaim(持久卷声明,简称PVC) 1.3 使用了PV和PVC之后,工作可以得到进一步的细分: 2 持久卷实验配置…

等保测评:如何建立有效的网络安全监测系统

等保测评中的网络安全监测系统建立 在建立等保测评中的网络安全监测系统时,应遵循以下步骤和策略: 确定安全等级和分类:首先,需要根据信息系统的安全性要求、资产的重要性和风险程度等因素,确定网络系统的安全等级&…

猿人学 — 第1届第13题(解题思路附源码)

猿人学 — 第1届第13题(解题思路附源码) 发现在翻页过程中,只要中途有几秒的间隔,那么就会显示拉取数据失败,然后网页重新加载回到刚进来显示的第一页的情况 重新加载时,会发送一系列的请求,发…

【QT Qucik】C++交互:接收QML信号

在本节课中,我们将深入探讨如何在C中接收QML发出的信号。我们将分为几个部分,详细说明信号的定义、发送及其在C中的接收。 理解信号和槽机制 Qt的信号与槽机制是一种用于对象之间通信的强大工具。信号是对象在特定事件发生时发送的通知,而槽…

性能测试笔记2-总

安装路径:先装jdk,后装JMeter 安装JDK: 下载JDK – 安装JDK – 配置环境变量 – 验证 安装Jmeter: 下载Jmeter – 安装Jmeter – 配置环境变量 – 启动验证 注意点: 下载JDK时,注意电脑操作系统是32位/64位 下载…

回归分析在数据挖掘中的应用简析

一、引言 在数据驱动的时代,数据挖掘技术已成为从海量数据中提取有价值信息的关键工具。 回归分析,作为一种经典的统计学习方法,不仅在理论研究上有着深厚的基础,而且在实际 应用中也展现出强大的功能。 二、回归分析基础 2.1 回…

R语言绘制散点图

散点图是一种在直角坐标系中用数据点直观呈现两个变量之间关系、可检测异常值并探索数据分布的可视化图表。它是一种常用的数据可视化工具,我们通过不同的参数调整和包的使用,可以创建出满足各种需求的散点图。 常用绘制散点图的函数有plot()函数和ggpl…