分布式协议与算法实战
韩健
腾讯资深工程师
立即订阅
5785 人已学习
课程目录
已完结 28 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 想成为分布式高手?那就先把协议和算法烂熟于心吧
免费
理论篇 (4讲)
01 | 拜占庭将军问题:有叛徒的情况下,如何才能达成共识?
02 | CAP理论:分布式系统的PH试纸,用它来测酸碱度
03 | ACID理论:CAP的酸,追求一致性
04 | BASE理论:CAP的碱,追求可用性
协议和算法篇 (16讲)
05 | Paxos算法(一):如何在多个节点间确定某变量的值?
06 | Paxos算法(二):Multi-Paxos不是一个算法,而是统称
07 | Raft算法(一):如何选举领导者?
08 | Raft算法(二):如何复制日志?
09 | Raft算法(三):如何解决成员变更的问题?
10 | 一致哈希算法:如何分群,突破集群的“领导者”限制?
11 | Gossip协议:流言蜚语,原来也可以实现一致性
12 | Quorum NWR算法:想要灵活地自定义一致性,没问题!
13 | PBFT算法:有人作恶,如何达成共识?
加餐 | PBFT算法:如何替换作恶的领导者?
14 | PoW算法:有办法黑比特币吗?
15 | ZAB协议:如何实现操作的顺序性?
加餐 | ZAB协议(一):主节点崩溃了,怎么办?
加餐 | ZAB协议(二):如何从故障中恢复?
加餐 | ZAB协议(三):如何处理读写请求?
加餐 | MySQL XA是如何实现分布式事务的?
实战篇 (6讲)
16 | InfluxDB企业版一致性实现剖析:他山之石,可以攻玉
17 | Hashicorp Raft(一):如何跨过理论和代码之间的鸿沟?
18 | Hashicorp Raft(二):如何以“集群节点”为中心使用API?
加餐 | 拜占庭将军问题:如何基于签名消息实现作战计划的一致性?
19 | 基于Raft的分布式KV系统开发实战(一):如何设计架构?
20 | 基于Raft的分布式KV系统开发实战(二):如何实现代码?
结束语 (1讲)
结束语 | 静下心来,享受技术的乐趣
分布式协议与算法实战
15
15
1.0x
00:00/00:00
登录|注册

19 | 基于Raft的分布式KV系统开发实战(一):如何设计架构?

韩健 2020-03-27
你好,我是韩健。
学完前面 2 讲之后,相信你已经大致了解了 Raft 算法的代码实现(Hashcorp Raft),也掌握了常用 API 接口的用法,对 Raft 算法的理解也更深刻了。那么,是不是掌握这些,就能得心应手的处理实际场景的问题了呢?
在我看来,掌握的还不够,因为 Raft 算法的实现只是工具。而掌握了工具的用法,和能使用工具得心应手地处理实际场景的问题,是两回事。也就是说,我们还需要掌握使用 Raft 算法开发分布式系统的实战能力,然后才能游刃有余的处理实际场景的问题。
我从这个角度出发,在接下来的 2 节课中,我会分别从架构和代码实现的角度,以一个基本的分布式 KV 系统为例,具体说一说,如何基于 Raft 算法构建一个分布式 KV 系统。那么我希望你能课下多动手,自己写一遍,不给自己留下盲区。如果条件允许的话,你还可以按需开发实现需要的功能,并将这套系统作为自己的“配置中心”“名字路由”维护下去,不断在实战中加深自己对技术的理解。
可能有同学会问:“老韩,为什么不以 Etcd 为例呢?它不是已经在生产环境中落地了吗?”
我是这么考虑的,这个基本的分布式 KV 系统的代码比较少,相对纯粹聚焦在技术本身,涉及的 KV 业务层面的逻辑少,适合入门学习(比如你可以从零开始,动手编程实现),是一个很好的学习案例。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《分布式协议与算法实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(8)

  • zzl
    consul的读一致性default模式,是从leader节点读的,为啥不一定是最新数据呢?zookeeper的leader节点,读取的数据一定是最新的吗?

    作者回复: 加一颗星:),问题1,此时访问的领导者可能不是真正的领导者,比如3节点集群(A、B、C),A是领导者,发生了网络分区,B、C选举出了新领导者C,当我们继续加一颗星:),访问节点A时,A可能仍处于稳定状态(在 leader leasing 时间内),认为自己领导者(其实它已经不是了),这时它返回数据给客户端,这份数据可能不是最新的。问题2:这个说法不严谨,必须确认主节点仍是领导者,但因为zab不支持该功能,所以,这个做法落地性差,已修正。

    2020-04-15
    1
    4
  • lingjiango
    节点故障后是不是可以先容忍一部分,在容忍的过程中是不是部分节点又恢复正常了?

    作者回复: 加一颗星:)。问题1:可以容忍少数节点故障,也就是说,当少数节点故障时,系统能稳定运行。问题2:节点故障,需要我们做监控来发现,然后修复的。另外,其实你可以通过20讲的raftdb程序,来测试下Raft的节点故障容错能力,感性体验下。

    2020-04-07
    1
  • 骨汤鸡蛋面
    按照老师的表述以及对源码的理解,是否可以认为 应用层组件与 raft 库的分工
    1. 应用层负责 设计协议接入层以及FSM 的实现(接入和底层存储)
    2. raft 负责接入层和持久化之间(raft 也有log存储的部分)
    2020-05-22
  • 钟友兵
    韩老师,有点不太明白使用boostrap启动,称为领导者。一般分布式系统,系统安装配置指定master 。这里的话麻烦解释一下

    作者回复: 加一颗星:),创建集群时,才需要以bootstrap的形式启动,第一个节点是领导者,这是Hashicorp Raft实现的一个功能,方便添加节点创建集群。正常启动,是不需要bootstrap的,领导者由选举产生。具体可以参考下raftdb的Store.Open()的实现。使用Raft,是不需要指定领导者(也就是master的)。

    2020-05-10
  • 华子
    请问老师以后会不会介绍multiple raft group相关内容?

    作者回复: 加一颗星:),我后面做个补充吧。

    2020-04-17
  • hello
    老师,请教您一个问题呀,数据的冷热分离,比如基于时间的日志数据可以比较好区分,如果没有明显时间跨度的数据有什么好办法实现冷热分离吗?或者都有哪些冷热分离的策略可供参考?多谢!

    作者回复: 加一颗星:),冷热的本质区别是访问速度,根据实际场景妥协权衡,比如,可以考虑数据类型,对访问效率要求高的业务数据,全部是热数据,要求不高的,冷数据;另外实现时间局部性,访问到的冷数据,在热数据中停留些时间,再老化,下沉为冷数据。

    2020-03-27
  • pedro
    问老师一个问题,如果POST请求新增一个kv键值对,第一个请求新增成功后,应该会给出成功的响应,但若是重复POST请求,第二次应该会失败,这样怎么保证幂等性呢?

    作者回复: 加一颗星:),SET操作(比如SET X = 1)具有冥等性的,执行多次,和执行一次,效果是一样的,即使有多个日志项,后面也会去重压缩处理的,不会有影响的。

    2020-03-27
    2
  • 阿卡牛
    目前市面上有哪些成熟开源的分布式KV框架可直接用

    作者回复: 比如redis、memcached、etcd、zookeeper等。

    2020-03-27
    1
收起评论
8
返回
顶部