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

news2024/10/4 1:34:22

文章目录

      • 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.coloradmin.cn/o/2187165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型笔记05--coze经典案例分析

大模型笔记05--coze经典案例分析 介绍经典案例分析抖音视频转小红书文案艺术照 & 卡通照片助手艺术照图像流卡通照片图像流多功能图像助手 注意事项说明 介绍 扣子是新一代 AI 应用开发平台,具备完善的生态系统,是国内最出色的AI平台之一。用好coze…

C/C++/EasyX ——入门图形编程(2)

【说明】这一篇的内容都是很基础的,所以内容会很多,具体现在也不知道要写多少,先写下去吧,新手小白们都不用担心,这个内容不会很难,因为我也是从一无所知过来的,很好入门的,&#xf…

游览器输入URL并Enter时都发生了什么 面试完美回答

文章目录 前言URL解析DNS解析**浏览器缓存****操作系统缓存**:**路由器缓存**:ISP(Internet service provider)缓存DNS递归解析IP地址的获取缓存结果 建立TCP连接发送HTTP请求服务器响应TCP链接断开渲染页面解析一 HTML解析过程解…

带你快速了解后端API服务的搭建

前言:写这篇文章的初衷是想分享一下我学习搭建后端API的过程,希望能帮助到和我一样想快速写API接口并部署到服务器上的同学😜 第一步:创建阿里云服务器 1、首先注册一个阿里云账号🤗 2、出于学习成本考虑&#xff0…

Linux系统,docker容器内查看pikachu源代码

在Linux系统中,要查看Docker容器内的Pikachu的源代码,需要先确保Pikachu的Docker镜像已经运行在系统上。以下是步骤和示例代码: 1、查找Pikachu容器的ID或名称: docker ps -a 2、使用docker exec命令进入运行中的Pikachu容器&am…

Spring MVC的运行流程详解

Spring MVC作为一个广泛使用的框架,提供了灵活且强大的MVC架构支持。尤其在业务系统中,Spring MVC能够有效地处理大量并发请求,提供良好的用户体验。本文将详细讲解Spring MVC的运行流程,以电商交易系统为案例,帮助读者…

不再烦恼!四款AI工具助你轻松打造完美PPT

嘿,各位办公室的小伙伴们,今儿咱们来聊聊那些让咱们工作生活大变样的“智能小伙伴”。作为每天跟PPT打交道的办公室文员,我敢说,自从有了这些神器,我的工作效率简直坐上了火箭,嗖嗖地往上涨! 1…

Vue-Lecture1-Notes

渐进式框架 Vue 被称为“渐进式框架”,是因为它允许开发者根据项目的需求逐步引入和使用其功能,而不需要一次性使用整个框架。简单来说,Vue 提供了从简单到复杂的功能层次,可以灵活选择使用。 按需使用:Vue 的核心功能…

CSP-J Day 3 模拟赛补题报告

姓名:王胤皓,校区:和谐校区,考试时间: 2024 2024 2024 年 10 10 10 月 3 3 3 日 9 : 00 : 00 9:00:00 9:00:00~ 12 : 30 : 00 12:30:00 12:30:00,学号: S 07738 S07738 S07738 请关注作者的…

docker运行arm64架构的镜像、不同平台镜像构建

背景 Docker 允许开发者将应用及其依赖打包成一个轻量级、可移植的容器,实现“一次构建,到处运行”的目标。然而,不同的操作系统和硬件架构对容器镜像有不同的要求。例如,Linux 和 Windows 系统有不同的文件系统和系统调用&#…

银河麒麟桌面操作系统修改默认Shell为Bash

银河麒麟桌面操作系统修改默认Shell为Bash 💐The Begin💐点点关注,收藏不迷路💐 在银河麒麟桌面操作系统(ARM版)中,若要将默认Shell从Dash改为Bash,可执行以下步骤: 打开…

谈及医疗和教育真实需求是什么

医疗就是健康,物质基础身体棒; 教育就是心智,心理稳定智慧高。 提示:能让人内心充盈并不断提升自我能力的教育才是高品质的。 全文终结 需求量萎缩对品质端的改变-CSDN博客 与参考资料中的内容以及“贪嗔痴”的关联性进行详细扩…

【C++】vector类的模拟实现

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山冈! 🔥 所属专栏:C深入学习笔记 💫 欢迎来到我的学习笔记! 本篇文章参考博客:【C】…

HTML5+CSS+JavaScript剪子石头布游戏

HTML5CSSJavaScript剪子石头布游戏 用HTML5CSSJavaScript剪子石头布游戏实现剪子石头布游戏,游戏有成绩计数,人、机输赢情况,及平局情况。 ✂代表剪刀,▉代表石头,▓ 代表布,给出人机双方的出拳情况 游戏…

对于无人机行业技术、人才、实验环境共享,这事你怎么看?

对于无人机行业技术、人才、实验环境共享这一话题,我认为这是一个具有前瞻性和积极意义的趋势,对于推动无人机行业的健康发展具有重要意义。以下是我对此事的详细看法: 一、技术共享促进创新与发展 1. 加快技术创新:技术共享能够…

web前端面试中拍摄的真实js面试题(真图)

web前端面试中拍摄的真实js面试题(真图) WechatIMG258.jpeg WechatIMG406.jpeg WechatIMG407.jpeg WechatIMG922.jpeg WechatIMG1063.jpeg © 著作权归作者所有,转载或内容合作请联系作者 喜欢的朋友记得点赞、收藏、关注哦!!…

散度旋度拉普拉斯算子速记

哈密顿运算符号想象成一个矢量(对x偏导,对y偏导,对z偏导) 1、旋度就是这个矢量做点乘 2、散度就是矢量做叉乘 3、拉普拉斯算子就是哈密顿算符点乘哈密顿算符

【自然语言处理】(1) --语言转换方法

文章目录 语言转换方法一、统计语言模型1. 词向量转换2. 统计模型问题 二、神经语言模型1. 词向量化2. 维度灾难3. 解决维度灾难4. embedding词嵌入5. Word2Vec技术5.1 连续词袋模型(CBOW)5.2 跳字模型(Skip-gram) 总结 语言转换方…

[论文笔记]SGPT: GPT Sentence Embeddings for Semantic Search

引言 解码器Transformer的规模不断壮大,轻松达到千亿级参数。同时由于该规模,基于提示或微调在各种NLP任务上达到SOTA结果。但目前为止解码器Transformer还无法应用在语义搜索或语句嵌入上。 为了简单,下文中以翻译的口吻记录,比…

平台数据分类与聚类实验报告

参考书籍:《数据流挖掘与在线学习算法》 李志杰 1.6.1 实验目的 本书内容以及课程实验主要涉及Java程序设计语言、数据挖掘工具Weka和数据流机器学习平台MOA,因此,需要安装、配置并熟悉实验环境。Java、Weka和MOA都是开源小软件&#xff0…