前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Raft 中日志的一致性检查貌似会导致日志复制的串行化,这个在实际工程实践中有什么优化方案?

Raft 中日志的一致性检查貌似会导致日志复制的串行化,这个在实际工程实践中有什么优化方案?

作者头像
并发笔记
发布2022-11-29 15:03:11
3690
发布2022-11-29 15:03:11
举报
文章被收录于专栏:并发笔记并发笔记

这个问题也太好了,涉及到Paxos和Raft的原理以及优化。

先肯定题主的理解,是正确的。

  • Raft的一致性检查,是Follower接受某个日志项的条件,也确实是控制Raft串行协商的关键之处。
  • Paxos是争取某个key的写入权限(prepare阶段),也确实支持并发写。

既然这里是为了证明Paxos的并行协商不一定优于Raft的串行协商,所以这里不讨论采用串行协商带来的坏处,和并行协商的好处,另外这些也不难总结。

Raft的串行协商好处

但是以上两点并不代表Paxos的并行协商效率优于Raft串行协商效率。Raft的串行协商,带来了很多好处,例如:

  • 将协商优化为“一阶段”提交,“提交阶段”通过心跳或者下一次来完整。
    • 这一目的,必须要串行协商才能实现,因为“提交阶段”通过心跳来完成,必须要保证日志的连续性,而连续性必须是串行协商;
    • 另外保证连续性,还需要引入Leader,需要一个权威的成员来统一处理写请求,才能保证日志的连续性。
  • 检查差异性,检查两个成员之间的一段日志是否一致,不必通过checksum等机制来完成,只需要比较最大的日志项的term是否一致即可。
  • 读请求优化,保证线性一致性读,通常需要read log来完成。但是Raft是串行协商的,并且引入了Leader,可以有很多优化方案,例如:Leader Read,Follower Read,Lease Read。

这里不讨论采用串行协商带来的坏处,但是可以简单提一提:引入Leader,降低了可用性;Leader成为性能瓶颈;浪费大量的计算资源(单个协商,一定是吃不满所有的资源的)....

Paxos的并行协商坏处

并行协商确实给Paxos带来很多好处,例如,灵活性,优于Raft的可用性。但是单从协商效率来说,Paxos真不一定比得过Raft,有以下几个原因:

  • 活锁,是指多个Proposer同时争夺某个key的写权限,陷入循环之中。
  • 协商阶段较多,Paxos协商就需要两个阶段(prepare+accept),另外需要一个提交阶段(confirm),当然可以优化prepare阶段。但是优化prepare阶段的条件,依旧是执行prepare阶段。
  • 数据对齐,新成员上线或者要明确两个成员之间数据是否一致,需要对所有的key都执行一次paxos协商。
  • 读请求,暂时只知道通过read log来实现。Leader Read,Follower Read,Lease Read是否能应用于Paxos,暂时还没有思考,可能能应用的条件也是需要引入一个中央权威成员吧。

Raft的串行协商是否能够优化?

题主其实无需苦恼串行协商,Raft本身就是一个优化后的算法,协商效率很高了,如果担心资源浪费,可以部署多个Raft组,让他们服务不同业务,使得达到并行协商的目的。

另外如果执着于并行协商,当然也有一些优化方案,例如:Parallel Raft。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 并发笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档