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

news2024/11/27 15:42:46

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的概念 每个节点负责一部分数据以及将自己的数据同步给其他节点,有效的降低了消息冗余的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1028777.html

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

相关文章

4k、VR与万兆光网

“全光万兆”对VR意义重大。 pico4的分辨率 PICO 4 的单眼分辨率是 2160 2160,整体分辨率高达 4320 2160。这是一款高性能的 VR 一体机,采用了 2.56 英寸的 Fast-LCD 屏幕,最高可实现 90Hz 刷新率,还有 1200 PPI 和 20.6 PPD 的…

基于Python+Tkinter实现一个贪食蛇小游戏

你是否还记得那个时代,当我们的手机还没有触摸屏,游戏也只有像“贪食蛇”这样的经典款?当时,许多人都沉迷于控制一条小蛇吃食物的乐趣中。而今,让我们利用Python和Tkinter,一起重温那个时代,制作…

多平台兼容性:跑腿系统开发的移动端和Web端技术选项

随着移动设备和Web浏览器的广泛使用,跑腿系统的开发需要考虑多平台兼容性。本文将讨论一些在开发跑腿系统的移动端和Web端时可用的技术选项,并提供示例代码以帮助您入门。 移动端技术选项: 1. React Native React Native是一个流行的移动应…

Linux shell编程学习笔记1:关于shell的前世今生

一、什么是Shell? Shell英文单词的原意是“外壳”,在计算机领域专指在操作系统(Operating System)外层,提供用户界面(User Interface)的程序,主要负责将用户的命令(Comma…

优彩云采集器下载-免费优彩云采集器下载地址

免费优彩云采集器。您是否曾为了数据采集而感到头疼不已?是否一直在寻找一种能够轻松、高效地获取所需数据的方法?别着急,让我们一起来了解如何通过优彩云采集器解决这些问题,从而让您产生购买的欲望。 免费全自动采集发布批量管理…

【Docker】Docker的使用案例以及未来发展、Docker Hub 服务、环境安全

前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 作者简介: 辭七七&#xf…

【Elsevier旗下】1区(TOP)、CCF推荐,仅2个月左右录用!

计算机领域 • 新刊速递 出版社:Elsevier 影响因子(2022):8.0-9.0 期刊分区:JCR1区,中科院2区(TOP) 检索数据库:SCIE&EI 双检 数据库检索年份:1992年…

客户端和服务端信息交互模型

什么是客户端和服务端? 客户端:可以向服务器发请求,并接收返回的内容进行处理 服务器端:能够接收客户端请求,并且把相关资源信息返回给客户端的 当用户在地址栏中输入网址,到最后看到页面,中间都…

魔众题库系统 v8.8.0 公式编辑升级,注册站内信和邮件,手机Banner支持视频背景

魔众题库系统基于PHP开发,可以用于题库管理和试卷生成软件,拥有极简界面和强大的功能,用户遍及全国各行各业。 魔众题库系统发布v8.8.0版本,新功能和Bug修复累计23项,公式编辑升级,注册站内信和邮件&#…

【文末送书】计算机网络编程 | epoll详解

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

解析ASEMI代理瑞萨R7S721031VCFP#AA1芯片及其优势

编辑-Z 在无数种芯片中,R7S721031VCFP#AA1芯片以其独特的性能和优势,脱颖而出,成为许多原创硬件开发人员的首选。本文将从各个层面详细介绍R7S721031VCFP#AA1芯片。 一、R7S721031VCFP#AA1芯片简介 R7S721031VCFP#AA1芯片是一款功能强大的高…

数据结构与算法(C语言版)P6---队列

1、队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除操作的特殊线性表,队列具有__先进先出__FIFO(First In First Out) 入队列:进行插入操作的一端称为__队尾__。 出队列:…

计算机网络 第四章:网络层

一.网络层概述 1.1分组转发和路由选择 网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机,可以将该任务划分为分组转发和路由选择两种重要的功能。 如图所示:这些异构型网络如果只是需要各自内部通信,那它们只需要实…

【数据结构初阶】四、线性表里的链表(带头+双向+循环 链表)

相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 【数据结构初阶】三、 线性表里的链表(无头单向非循环链表)_高高的胖子的博客-CSDN博客 引言 通过上期对单链表(无头单向非循环链表&#xff0…

python+vue理发店管理系统

理发店管理系统主要实现角色有管理员和会员,管理员在后台管理用户表模块、token表模块、收藏表模块、商品分类模块、热卖商品模块、活动公告模块、留言反馈模块、理发师模块、会员卡模块、会员充值模块、会员模块、服务预约模块、服务项目模块、服务类别模块、热卖商品评论表模…

【IC设计】NoC(Network on Chip)调研

文章目录 SoC(System on Chip)片上系统SoC的概念SoC总线架构存在的问题 互联网络基础①什么是互联网络?②哪里有互联网络?③互联网络的意义?④互联网络的参数有哪些 NoC(Network on Chip)片上互…

【MySQL基础】--- 约束

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌 目录 一、什么…

近距离看GPU计算-2

文章目录 前言1.SIMT和硬件多线程3.GPU的Memory Hierarchy 前言 本文转自公众号 GPU and Computing 在《近距离看GPU计算》系列第一篇里我们介绍了GPU的一些基础知识及其如何从图形加速设备演化到通用计算平台。本文我们会具体从处理单元设计和存储层次结构两个方面探讨GPU不…

多元化工具汇聚:企业如何提升协同效率?

在现代企业中,协同工作是不可或缺的。然而,随着企业规模的扩大,协同工作的难度也随之增加。针对这些挑战,我们推荐一款多元化工具—J2L3x。在这篇文章中,我们将介绍J2L3x的主要功能和如何利用它来提高企业的协同效率。…

UG\NX二次开发 一个分割曲线的工具

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: 今天有群友发了一个工具演示,是一个分割曲线的工具: 我当时想这位好兄弟怎么这么牛逼,原来啊,他跟你们一样喜欢看我的博客。他用我分享的分割曲线的…