数据库修仙筑基篇二——分布式一致性协议

容错分布式一致性算法——totem(一)   第一次接触分布式一致性算法是通过totem,现在开始研究paxos和raft之类,后面也是会做笔记的,便先将totem算法先写下来,用于对比学习。   totem协议,全称是The Totem Single-Ring Ordering and Membership Protocol,是一个基于令牌环的分布式一致性算法。一个令牌在集群节点之间传递,拿到令牌的节点才能够发消息,消息通过UDP广播发... 阅读详情

分布式一致性协议

当前业界主流的分布式一致性协议主要有如下几种:

  • totem协议(简单即有效)

    totem协议,全称是The Totem Single-Ring Ordering and Membership Protocol,是一个基于令牌环的分布式一致性算法。corosync基于totem协议实现。

  • paxos协议(二阶段提交)

    • raft协议(二阶段提交,基于paxos协议完善和改进)

      Raft协议就是Paxos的衍生,etcd基于raft协议实现。

    • zab协议(二阶段提交)

      ZAB协议是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复和原子广播协议。

totem协议

totem协议,全称是The Totem Single-Ring Ordering and Membership Protocol,是一个基于令牌环的分布式一致性算法。一个令牌在集群节点之间传递,拿到令牌的节点才能够发消息,消息通过UDP广播发送。所以,totem只适合在局域网里的小集群使用,这种情况下,这个算法性能还算高的。从CAP来说,totem具有强一致性,但几乎没有分区容错性,在网络出现分区时,totem会脑裂,当网络恢复时,会造成消息丢失。

在多个节点组成的集群中,totem实现让一个节点发送消息,其它所有节点都能全部收到,并且有序的提交给上层应用。

说起totem协议,最简单的形象就是,他将多个节点组成一个令牌环。多个节点手拉手形成一个圈,大家依次的传递token。只有获取到token的节点才有发送消息的权利。简单有效的解决了在分布式系统中各个节点的同步问题,因为只有一个节点会在一个时刻发送消息,不会出现冲突。当然,如果有节点发生意外时,令牌环就会断掉,此时大家不能够通信,而是重新组建出一个新的令牌环。

totem的节点有四个状态,也是组建集群的4个阶段。

  • Gather阶段:
    这个阶段用于每个节点向外界广播自己的存在并收集其它节点的存在
  • Commit阶段:
    这个阶段会产生一个代表节点,该节点向其它所有节点收集信息,并将收集的信息传递给其它所有节点,用于后续阶段
  • Recovery阶段:
    这个阶段用于新旧集群交替时,旧集群成员用新集群传递旧集群的消息,使旧集群成员达到所有节点消息全部有序提交到上层
  • Operational阶段:
    这个阶段是集群组建完成正常工作的状态,这个状态一个节点发送的消息其它节点都会全部有序提交给上层

通信方式。

  • 当集群有节点要发起通信时,需要等待token。
  • 当拿到token后,先广播这次需要发送的数据,然后传递token来确认所有人都接收到消息。
  • 如果确认成功,释放token。

节点的加入和退出。

  • 当集群中有节点加入时,加入的节点广播一个加入信息,所有人都开始广播自己的信息,当所有人都获得同伴信息,开始由id最小的人提交一个token,交由所有节点确认。
  • 如果都确认后,则节点正式加入,开始正常运行。
  • 当集群有节点退出时,由于令牌环断链,触发token超时,则同样开始广播信息,然后由最小id提交token,经过确认后恢复正常。

raft协议

Paxos 算法的描述偏学术化,缺失了很多细节,无法直接应用于工程领域。实际工程应用中的分布式算法大多是 Paxos 的变种,Raft协议就是Paxos的简化。

RAFT算法分为两个阶段:Leader选举,日志复制。也有三种角色,分别为:

  1. Leader(领导者):负责发送要进行共识的数据,如果客户端发送的数据不是发送到Leader而是其他角色,其他角色会进行转发至Leader。
  2. Follower(追随者):参与共识的角色
  3. Candidate(候选者):如果Follower没有收到Leader的心跳响应超过150——300ms,会进行Leader选举

正常运行的情况下,会有一个Leader,其他全为Follower,Follower只会响应Leader和Candidate的请求,而客户端的请求则全部由Leader处理,即使有客户端请求了一个Follower也会将请求重定向到Leader。Candidate代表候选人,出现在选举Leader阶段,选举成功后Candidate将会成为新的Leader。

Raft 将一致性问题分解为 3 个独立的子问题:

  • Leader 选举Election:Leader 进程失效后能够自动选举出一个新的 Leader
  • 日志复制Replication:Leader 保证其他节点的日志与其保持一致
  • 状态安全Safety:Leader 保证状态机执行指令的顺序与内容完全一致

leader选举

  • 所有节点初始状态为Follower状态,此时没有Leader,肯定会与Leader的心跳超时(一般150——300ms,随机的,这样就是想谁先发出竞选,谁当选leader),此时Candidate就会发出leader竞选给其他节点(大家快选我啊,leader挂掉了);其他节点收到竞选请求,会响应同意,当一个Candidate收到大多数(n/2 + 1)节点的回复,就成为leader。然后与Candidate保持心跳连接。Raft有个Term(任期)的概念,只有在发生Leader选举阶段,term+1,表示新的leader产生,挂掉的节点,或者挂掉的leader重启后,会发现自己的term小于最新的,此时就会切换到日志复制,去同步之前丢失的消息。
  • 如果同时有多个Candidate发出竞选,并且都没有获得大多数投票,会一直进行竞选,直到选出leader

日志复制

  • leader收到客户端或者其他节点转发过来需要共识的值,会跟随心跳一起广播给其他节点,进行写入
  • 其他节点写入后响应成功给leader,当leader收到大多数的follower响应的成功,发出commit命令
  • 其他节点收到commit后,进行事务提交,响应成功为leader,leader收到大多数的commit成功,Raft完成

ZAB协议

Zookeeper是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面,Zookeeper并没有使用Paxos,而是采用了ZAB协议。

ZAB协议基本与Raft相同,都是Multi Paxos的衍生。ZAB与Raft在一些名词的叫法上有区别:如ZAB将某一个Leader的周期称为epoch,而Raft则称之为term。在实现上也有些许不同:Raft为了保证日志连续性,心跳方向为Leader至Follower,ZAB则相反。

消息广播模式

ZAB协议的消息广播过程使用的是一个原子广播协议,类似一个2PC二阶段提交过程。

  1. Leader将客户端的request转化成一个Proposal(提议);
  2. Leader为每一个Follower准备了一个FIFO队列,并把Proposal发送到队列上;
  3. Leader若收到follower的半数以上ACK反馈;
  4. Leader向所有的follower发送commit。

崩溃恢复

ZAB 定义了 2 个原则:

  1. ZAB 协议确保那些已经在 Leader 提交的事务最终会被所有服务器提交。

  2. ZAB 协议确保丢弃那些只在 Leader 提出/复制,但没有提交的事务。

所以,ZAB 设计了下面这样一个选举算法:**能够确保提交已经被 Leader 提交的事务,同时丢弃已经被跳过的事务。**针对这个要求,如果让 Leader 选举算法能够保证新选举出来的 Leader 服务器拥有集群中所有机器编号(即 ZXID最大)的事务,那么就能够保证这个新选举出来的 Leader 一定具有所有已经提交的提案。

reference

  1. https://blog.youkuaiyun.com/zancijun1666/article/details/83512038
  2. https://blog.youkuaiyun.com/cloudresearch/article/details/23127985
  3. https://blog.youkuaiyun.com/TJtulong/article/details/106510970
  4. https://blog.youkuaiyun.com/TJtulong/article/details/106510970
Introduce_Totem_Protocol.pdf srp rrp协议讲解 立即下载

相关推荐

向量化和向量数据库的开发步骤,以及本地docker下载Redis-stack-server,以及如何将文本转成向量,以及文本向量化成功后将数据存入到Redis-stack-server这个向量数据库

内存可以作为向量数据库,但是一重启一断电数据就没了这了选择RedisStack作为向量数据,用来向量的存储,未来会改名成Redis8,也就是在原本的Reids的功能上增加了新的特性,本质上还是Redis向量数据库还可以用ElaticSearch、MongoDB等。

qq_61723836的博客 1084

分布式协议

文章目录分布式事务分布式事务协议: 两阶段提交协议(1) 请求阶段(2) 提交阶段为了解决这些问题,出现了3PC,但是很多分布式系统都会采取放弃对分布式事务的支持。分布式一致性一致性协议:Paxos最简单的:只有一个提议者。来个复杂的:存在多个提议者。分布式容错保活协议:心跳包协议,租约协议心跳包协议租约协议(Lease Protocol) 分布式协议主要有: 保活协议:租约协议,心跳包协议 复...

Tattoo的博客 4356

LLM大模型-vLLM本地部署全流程:Windows WSL2环境安装、HuggingFace与Modelscope模型加载与本地运行、Docker化部署与镜像分发

vLLM本地部署大模型方案 vLLM是一款高性能大模型推理引擎,通过PagedAttention技术显著提升吞吐量和内存效率,支持低成本、高并发的本地部署。 核心优势: 性能卓越:吞吐量远超同类方案,支持连续批处理等高级功能 成本优化:减少GPU服务器需求 兼容性强:提供类OpenAI的简洁API 部署步骤: 硬件准备:需NVIDIA GPU(如A100/3090),显存≥模型参数量×2(7B模型需14GB) 软件环境: Linux系统或Windows WSL2 安装CUDA 12.1+和Python 3.

2202_75674969的博客 4570

Totem协议(SRP/RRP)讲解PPT

Chinainvent的专栏 3877

极验滑块验证码破解与研究(一):AST还原混淆JS

极验滑块验证码破解与研究(一):AST还原混淆JS声明一、环境安装1. node安装1.1. node下载1.2. 配置环境变量1.3. node安装检测1.4. pycharm配置node环境2. babel库安装2.1. babel库安装命令2.2. babel库安装检测二、AST还原混淆JS1. 模块导入2. AST还原流程3. 复制还原需要用到的js源码4. AST还原函数详解4.1. replace_unicode4.2. replace_unicode, replace_name_array,

帯泪的鱼的博客 1万+

软件测试工程师笔试题

这里写目录标题全套软件测试面试笔试题(附答案)二、选折三、添空四、简答(资料是搜集整理的,感谢前辈的解题)无1.区别阶段评审的与同行评审2.什么是软件测试3. 简述集成测试的过程4 怎么做好文档测试5 白盒测试有几种方法6 系统测试计划是否需要同行审批,为什么7Alpha 测试与 beta 的区别8 比较负载测试,容量测试和强度测试的区别。性能测试从使用方便的角度来说,9 测试结束的标准是什么?10 描述软件测试活动的生命周期?11 软件的缺陷等级应如何划分? 软件测试工程师笔试题(附答案) 全套软件测试面

m0_46446002的博客 2549

Corosync Totem单环协议详解

当一个处理器得到令牌时,它首先清空输入缓冲区,将消息传递或是保留,直到这些消息能按顺序传递,随后广播重传请求的消息或是新的消息,若是广播了新消息,需要更新令牌seq字段的值,并比较令牌的aru与处理器my_aru的大小,若是my_aru较小,说明处理器没有接收到my_aru-aru间的所有消息,此时它会将aru替换为my_aru,且更新令牌上aru_id为该处理器标识符,还需要更新rtr为自己未收到消息的序列号列表。流量控制机制避免了由于缓冲区溢出导致的消息丢失,并提供了比以前的总排序协议更高的吞吐量。

return_Jessica的博客 1051

Qt OpenGL 3D 点云数据显示

在Qt中使用OpenGL显示3D点云数据是一个常见的需求,特别是在计算机视觉、机器人学和三维重建等领域。下面我将介绍一个基本的实现方案。

深之JohnChen的专栏 1239

分布式一致性协议

Git版本控制工具 一、版本控制[理解] (一)版本控制思想 从个人工作和团队协作两个方面(角度)介绍版本控制思想 n 个人工作 往往为了恢复到某一个版本,我们不停的对我们的文件进行复制修改(备份) n 团队协作 版本从何而来呢? 设定场景: SVN,123 Git,hash码 A提交一次代码,服务器的版本为1 B提交一次代码,服务器的版本为2 … 每提交一次代码,服务器的文件版本+1,这样每次提交的东西都有一个版本号对应,易于管理,所以这种软件就叫做版本控制软件 安装了版本控制软件的服务器叫做,版本控

chuanchengdabing的博客 1635

人工智能面试总结-Python

B站:啥都会一点的研究生 公众号试读:啥都会一点的研究生 目录说说Python程序运行过程?说说Python的作用域?说说Python的数据结构?说说Python中可变与不可变类型?说说进程与线程?说说Python中的多线程?说说Python中的多进程?说说Python互斥锁与死锁?说说Lambda?说说Python的深拷贝与浅拷贝?说说Python多线程是否能用多个CPU,为什么?说说Python垃圾回收机制?说说Python里的生成器?说说迭代器与生成器的区别?说说Python 列表的 del,rem.

啥都生的博客 1万+

yolov5改进之Fasternet主干网络替换

fasternet替换yolov5主干网络

qq_41920323的博客 5145

数据库修仙筑基篇一——常用分布式解决方案

传统的存储也称为集中式存储, 从概念上可以看出来是具有集中性的,也就是整个存储是集中在一个系统中的,但集中式存储并不是一个单独的设备,是集中在一套系统当中的多个设备。集中式存储 最大的特点是有一个统一的入口,所有数据都要经过统一的入口。

growdu的网络博客 1166

光电二极管探测器电流信号处理与指令输出系统

本文提出了一种基于Python的光电二极管电流信号处理系统设计方案。该系统能够实时采集、处理光电二极管输出的电流信号,并根据预设阈值输出控制指令。系统采用模块化架构,包含数据采集、信号处理、阈值检测、指令生成等核心模块。其中数据采集模块提供了模拟器实现和硬件接口框架,支持噪声模拟和脉冲信号生成。系统设计考虑了实时性、可靠性和可扩展性,适用于光强测量、光电检测等多种应用场景。

huanghm88的专栏 1180

数据库修仙筑基篇三——raft重要概念

raft重要概念

growdu的网络博客 904

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数据库修仙筑基篇八——corosync-qdevice使用

corosync-qdevice使用

growdu的网络博客 1009

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

百度实习生,以修仙者的角度聊聊怎么学MySQL,不来看看你的修为如何吗?

目录 因为我个人比较喜欢看修仙类的小说,所以本文的主体部分借用修仙者的修为等级,将学习旅程划分成:练气、筑基、结丹、元婴、化神、飞升六个段位,你可以看下你大概在哪个段位上哦! 本文目录: 我为什么要写这篇文章 都这么卷了,是时候好好学MySQL了! 勾勒脑图 练气期 筑基期 结丹期 元婴期 化神期 飞升 联系我 be friends 我为什么要写这篇文章 首先我做一下自己介绍: 大家好,我是白日梦。 大三上学期末尾我尝试投递简历,当时很幸运拿到了度小满金融的offer,今年也就是2021年的3月份入职

qq_41973677的博客 250

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

最强Java修仙之路【附赠BAT修炼资源】,这些核心技能是你必须要掌握的!!

代码尽头谁为峰,一见秃头道成空。 编程修真路破折,一步一劫渡飞升。 众所周知,编程修真有八大境界: Javase-练气筑基 数据库-结丹 web前端-元婴 Javaweb-化神 Javaweb项目-炼虚 流行框架-合体 分布式•微服务-大乘 架构师-飞升 第一部分:JavaSE-练气筑基 Java SE大致可分为以下几块内容: n 对象导论:如何用面向对象的思路来开发 n 深入JVM:Java运行机制以及JVM原理 n 面向对象的特征:封装、继承、抽象、多态 n 数组和容器:容

shayukaifa的博客 1677

数据库修仙筑基篇六——corosync编程指南

corosync编程指南。

growdu的网络博客 1069

数据库修仙元婴篇一——dcf配置解析机制(元数据)

dcf配置解析机制(元数据)

growdu的网络博客 1069

自建开发工具IDE(七)数据库集群智能升级东方仙盟数据库同化,五行八卦排序+游戏修仙,精准补齐差异还能圆武侠梦—东方仙盟筑基期

东方仙盟数据库同化方案,本质上是数据库管理从“批量粗放”向“精准精细”的升级——它以模板为锚,以差异检测为核心,既解决了差异化数据库统一的痛点,又适配多部署场景与独立客户升级需求,更以“配置不留存”等安全设计消除信息泄露风险。无论是中小企业的小规模数据库整理,还是大型企业的超大规模集群管理,亦或是各行业的个性化数据治理需求,都能通过该方案实现高效、安全的同化管理。对于初学者而言,清晰的操作逻辑与分步指南降低了入门门槛,使其能快速掌握核心技能,为企业数据治理筑牢基础。

cybersnow精通 28 门计算机语言,凭借其超凡的技术能力,成功开发过上万个应用,广泛涉及政府、商业、个人等众多领域,甚至在检察院、环保局、公安局等专业场景中也大放异彩。不仅熟练掌握单片机和物联网开发,在软件架构设计方面更是独树一帜,自创了跨平台软件 2429

Java修道之路,问鼎巅峰,我辈代码修仙法力齐天

代码尽头谁为峰,一见秃头道成空。 编程修真路破折,一步一劫渡飞升。 众所周知,编程修真有八大境界: Javase-练气筑基 数据库-结丹 web前端-元婴 Javaweb-化神 Javaweb项目-炼虚 流行框架-合体 分布式·微服务-大乘 架构师-飞升 第一部分:JavaSE-练气筑基 Java SE大致可分为以下几块内容: n 对象导论:如何用面向对象的思路来开发 n 深入JVM:Java运行机制以及JVM原理 n 面向对象的特征:封装、继承、抽象、多态 n 数组和容器:容

Emmliy的博客 1785

修仙之路还得看自己,我欲成仙,快乐齐天!

众所周知,编程修真有八大境界: 1. Javase-练气筑基 2. 数据库-结丹 3. web前端-元婴 4. Javaweb-化神 5. Javaweb项目-炼虚 6. 流行框架-合体 7. 分布式•微服务-大乘 8. 架构师-飞升 第一部分:JavaSE-练气筑基 Java SE大致可分为以下几块内容: 对象导论:如何用面向对象的思路来开发 深入JVM:Java运行机制以及JVM原理 面向对象的特征:封装、继承、抽象、多态 数组和容器:容器的线程安全问题 I/O和NIO:NIO工作.

p1830095583的博客 502

数据库修仙筑基篇五——c-raft分布式存储方案

c-raft分布式存储方案

growdu的网络博客 537

数据库修仙炼气篇十——repmgr

repmgr repmgr用于管理 PostgreSQL 服务器集群内的复制和故障转移。repmgr 支持并增强了 PostgreSQL 的内置流复制,它提供了一个单一的读/写主服务器和一个或多个只读备用服务器。 repmgr 流复制管理工具对 PostgreSQL 集群节点的管理是基于分布式的管理方式。集群每个节点都具备一个 repmgr.conf 配置文件,用来记录本节点的 ID、节点名称、连接信息、数据库的 PGDATA 目录等配置参数。在完成参数配置后,就可以通过 repmgr 命令实现对集群节点的

growdu的网络博客 2019

从韩立结婴看Java进阶:一个10年老码农的修仙式成长指南

结婴不是终点,而是新境界的起点;就像Java专家之路,从来不是学会Spring Boot就能躺赢,而是突破认知瓶颈后的质变。

weixin_52612796的博客 1045

Java修仙之路

Java开发者职业生涯要看的200+本书作者:老刘链接:https://www.zhihu.com/question/29581524/answer/684872838来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 入门书籍 《明解Java》- 豆瓣评分 8.5 《Java从入门到精通(第4版 附光盘)》- 豆瓣评分 6 《入门很简单丛书:Jav...

weixin_30268921的博客 629
上一篇: 数据库修仙筑基篇一——常用分布式解决方案
下一篇: 数据库修仙筑基篇六——corosync编程指南
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在数据库世界里修仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值