分布式之gossip共识算法分析

news2024/11/26 8:38:27

写在前面

假如你的业务对系统的可用性要求非常高,就算集群只剩下一个节点,也要能够正常对外提供服务(虽然此时系统能力已经骤降,但至少还在!),因为raft 要求大多数节点可用所以就没有用武之地了。此时,我们就可以考虑使用gossip协议了,使用该协议来实现一种去中心化的集群,从而实现只有一个节点集群依然坚挺

1:gossip都有哪些内容

gossip有如下3部分内容:

直接邮寄:收到更新的节点直接随机选择若干个节点,将更新同步到这些节点上
反熵:异步的以对比的方式来同步数据,实现数据最终一致性
谣言传播:异步的随机选择若干个节点,传播数据,然后收到数据的节点,再随机选择若干个节点,随机传播数据,重复这个过程,直到所有节点都收到了数据

分别来看下这3种方式。

2:直接邮寄

这种方式比较简单,先将需要同步的更新缓存到队列中,然后随机选择若干个节点,同步更新,如下图节点A随机选择了节点B和节点D来同步数据:

在这里插入图片描述

但是这种方式只能实现数据的安全性(因为同步到多个副本了),无法实现最终一致性,所以还需要反熵以及谣言传播机制。

3:反熵

这种方式是集群中的节点定时选择一个其他节点来并对比二者数据,达到最终一致性,其实就是一个取数据并集的过程,如下节点A同步数据到节点D:

在这里插入图片描述

具体的同步方式有三种,,即上图的方式。

在这里插入图片描述

推拉

在这里插入图片描述

在工程上,为了加快同步的速度,以及对比的次数我们可以使用推拉方式的环状复制,假设有A,B,C,D 4个节点,则这个过程可能如下图:

在这里插入图片描述

假设A的数据是1,B的数据是2,C的数据是3,D的数据是4,则达到最终一致性的同步过程如下:

1:A对B推拉数据 
    A数据为12,B数据为12
2:B对C推拉数据
    A数据为12,B数据为123,C数据为123
3:C对D推拉数据
    A数据为12,B数据为123,C数据为1234,D数据为1234
4:D对A推拉数据(注意这里如果没有5,A重新推拉B,则B将缺失数据4)
    A数据为1234,B数据为123,C数据为1234,D数据为1234
5:A对B推拉数据(各节点就达到了最终数据一致性)
    A数据为1234,B数据为1234,C数据为1234,D数据为1234

这种方式适合于节点已知稳定不变,且节点数较少的场景中,如果是节点比较多或者是节点数动态变化时就需要使用谣言传播来达到最终一致性了,接着也来看下。

4:谣言传播

这是一种类似于谣言传播的数据同步方式,一传十,十传百,具体是一个节点随机的选择一批节点同步更新,然后收到更新的节点重复这个过程,直到所有的节点都收到了更新为止,如下:

在这里插入图片描述

如上图就是节点A首先同步给节点B和节点D,然后节点B同步给节点C和节点E,这样所有的节点就都有了来自节点A的更新,达到了最终一致性。

写在后面

小结

本文分析了基于raft算法的中心化架构存在的问题,基于此引出了适用于非中心化架构的gossip协议,并一起看了其直邮,反熵,谣言传播三种更新同步的方式。希望本文能够帮助到你,如果你有什么问题,就留言我们一起讨论吧!

参考文章列表

分布式理论之共识算法gossip 。

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

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

相关文章

【2223sW1】LOG1

这里写自定义目录标题写在前面23.2.19报错Unable to allocate xxx GiB for an array with shape (xxxx, xxxx)23.2.20psi6图片绘制选择了部分r,绘制了g6(r)23.2.21从lammpstrj文件中导出了1001X6个csv文件虚拟内存扩展代码运行占用资源查询写…

字符串转换为二进制-课后程序(JAVA基础案例教程-黑马程序员编著-第五章-课后作业)

【案例5-4】 字符串转换为二进制 【案例介绍】 1.任务描述 本例要求编写一个程序,从键盘录入一个字符串,将字符串转换为二进制数。在转换时,将字符串中的每个字符单独转换为一个二进制数,将所有二进制数连接起来进行输出。 案…

PowerJob容器的今生,容器是如何部署到Worker上,并正常运行的

这仅仅是一篇PowerJob源码分析的文章,但是也有一些java基础知识,在实践中学习效果更好,感兴趣就留下来交流一下吧。 上回书说到,这个powerjob容器是如何生成模板,如何上传到服务器上去,本回主要总结的是&am…

死磕Node模块兼容性,ESM和CJS我全都要!

目录 前言 一些概念 CJS(CommonJS) ESM(ECMAScript Modules) 兼容操作 效果演示 总结 前言 在Node版本13.2.0(2019年)之前,我们一般使用CJS(CommonJS)模式在代码…

Java JDBC详解

1、JDBC概念、本质、好处 概念: JDBC 就是使用Java语言操作关系型数据库的一套API 全称:( Java DataBase Connectivity ) Java 数据库连接 本质: 官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口…

展现AI与自动化测试技术之间的神奇化学反应

目录 零:前言 一、介绍 1.1、什么是自动化测试技术 1.2、痛点 1.3、几款优秀的自动化测试工具介绍 1.3.1、Selenium 1.3.2、龙测AI-TestOps云平台 1.3.3、TestCafe 二、实操 2.1、主要功能模块介绍 2.2、实战演练 2.2.1、创建web项目 2.2.2、录制流程图…

Taro3.x 容易踩坑的点(阻止滚动穿透,弹框蒙层父级定位)

解决弹框滚动的时候,下层也会滚动问题》阻止滚动穿透(react,vue)案例描述:页面展示时需要滚动条才可以显示完整,但是当我们显示弹框的时候,即使不需要滚动条,但是页面仍然可以滚动,并且下层内容会随着滚动变…

MES助力灯具照明行业从制造到”智造”

现如今,LED照明行业产品更新换代太快,一个产品一两年不更新一下外观、材料,就会被对手超越。这直接导致LED产品标准化程度不够高,LED下游制造类厂家智能化生产程度普遍偏低。 加之大多属于劳动密集型产业,传统的依靠买…

Hive分区表与分桶表的使用具体说明

目录 一、分区表 (一)分区表基本语法 1.创建分区表 2.往分区表中写入数据的两种方法 (1)load装载本地数据 (2)insert...select...(常用) 3.读取分区表数据 4. Hive分区表的存储路径规划:分区字段分区值 5.分区表基本操作 (1)查看所有分区信息 (2)新增分区…

C#使用MQTT通信 .Net实现MQTT通信 java使用MQTT通信 java实现MQTT通信

MQTT是一种轻量级、基于发布/订阅模式的通信协议,通常用于物联网设备间的通信。MQTT协议采用简单的二进制消息格式,能够在不占用过多网络带宽的情况下进行高效的通信。以下是使用MQTT进行通信的一些基本概念:BrokerMQTT通信中的中间件&#x…

机器学习算法: AdaBoost 详解

1. 集成学习概述 1.1. 定义 集成学习(Ensemble learning)就是将若干个弱分类器通过一定的策略组合之后产生一个强分类器。 弱分类器(Weak Classifier)指的就是那些分类准确率只比随机猜测略好一点的分类器,而强分类器&…

住宅防雷接地的选择要求和施工方法

在您家的布线系统中,防雷接地系统是一项至关重要的安全功能。如果系统发生某种故障,接地系统提供电阻最小的路径,确保电流安全地流回大地本身。因此,它减少了短路导致火灾或危及生命的电击的可能性。家庭接地系统的最后一个也是最…

成都的Java培训机构有哪些?

强烈自荐 二十三年教学实力积累 "课工场是专注互联网教育的生态平台,汇聚中国和北美数百位来自互联网企业的行业大咖,向寻求技术提升和想进入IT行业的人群提供直播、录播、线下面授等多模式教学服务,并通过全国线下服务中心提供更加成熟…

【JVM】内存结构

【JVM】内存结构 文章目录【JVM】内存结构1. 程序计数器1.1 定义1.2 作用2. 虚拟机栈2.1 定义2.2 栈内存溢出2.3 线程运行诊断3. 本地方法栈4. 堆4.1 定义4.2 堆内存溢出4.3 堆内存诊断5. 方法区5.1 定义5.2 组成5.3 方法区内存溢出5.4 运行时常量池5.5 StringTable特性1. 程序…

Hadoop集群模式安装(Cluster mode)

1、Hadoop源码编译 安装包、源码包下载地址 Index of /dist/hadoop/common/hadoop-3.3.0为什么要重新编译Hadoop源码? 匹配不同操作系统本地库环境,Hadoop某些操作比如压缩、IO需要调用系统本地库(*.so|*.dll) 修改源码、重构源码 如何…

电子墨水屏的应用场景

电子纸挺好个东西,大家都把注意力集中在商超场景,其实还有更多有趣的场景方案可用,价值也不小,比如: 仓库场景:通过亮灯拣选,提高仓库作业效率。 仓库循环使用标签:做NFC类发卡式应…

CnOpenData专精特新“小巨人”企业工商注册基本信息数据

一、数据简介 “专精特新”一词最早来源于2011年7月,由时任工信部总工程师朱宏任在《中国产业发展和产业政策报告(2011)》新闻发布会上首次提出。“专精特新”是指具备专业化、精细化、特色化、创新型四大优势的企业。根据工信部的定义&#…

content-type几种常见类型区别

Content-Type叫做MIME(mediaType)类型,使用Content-Type来表示请求和响应中的媒体类型信息。如果是请求头,它用来告诉服务端如何处理请求的数据,如果是响应头,它用来告诉客户端(一般是浏览器)如…

numpy的常见数据类型

常见数据类型介绍Python 原生的数据类型相对较少, bool、int、float、str等。这在不需要关心数据在计算机中表示的所有方式的应用中是方便的。然而,对于科学计算,通常需要更多的控制。为了加以区分 numpy 在这些类型名称末尾都加了“_”。类型…

【ESP32+freeRTOS学习笔记-(九)事件组】

目录1、概述2、事件组的特性2.1 事件组、事件标志和事件位2.2 事件组位长的设置2.3 多任务访问3、使用事件组管理事件3.1 xEventGroupCreate()3.2 xEventGroupSetBits()3.3 xEventGroupGetBits()3.4 xEventGroupWaitBits()3.5 示例4、使用事件组同步任务4.1 xEventGroupSync()4…