Raft共识算法
Posted boonya
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Raft共识算法相关的知识,希望对你有一定的参考价值。
目录
什么是Raft?
Raft是一种共识算法,旨在使其易于理解。在容错性和性能上与Paxos等效。不同之处在于它被分解为相对独立的子问题,并且干净地解决了实际系统所需的所有主要部分。我们希望Raft能够使更多的受众获得共识,并且这个更广泛的受众将能够开发出比当今更高质量的基于共识的系统。
等等-什么是共识?
共识是容错分布式系统中的一个基本问题。共识涉及多个服务器就价值达成一致。一旦他们对价值做出决定,该决定即为最终决定。当大多数服务器可用时,典型的共识算法会取得进展。例如,即使2台服务器发生故障,包含5台服务器的群集也可以继续运行。如果更多服务器发生故障,它们将停止取得进展(但绝不会返回错误的结果)。
共识通常出现在复制状态机的背景下,复制状态机是构建容错系统的通用方法。每个服务器都有一个状态机和一个日志。状态机是我们要使其容错的组件,例如哈希表。对于客户端来说,即使群集中的少数服务器出现故障,它们也会与单个可靠的状态机进行交互。每个状态机都从其日志中获取输入命令。在我们的哈希表示例中,日志将包含诸如set x到3之类的命令。使用共识算法来同意服务器日志中的命令。共识算法必须确保如果有任何状态机应用,则将x设置为3作为第n个命令,没有其他状态机将应用不同的第n条命令。结果,每个状态机处理相同系列的命令,并因此产生相同系列的结果并到达相同系列的状态。
Raft可视化
这是浏览器中运行的Raft集群。您可以与之互动以查看“筏”的实际使用情况。左侧显示五台服务器,右侧显示其日志。我们希望很快创建一个截屏视频,以解释发生了什么。这种可视化(RaftScope)的边缘仍然很粗糙;拉请求将非常受欢迎。
(原文动图)
数据的秘密生活 是Raft的另一种可视化形式。它具有更多的指导性和较少的交互性,因此它可能是一个比较温和的起点。
刊物
这是“筏纸”,详细描述了筏: 寻找迭戈·奥加罗 (Diego Ongaro)和约翰·奥斯特豪特( John Ousterhout )撰写的《可理解的共识算法》(扩展版)。本文的简短版本在2014年USENIX年度技术会议上获得了最佳论文奖 。
Diego Ongaro的 博士学位 论文 对本文的内容进行了更详细的扩展,并包括了一种更简单的集群成员资格变更算法。
更多与筏相关的论文:
-
道格·伍斯(Doug Woos),詹姆斯·R·威尔考克斯(James R.Wilcox),史蒂夫·安东(Steve Anton),扎卡里·塔特洛克(Zachary Tatlock),迈克尔·D·恩斯特(Michael D.Ernst)和托马斯·安德森(Thomas Anderson)。
筏共识协议正式验证中的变更规划。
认证程序和证明(CPP),2016年1月。 -
詹姆斯·R·威尔科克斯(James R. Wilcox),道格·伍斯(Doug Woos),帕维尔·潘切卡(Pavel Panchekha),扎卡里·塔特洛克(Zachary Tatlock),王希,迈克尔·恩斯特(Michael D.Ernst)和托马斯·安德森(Thomas Anderson)。
Verdi:实现和验证分布式系统的框架。
编程语言设计与实现(PLDI),2015年6月。 -
雨果·埃弗拉德(Hugues Evrard)和弗雷德里克·朗(FrédéricLang)。
异步并发流程形式化模型的自动分布式代码生成。
并行,分布式和基于网络的处理(PDP),2015年3月。 -
Heidi Howard,Malte Schwarzkopf,Anil Madhavapeddy和Jon Crowcroft。
木筏改写:我们有共识吗?。
SIGOPS操作系统评论,2015年1月。 -
海蒂·霍华德(Heidi Howard)。
ARC:筏共识分析。
剑桥大学计算机实验室,UCAM-CL-TR-857,2014年7月。
会谈
这些演讲是对Raft的很好的介绍:
- 讲座上筏在 CS @伊利诺伊州杰出讲座系列 由约翰·斯特豪特八月2016
视频 YouTube 滑梯 具有RaftScope可视化功能的PDF - 浅谈筏及其TLA +规范的一部分 TLA +系列博士 通过金立,2016年7月:
视频 YouTube 滑梯 幻灯片分享 - 2015年11月 ,迭戈·昂加罗(Diego Ongaro) 在Build Stuff 2015上的木筏讲座 :
视频 InfoQ 滑梯 具有RaftScope可视化功能的HTML PDF - 上锈,筏会谈,分布式系统在 锈湾区聚会 由 伊冯科迪, 迭戈Ongaro酒店, 安德鲁霍布登, 丹布尔克特和 亚历克斯·纽曼,2015年8月:
视频 空气Mozilla 滑梯 迭戈: 具有RaftScope可视化功能的PDF - 迭戈·昂加罗 (Diego Ongaro) 在2015年CoreOS Fest 2015上的筏谈: 2015年5月:
视频 YouTube 滑梯 具有RaftScope可视化功能的PDF - 2015年4月 ,迭戈·昂加罗(Diego Ongaro) 在Sourcegraph聚会上的筏谈 :
视频 YouTube 滑梯 具有RaftScope可视化功能的PDF - 2014年9月 ,迭戈·昂加罗(Diego Ongaro)在LinkedIn上进行的筏讨论:
视频 YouTube 滑梯 具有RaftScope可视化功能的PDF PPTX - 浅谈筏在 USI 2014 和 的/ dev / 2014年夏季 由阿尔诺贝利,2014年7月:
视频 YouTube(法语) 滑梯 讲台(英语) - 在2014年6月的迭戈·昂加罗 (Diego Ongaro)举行的2014 USENIX年度技术会议上的木筏演讲:
视频 USENIX 滑梯 RaftScope可视化 - 2014年4月的迭戈·昂加罗 (Diego Ongaro) 在2014年CraftConf上的木筏上谈:
视频 上游 滑梯 PDF PPTX - 2013年Rubyconf 上的Raft演讲 ,作者:Patrick Van Stee,2013年11月:
视频 YouTube 滑梯 扬声器甲板 - 2013年10月 ,迭戈·昂加罗(Diego Ongaro) 在RICON West 2013的木筏上谈论:
视频 YouTube 滑梯 PDF PPTX - 2013年9月 ,本·约翰逊(Ben Johnson) 在2013年的“怪圈”上谈论木筏:
视频 InfoQ 滑梯 扬声器甲板 - 汤姆·桑特罗 (Tom Santero)和 安德鲁·斯通(Andrew Stone)在2013年8月 在Erlang纽约市聚会 上谈论木筏和R木:
视频 Vimeo 滑梯 扬声器甲板 - 2013年7月 ,帕特里克·范·斯蒂(Patrick Van Stee)的筏谈(地点不明):
滑梯 扬声器甲板 - 讲座为筏用户研究 由约翰·斯特豪特,2013年3月:
视频(截屏) YouTube MP4 滑梯 PDF PPTX
Raft课程
这是一门课程列表,其中包括有关Raft的讲座或编程任务。这对于其他教师和寻找资料的在线学习者可能很有用。如果您知道其他课程,请提交 请求请求 或问题以对其进行更新。
- 香港中文大学, CSCI4160:分布式和并行计算(私有), Eric Lo。包括有关Paxos和Raft以及Java / Go中Raft编程任务的讲座(2019年秋季,2021年春季,...)
- 德里印度技术学院, COL 819:分布式系统, Smruti R. Sarangi。包括有关木筏的讲座(视频)(PPTX)(2020年冬季,...)
- 卡内基梅隆大学, CS 440:分布式系统, Yuvraj Agarwal, Dave Andersen。在Go中包括Raft编程任务。(2019年秋季,...)
- 东北大学, CS 3700:网络和分布式系统, 克里斯托·威尔逊(Christo Wilson), 龙路。包括一项基于Raft协议构建复制的键值存储的任务。(2018年秋季,...)
- Rose-Hulman理工学院, CS 403:编程语言范例, Buffalo Hewner。在Erlang中包括Raft编程分配(分配)。(2017年冬季,...)
- 普林斯顿大学, COS-418:分布式系统, Mike Freedman和 Kyle Jamieson。包括有关Raft (PPTX)和 编程任务的讲座, 以建立基于Raft的键值存储。(2016年秋季,...)
- 华盛顿大学, 分布式系统:CSE 452, 汤姆·安德森。包括有关Raft的讲座,尽管他们称之为Paxos。(2016年冬季,...)
- 科罗拉多大学博尔德分校, CSCI 5673:分布式系统, Shivakant Mishra。包括分配以下载Raft实现并以此构建容错数据结构的任务。(2015年秋天,...)
- 犹他大学, CS 6963:分布式系统, Ryan Stutsman (@rstutsman)。将包含有关筏(TBD)的内容。(2015年秋天,...)
- 圣何塞州立大学, CMPE 275企业应用程序开发,约翰·加什( John Gash)。包括使用Raft制作分布式文件系统的项目。(2015年春季,...)
- 布朗, CS 138:分布式计算机系统, Tom Doeppner, Rodrigo Fonseca (@rodrigo_fonseca)。在Go中包括Raft编程任务。(2015年春季,...)
- 麻省理工学院(MIT) 6.824:分布式系统,罗伯特·莫里斯( Robert Morris)。包括有关木筏的讲座(讲义)。请参阅Jon Gjengset针对教师和 学生的帖子 。(2015年春季,...)
- 旧金山大学, CS 636:研究生操作系统, 格雷格·本森 (@gregorydbenson)。包括有关木筏的讲座。(2015年春季,...)
- 哈佛, CS 261:在操作系统的研究课题, 马戈·塞尔策。包括有关木筏的讲座(讲义)。(2014年秋天, ...)
- 休斯顿大学, COSC 6360:操作系统, Jehan-FrançoisPâris (@jehanfrancois)。包括有关木筏的讲座(PPT)。(2014年秋天, ...)
- 斯坦福大学, CS 244B:分布式系统, 道森恩格勒, 戴维·马齐尔斯 (@dmazieres)。包括由迭戈·昂加罗(Diego Ongaro)撰写的关于木筏的客座演讲。一些学生选择从事基于Raft的 最终项目。(2014年秋天)
- NUST-SEECS,CS 332:分布式计算,Tahir Azim(@TahirAzim)。包括基于用户学习资料的筏子讲座(tweet)。(2014年秋天, ...)
- Duke, CPS 512:分布式系统, Bruce Maggs。包括由Landon Cox (@lpcox)进行的筏(PPTX)客座演讲。(2014年春季,2015年春季,...)
- IIT孟买, CS 733:云计算, Sriram Srinivasan。在Go中包含Raft编程分配(分配)。(2014年春季,2015年春季,...)
我在哪里可以问问题?
提出有关Raft及其实现的问题的最佳地点是 raft-dev Google小组。一些实现也有自己的邮件列表。检查他们的自述文件。
我在哪里可以买到筏子?
在不同的开发阶段都有许多Raft的实现。下表列出了我们知道的可用源代码实现。最流行和/或最近更新的实现都在顶部。这些信息将不可避免地过时。请提交 请求请求 或问题以对其进行更新。
星星 | 名称 | 主要作者 | 语 | 执照 | 领导者选举+日志复制? | 坚持不懈? | 会员变更? | 日志压缩? |
---|---|---|---|---|---|---|---|---|
35,981★ | etcd /筏 | 布雷克Mizerany,李翔,翼城琴 | 去 | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
9,347★ | 泰克病毒 | 周杰伦,纳戈特,西顿当,天才毛 | 锈 | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
3,633★ | 龙舟 | 倪妮 | 去 | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
24,695★ | 重新思考数据库 | C ++ | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 | |
2,321★ | SOFAJ筏 | 柏彦,李家春 | 爪哇 | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
2,660★ | ft | 章毅陈,姚望 | C ++ | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
4,363★ | 榛树漂流 | 穆罕默德·道根(Mehmet Dogan),恩萨尔·巴斯里·卡维奇(Ensar Basri Kahveci) | 爪哇 | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
1,403★ | 酷度 | 戴维·阿尔维斯(David Alves),托德·利普孔(Todd Lipcon),迈克·珀西(Mike Percy) | C ++ | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
4,734★ | hashicorp /筏 | 阿蒙·达加(Armon Dadgar) | 去 | MPL-2.0 | 是的 | 是的 | 是的 | 是的 |
505★ | 规范/漂流 | 免费的Ekanayaka | C | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
492★ | 镭 | RabbitMQ团队 | 埃尔朗 | (Apache-2.0或MPL-1.1) | 是的 | 是的 | 是的 | 是的 |
836★ | 木筏 | 胡文伟 | 爪哇 | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
587★ | 异步筏 | 安东尼·多德 | 锈 | Apache-2.0或MIT | 是的 | 是的 | 是的 | 是的 |
464★ | 牛筏 | 安贞相 | C ++ | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
1,483★ | 木屋 | 迭戈·昂加罗(Diego Ongaro) | C ++ | 国际学习中心 | 是的 | 是的 | 是的 | 是的 |
2,247★ | 漂流 | 本·约翰逊(Ben Johnson),项力(CoreOS) | 去 | 麻省理工学院 | 是的 | 是的 | 不 | 是的 |
287★ | RedisRaft | Redis实验室 | C | (AGPL-3.0或RSAL) | 是的 | 是的 | 是的 | 是的 |
266★ | Permazen / RaftKV数据库 | 阿奇·科布斯(Archie Cobbs) | 爪哇 | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
553★ | 山寨 | 乔丹·霍尔特曼(Jordan Halterman) | 爪哇 | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
352★ | OpenDaylight | Moiz Raja,Kamal Rameshan,Robert Varga,Tom Pantelis | 爪哇 | EPL-1.0 | 是的 | 是的 | 不 | 是的 |
840★ | 威廉姆特 | 威廉·亨德里克·蒂亚特(Willem-Hendrik Thiart) | C | BSD | 是的 | 是的 | 是的 | 是的 |
285★ | kanaka / raft.js | 乔尔·马丁(Joel Martin) | Java脚本 | MPL-2.0 | 是的 | 是的 | 不 | |
497★ | bakwc / PySyncObj | 菲利普·奥兹诺夫(Filipp Ozinov) | Python | 麻省理工学院 | 是的 | 是的 | 是的 | 是的 |
289★ | 拉夫托斯 | 亚历山大·哲布拉克(Alexander Zhebrak) | Python | 麻省理工学院 | 是的 | 不 | 不 | |
222★ | simpleRaft | 肖恩·里德(Sean Reed) | Python | 麻省理工学院 | 不 | 不 | 不 | |
423★ | .NEXT木筏 | 罗曼·萨克诺(Roman Sakno) | C# | 麻省理工学院 | 是的 | 是的 | 是的 | 是的 |
266★ | 漂流筏 | 康拉德·马劳斯基(Konrad Malawski) | 斯卡拉 | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
446★ | 朱诺 | 布莱恩·施罗德(Brian Schroeder),利比·肯特(Libby Kent),斯图尔特·波普约(Stuart Popejoy),威尔·马蒂诺(Will Martino) | 哈斯克尔 | BSD | 不 | 不 | 不 | |
212★ | 凯特 | 巴勃罗·麦地那(Pablo Medina) | 斯卡拉 | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
116★ | Xraft | XnnYygn | 爪哇 | 麻省理工学院 | 是的 | 是的 | 是的 | 是的 |
122★ | 扎特 | 西蒙·阿卡西纳(Simon Accascina) | Python | AGPL-3.0 | 是的 | 是的 | 是的 | 是的 |
200★ | jgroups-raft | 贝拉·班(Bela Ban) | 爪哇 | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
179★ | 基石 | 陈安迪 | C ++ | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
185★ | 救生筏 | 阿诺特·卡兹米尔(Arnout Kazemier) | Java脚本 | 麻省理工学院 | 不 | 不 | 不 | |
100★ | 漂流 | 海蒂·霍华德(Heidi Howard) | OCaml | 麻省理工学院 | 是的 | 不 | 不 | |
164★ | 杰弗特 | 陈安迪 | 爪哇 | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
125★ | 奇虎360 /筏 | 陈宗志,安安昭,康旺 | C ++ | GPL-3.0 | 是的 | 不 | 不 | |
155★ | 彼得堡 | 彼得·布尔贡 | 去 | BSD-2-条款 | 是的 | 是的 | 不 | |
254★ | 漂流/漂流 | 安德鲁·霍布登(Andrew Hobden),丹·伯克特(Dan Burkert) | 锈 | 麻省理工学院 | 是的 | 不 | 不 | |
29★ | 黄昏 | 尼古拉·曼齐尼,彭镝嗯 | Python | 麻省理工学院 | 是的 | 是的 | 不 | |
259★ | 椽 | 安德鲁·斯通(Andrew Stone) | 埃尔朗 | 阿帕奇2.0 | 不 | 不 | 不 | |
121★ | 小船 | 佩德罗·特谢拉(Pedro Teixeira) | Java脚本 | 国际学习中心 | 是的 | 是的 | 是的 | 是的 |
19★ | 轻筏 | 路易吉·塔伦加(Luigi Tarenga) | 壳 | 麻省理工学院 | 是的 | 是的 | 是的 | 是的 |
148★ | 普通筏 | 詹姆斯·威尔科克斯(James Wilcox),道格·伍斯(Doug Woos),帕维尔·潘切卡(Pavel Panchekha),扎克·塔特洛克(Zach Tatlock),西王,迈克·恩斯特(Mike Ernst),汤姆·安德森(Tom Anderson) | 辅酶Q | BSD | 是的 | 不 | 不 | |
163★ | zraft_lib | 古宁·亚历山大(Gunin Alexander) | 埃尔朗 | 阿帕奇2.0 | 是的 | 是的 | 是的 | 是的 |
28★ | 绒布 | 亨里克·费尔德(Henrik Feldt) | F# | 麻省理工学院 | 不 | 不 | 不 | |
87★ | py-raft | 托比·布雷斯 | Python | 无执照 | 不 | 不 | 是的 | 不 |
41★ | akiradeveloper | 早川晃 | 锈 | 麻省理工学院 | 是的 | 是的 | 是的 | 是的 |
48★ | srned / Prez | 苏雷什库马尔·内敦切詹 | C | BSD | 是的 | 不 | 不 | |
28★ | 极光 | Fabric中的RAFT共识算法 |