TiDB的raft协议和OB的paxos协议到底有什么区别?

最近在学习国产分布式数据库,通过OB的文档描述,在进行paxos多副本管理时是通过选举、日志复制,以及安全功能实现的。选举,即多个副本,只有一个为leader,其他都是follower,leader通过lease租约进行维护,优先选择用户指定的副本和primary zone副本,只有leader副本能够进行读写服务。leader通过paxos对其他follower进行日志复制。
这样的描述感觉和tidb的raft协议基本结构是一样的了,所以这两个分布式数据库中分布式一致性协议除了命名不同以外,结构、流程和功能…到底有什么实质性区别呢?

简单来说就是两种分布式协议。

Paxos协议是一种分布式一致性协议,由Leslie Lamport于1990年提出。它被广泛应用于分布式系统中,用于解决在异步网络环境下的一致性问题。

Raft是一种相对简化的分布式一致性算法,它由Diego Ongaro和John Ousterhout于2013年提出。与Paxos相比,Raft的设计目标是使一致性问题更易于理解、实现和部署。

以下是摘自CSDN的内容:

Paxos算法和Raft算法都是分布式一致性算法,用于解决分布式系统中的数据一致性问题。它们的主要区别在于以下几个方面:

1.算法复杂度:Paxos算法相对来说比较复杂,需要理解多个阶段的消息交互过程,而Raft算法则相对简单,只需要理解Leader选举和日志复制两个基本概念。

2.Leader选举:在Paxos算法中,Leader的选举是通过多轮消息交互来完成的,而在Raft算法中,Leader的选举是通过心跳机制和超时机制来完成的。

3.日志复制:在Paxos算法中,每个节点都可以提议一个值,但只有一个值会被选中,而在Raft算法中,Leader节点负责接收客户端请求并将其转化为日志条目,然后将日志条目复制到其他节点。

4.可读性:由于Raft算法的设计目标是易于理解和实现,因此它的代码和文档更容易理解和阅读。

总的来说,Paxos算法相对来说更为复杂,但是在某些场景下可能更加高效,而Raft算法则更加易于理解和实现,适用于大多数分布式系统场景。

1 个赞
  1. 算法复杂度:Raft 比 Paxos 更容易理解和实现。Raft 的算法设计更加模块化和简单,更容易将算法的各个部分拆分成独立的子问题来解决。相比之下,Paxos 算法则更加复杂和抽象,需要更深入的理解才能正确地实现。
  2. 节点选举:Raft 在节点选举方面更加灵活和高效。Raft 通过使用随机超时时间来避免竞争,同时还支持动态集群配置和快速切换等功能。而 Paxos 则依赖于强一致性的节点选举算法,比较复杂,而且在网络分区等情况下会出现问题。
  3. 数据复制:Raft 采用日志复制方式来实现数据的一致性,而 Paxos 采用消息复制方式。这使得 Raft 的实现更加高效和可靠,因为它可以使用快照技术来减少数据复制的时间和带宽消耗。
  4. 一致性模型:Raft 和 Paxos 的一致性模型略有不同。Raft 实现了一致性的强一致性模型,即所有节点在任何时间点都能访问到最新的数据。而 Paxos 则实现了一致性的最终一致性模型,即某些节点可能会看到旧数据,但最终它们都会达成一致。
2 个赞

PingCAP 官博有一些 raft 的简单源码解读,https://cn.pingcap.com/blog/?search=raft
paxos 的话可以去 阿里 公众号 之类的找

以下 from ChatGPT 3.5

Raft和Paxos都是分布式系统中用于确保一组节点能够就单个值或一系列值达成一致意见的共识算法。以下是它们之间的一些主要区别:

  1. 可读性和易理解性:Raft被设计得比Paxos更易于理解。Raft论文专门设计成比Paxos论文更易于阅读和实现。
  2. 基于领导者与无领导者:Raft使用基于领导者的方法,其中一个节点被选举为领导者,并处理所有客户端请求,而Paxos是无领导者的,并允许任何节点提议值。
  3. 成员变更:Raft明确支持成员变更,允许节点在不需要单独的共识算法的情况下加入和离开集群。Paxos不具备内置支持成员变更的功能。
  4. 日志管理:在Raft中,每个节点维护一个已达成一致意见的命令日志。领导者将日志条目发送给跟随者,跟随者复制这些条目。而Paxos协议的重点是就单个值或一系列值达成一致,而不是维护一个日志。
  5. 复杂性:虽然Raft被设计成更易于理解和实现,但Paxos在某些场景下被认为更高效。然而,Paxos也更复杂,这可能会使其更难以正确实现。

总的来说,对于那些注重实现和维护的简单性的系统,Raft通常更受青睐。而对于那些需要最大效率并且算法复杂性不是主要考虑因素的场景,可能会更偏向于使用Paxos。

paxos和raft算法是有很多不同的,但是我关注到OB的文档中,也说了他们的leader是通过lease进行管理,并具有优先级等,看起来和raft的leader选举似乎没什么区别了。而且OB中也是只有leader能进行读写操作,所以也不会出现多节点“同时提议一个值”;所以这两个产品之间在一致性协议上的根本区别是什么呢?

我觉得底层原理都是一样的,只是实现上不一样。具体可以参考这里

学习了

学习一下

学习一下,感觉用处不大

底层东西大体了解一下就行,没必要深究。

1 个赞

学习一下

你这是要开发数据库吗?

1 个赞

学习一下

简单说就是Paxos在某些情况下性能会高于raft,但raft更容易实现工程化,社区活跃,有更多开源贡献者。

1 个赞

ob创始于2010.raft协议2013. 如果raft早几年出现,阿里是不是也会选择它。

感觉很有道理,出的晚也不完全是坏事情。

:yum:哦?你别说……你还真别说……这还真有可能

这个标题。。。

也可以整理下国产数据库里分别用 raft/paxos 协议的有哪些产品

如果简单使用,确实如此,但是如果向往一名资深DBA,理论知识必须要掌握的,不然在分析性能问题时将缺少有效支撑…

1 个赞