19 | 基于Raft的分布式KV系统开发实战(一):如何设计架构?
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
基于Raft算法的分布式KV系统设计实战 本文深入探讨了基于Raft算法的分布式KV系统的设计实战,从架构和代码实现的角度出发,详细介绍了构建一个基于Raft算法的分布式KV系统的过程。作者首先强调了掌握Raft算法的实现只是工具,而掌握使用Raft算法开发分布式系统的实战能力才是关键。文章重点讲解了分布式KV系统的核心功能,包括接入协议、KV操作和分布式集群。在接入协议方面,作者强调了设计HTTP RESTful API以及实现路由的重要性;在KV操作方面,详细介绍了赋值、查询和删除操作的设计,并强调了操作需要具有幂等性;最后,作者提到了实现分布式集群的重要性。整体而言,本文通过具体的案例和代码示例,深入浅出地介绍了基于Raft算法的分布式KV系统的设计实战,对于想要深入了解分布式系统开发的读者具有很高的参考价值。 文章还提到了实现分布式集群的方法,包括创建集群和实现写操作。在创建集群方面,作者介绍了Raft算法中创建集群的步骤;在实现写操作方面,作者提出了两种方法,分析了它们的优缺点,并推荐了一种方法。此外,文章还涉及了读操作的实现,强调了根据实际场景特点进行权衡折中,设计出最适合该场景特点的读操作。 最后,文章还提到了冷热分离理念在设计海量数据存储系统时的重要性,以及对于数据层组件性能和成本的重视。作者还提出了一个课堂思考问题,鼓励读者思考节点故障时如何替换一个节点的问题。 总的来说,本文内容丰富,涵盖了分布式系统开发的多个方面,对于想要深入了解分布式系统开发的读者具有很高的参考价值。
《分布式协议与算法实战》,新⼈⾸单¥59
全部留言(10)
- 最新
- 精选
- zzlconsul的读一致性default模式,是从leader节点读的,为啥不一定是最新数据呢?zookeeper的leader节点,读取的数据一定是最新的吗?
作者回复: 加一颗星:),问题1,此时访问的领导者可能不是真正的领导者,比如3节点集群(A、B、C),A是领导者,发生了网络分区,B、C选举出了新领导者C,当我们继续加一颗星:),访问节点A时,A可能仍处于稳定状态(在 leader leasing 时间内),认为自己领导者(其实它已经不是了),这时它返回数据给客户端,这份数据可能不是最新的。问题2:这个说法不严谨,必须确认主节点仍是领导者,但因为zab不支持该功能,所以,这个做法落地性差,已修正。
2020-04-15315 - 骨汤鸡蛋面按照老师的表述以及对源码的理解,是否可以认为 应用层组件与 raft 库的分工 1. 应用层负责 设计协议接入层以及FSM 的实现(接入和底层存储) 2. raft 负责接入层和持久化之间(raft 也有log存储的部分)
作者回复: 加一颗星:),可以这么理解,更准确的说,Raft实现的是算法逻辑,领导者选举、日志复制、成员变更等。
2020-05-222 - lingjiango节点故障后是不是可以先容忍一部分,在容忍的过程中是不是部分节点又恢复正常了?
作者回复: 加一颗星:)。问题1:可以容忍少数节点故障,也就是说,当少数节点故障时,系统能稳定运行。问题2:节点故障,需要我们做监控来发现,然后修复的。另外,其实你可以通过20讲的raftdb程序,来测试下Raft的节点故障容错能力,感性体验下。
2020-04-072 - hello老师,请教您一个问题呀,数据的冷热分离,比如基于时间的日志数据可以比较好区分,如果没有明显时间跨度的数据有什么好办法实现冷热分离吗?或者都有哪些冷热分离的策略可供参考?多谢!
作者回复: 加一颗星:),冷热的本质区别是访问速度,根据实际场景妥协权衡,比如,可以考虑数据类型,对访问效率要求高的业务数据,全部是热数据,要求不高的,冷数据;另外实现时间局部性,访问到的冷数据,在热数据中停留些时间,再老化,下沉为冷数据。
2020-03-272 - 阿卡牛目前市面上有哪些成熟开源的分布式KV框架可直接用
作者回复: 比如redis、memcached、etcd、zookeeper等。
2020-03-2732 - 华子请问老师以后会不会介绍multiple raft group相关内容?
作者回复: 加一颗星:),我后面做个补充吧。
2020-04-171 - 钟友兵韩老师,有点不太明白使用boostrap启动,称为领导者。一般分布式系统,系统安装配置指定master 。这里的话麻烦解释一下
作者回复: 加一颗星:),创建集群时,才需要以bootstrap的形式启动,第一个节点是领导者,这是Hashicorp Raft实现的一个功能,方便添加节点创建集群。正常启动,是不需要bootstrap的,领导者由选举产生。具体可以参考下raftdb的Store.Open()的实现。使用Raft,是不需要指定领导者(也就是master的)。
2020-05-10 - pedro问老师一个问题,如果POST请求新增一个kv键值对,第一个请求新增成功后,应该会给出成功的响应,但若是重复POST请求,第二次应该会失败,这样怎么保证幂等性呢?
作者回复: 加一颗星:),SET操作(比如SET X = 1)具有冥等性的,执行多次,和执行一次,效果是一样的,即使有多个日志项,后面也会去重压缩处理的,不会有影响的。
2020-03-273 - roseduan我使用 Go 语言实现了一个单机版的kv数据库:https://github.com/roseduan/rosedb,后续改造为分布式的,多谢老师的指点。也希望大家一起来学习!2021-05-19311
- Heaven可以在多次发出同步日志的时候,都获得超时的恢复,考虑进行节点的替换,在RemoveServer函数中,可以通过传入失效这个节点的集群的ID来进行删除2020-08-25