丝析发解丨zStorage 为什么选择Raft协议?

zStorage

一、引言

zStorage 是云和恩墨自研的一款高性能全闪分布式块存储,其在设计选择上有很大的自由度。如何确保数据一致性和达成可用性指标,是 zStorage 架构设计的主要挑战之一。本文描述 zStorage 为什么选择Raft,以及如何使用Raft。

zStorage

二、为什么选择Raft?

2.1 如何保证数据可靠性

为了保证数据的可靠性,一般采取多副本模式(比如3副本)存储数据。在多副本模式下,如何保证副本间数据一致是分布式系统要解决的问题之一。

同时对分布块存储系统还有以下要求:

      • 写请求返回成功,后续读请求必须返回新值。

      • 写请求未返回成功,后续读请求可以返回旧值或旧值。只要返回了某值(新或旧),以后读请求都稳定返回该值。

2.2 如何实现多副本模式

8fd8cf609c930749d79f67f4ba7d2318.png

51466613e4c51f495b443b35cbc72280.png

在分布式3副本集群中,当需要在逻辑块地址(LBA)为3的位置写入数据9时,关于何时向主机返回写操作成功,存在不同的策略。下面以同步写入不同副本数为例进行比较。

同步写入1个副本,剩余2个副本异步写入:

6be2973dddf4b4cae1ec7a1ca88f2f75.png

    • 如果集群掉电重启,在只有1份新数据时,无法判断后续读请求返回5还是9;

    • 如果副本A故障,写入的数据9就丢失了,没达到多副本冗余的效果。

同步写2个副本,剩余1个副本异步写入:

39c53bb38503c998a53979bf42e39bd8.png

    • 由于要同步写入2个副本才返回,写时延由第2个写入成功的副本决定;

    • 如果集群掉电重启,有2份最新数据,通过判断大多数副本都是9能返回正确数据,但读性能太差;

    • 在副本A和副本C两个副本故障时,才会丢数据。

同步写3个副本:

8d6fbdf1ff9e6a7c102a11bd6fed1e9f.png

    • 由于要同步写入3个副本才返回,写时延由最慢的副本决定;

    • 读请求只需要读1个副本就可以返回成功,读性能好;

    • 还存在其他问题,比如:在写入2个副本时掉电,恢复后面临与写2副本一样的问题。

并发写问题:

6d606d71922cce41a30fecc59a4cb329.png

    • 同时有两个写请求,会出现副本间写入顺序不一致的情况;

    • 如果通过串行控制写入顺序,不能利用磁盘的并发写入性能。

2.3 如何解决多副本一致性问题

在分布式存储系统中,复制状态机模型是一种常用的用于保证副本间同步问题的方法。复制状态机表现为一组分别部署于不同节点上的状态机副本,这些副本按照完全相同的指令序列执行操作,从而确保各个副本状态保持一致。

f30b8bce1c6f592f09109f33d97accd4.png

通过先写日志,保证副本间日志序列一致,再把日志按序应用到状态机。以此方法,不同副本的状态机数据就能保持一致。

646fff649c7e3cca91f29b8a2880d7e5.png

通过给日志编号定序,可以避免并发写乱序问题;同时,日志还可以解决写操作的原子性问题。

2.4 选择Raft的理由

同步写日志的副本数量是一个关键决策。典型的做法是将日志同步写入所有副本,如开源分布式存储系统Ceph便采取了此种策略。另一方面,诸如Paxos和Raft这类共识算法,则选择了基于“大多数”原则来决定日志的写入副本数。

下面以3副本为例,比较两种策略的差异:

3ec9f49666051937aed03b0003c584a7.png

平均时延:写2副本与中间副本时延对齐,而写3副本时延与最慢副本对齐。

P99时延:写2副本与中间副本时延对齐,能避免单个副本磁盘异常时延的影响,而写3副本却不能。

Hang IO时长:在故障1个副本时,写2副本能继续工作。但写3副本要控制面探测到故障并调整集群配置后才能继续工作,Hang IO时长可能达到10秒、20秒等。

Paxos以其理论基础为分布式一致性提供了一个框架,其在实际理解和实现上相对复杂。Raft更注重易理解和工程实现,通过明确的领导者选举机制与日志管理,简化了分布式一致性问题的解决过程。

下面以Paxos的两个变体Basic-Paxos和Multi-Paxos以及Raft的差异:

bcdd9ba77b767f4ad1001a2985a47ef9.png

鉴于对数据一致性、可靠性、可用性以及工程实现等因素的综合考虑,zStorage 选择采用Raft协议作为其在多副本间实现数据同步的核心机制。

zStorage

三、如何使用Raft?

a9ca1193467ab9cea20ba77990137f78.png

在 zStorage 中,Raft协议主要用在数据面的ChunkServer中,通过Raft协议保证数据副本间的一致性。为了分散负载以及让系统可以水平扩展,我们采用了多个Raft组,每个Raft组负责部分数据的同步。

0d6de7de3f873fb8117db9571341dfaa.png

有4个Raft组,每个Raft组有3个副本,所有副本分布在3个不同的ChunkServer上。每个Raft组有1个Leader副本(蓝色),两个Follower副本。

zStorage

四、总结

在 zStorage 系统中,通过应用Raft协议保证数据一致性和可用性。针对可能出现的硬件故障或软件异常,系统能做到最长Hang IO时长不超过10秒。在特定故障场景下,例如OSD故障、ChunkServer崩溃等场景,Hang IO时长不超过1秒。

关于 zStorage

zStorage 是云和恩墨针对数据库应用开发的高性能全闪分布式块存储。三节点 zStorage 集群可以达到200万IOPS随机读写性能,同时平均时延<300μs、P99时延小于800μs。

zStorage 支持多存储池、精简配置、快照/一致性组快照、链接克隆/完整克隆、NVMeoF/NVMeoTCP、iSCSI、CLI和API管理、快照差异位图(DCL)、慢盘检测、亚健康管理、16KB原子写、2副本、强一致3副本、Raft 3副本、IB和RoCE、TCP/IP、后台巡检、基于Merkle树的一致性校验、全流程TRIM、QoS、SCSI PR、SCSI CAW。

zStorage 是一个存储平台,可作为数据库产品和存储产品的底座,欢迎发邮件至 marketing@enmotech.com 咨询。

关于作者

吴红伟,云和恩墨 zStorage 产品的Raft子系统架构师,领导Raft开发组,负责2副本、3副本、Erasure Code、故障恢复、后台巡检等存储业务模块的设计、开发和维护。

c6a6833e005597a79620c251594f7bef.gif

数据驱动,成就未来,云和恩墨,不负所托!


云和恩墨创立于2011年,是业界领先的“智能的数据技术提供商”。公司总部位于北京,在国内外35个地区设有本地办公室并开展业务。

云和恩墨以“数据驱动,成就未来”为使命,致力于将创新的数据技术产品和解决方案带给全球的企业和组织,帮助客户构建安全、高效、敏捷且经济的数据环境,持续增强客户在数据洞察和决策上的竞争优势,实现数据驱动的业务创新和升级发展。

自成立以来,云和恩墨专注于数据技术领域,根据不断变化的市场需求,创新研发了系列软件产品,涵盖数据库、数据库存储、数据库云管和数据智能分析等领域。这些产品已经在集团型、大中型、高成长型客户以及行业云场景中得到广泛应用,证明了我们的技术和商业竞争力,展现了公司在数据技术端到端解决方案方面的优势。

在云化、数字化和智能化的时代背景下,云和恩墨始终以正和多赢为目标,感恩每一位客户和合作伙伴的信任与支持,“利他先行”,坚持投入于数据技术核心能力,为构建数据驱动的智能未来而不懈努力。

我们期待与您携手,共同探索数据力量,迎接智能未来。

5dfcafafa4b65834e23e7c5093bb76f5.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值