上海启嘟渡科技商贸有限公司
SEARCH

与我们合作

我们专注提供互联网一站式服务,助力企业品牌宣传多平台多途径导流量。
主营业务:网站建设、移动端微信小程序开发、营销推广、基础网络、品牌形象策划等

您也可通过下列途径与我们取得联系:

微 信: wxyunyingzhe

手 机: 15624122141

邮 箱:

Paxos和Raft的前世今生

更新时间:2025-01-01 09:51:05

在确保数据安全的同时,保持服务持续可用性是核心业务对底层数据存储系统的基本需求。面对“最大可用性”与“最大保护性”模式的选择,传统1主N备方案面临着数据丢失与服务中断的两难困境。传统方式下,为了数据完整性而牺牲了可用性,反之亦然。

算法创新带来了解决方案。Paxos算法,由Leslie Lamport于1990年提出,是一种基于消息传递的一致性算法,最初因其复杂性而未被广泛关注。经过多次发表与阐述后,特别是在2001年以更易读的形式介绍后,Paxos逐渐受到重视。2006年,Paxos在Google的Chubby锁服务中被采用,极大地推动了其普及。Paxos的核心优势在于只需超过半数的副本在线,且网络通信正常,就能保障数据不丢失及服务的持续可用性。

Paxos算法分为两个阶段:Prepare和Accept。在Prepare阶段,节点提出提案,随后在Accept阶段,提案获得多数派确认,达成一致意见。相较于传统主备方式,Paxos能有效解决数据一致性问题,确保服务的可用性和数据的完整性。

为解决一批提案的决策问题,Mulit-Paxos作为Paxos的优化版本应运而生。Mulit-Paxos通过选举出唯一领导者,在领导者有效期内,所有的提案都由领导者发起,简化了流程,显著提升了效率。这种优化方式进一步证明了在分布式系统中,领导者角色的重要性。

多款产品,如X-DB、OceanBase、Spanner等,均采用Mulit-Paxos来保障数据一致性。MySQL Group Replication的xcom模块也采用了Mulit-Paxos来实现日志同步与恢复。此外,PaxosStore是腾讯WXG基于Paxos实现的分布式一致性中间件,广泛应用于微信的多个业务场景。

针对生产环境的Paxos实现,开源社区提供了多种选择,如PaxosStore(C++)、PhxPaxos(C++)和LibPaxos(C)等,满足不同业务需求。

Raft算法是斯坦福大学的Diego Ongaro和John Ousterhout于2013年提出的一种易理解、易实现的一致性算法。与Paxos相比,Raft同样只需超过半数节点正常即可提供服务,且在复杂性控制方面有显著优势。Raft通过分解算法为三个子问题,进一步简化了理解、论证和实现过程,使其成为分布式系统中一致性算法的优选。

在大数据环境下,许多NewSQL数据库采用多个Raft集群(即Mulit-Raft)来提高性能和负载均衡。PolarDB中的Parallel-Raft实现了对乱序日志复制的支持,显著提升了性能。在多个Raft集群间增加协同,如共享通信链接、合并消息等,可以进一步减少资源开销,提升性能。

主流实现语言包括Go(etcd/raft)、Rust(TiKV/raft)和C++(kudu/raft、LogCabin)。etcd/raft是应用广泛且成熟度高的Go语言实现,但集成到C/C++应用中可能较为困难。TiKV/raft采用了Rust语言,虽然语言相对小众,但提供了强大的并发支持。Apache Kudu的raft模块和LogCabin项目也属于Raft算法的开源实现。

综上所述,Paxos与Raft作为分布式一致性算法的代表,分别在复杂性和易用性上寻求平衡,提供了在分布式系统中确保数据一致性与服务可用性的解决方案。通过不同的实现和优化,它们在实际应用场景中发挥了重要作用,推动了分布式系统的持续发展。

多重随机标签

猜你喜欢文章

QQ客服 电话咨询