鹏云块存储在多副本情况下,如何兼顾数据一致性和效率? 原创

鹏云网络
发布于 2023-8-28 17:14
浏览
0收藏

::: hljs-center

01 技术背景

:::

分布式系统中一个重要的问题就是数据复制(data replication),数据复制一般是为了增强系统的可用性或提高性能。在保持多副本的情况下,有一个副本不可用,系统切换到其他副本就会恢复。

而实现数据复制的一个主要难题就是保持各个副本的一致性,一个副本的数据更新之后,其他副本必须要保持同步,否则数据不一致就可能导致业务出现问题。在数据有多副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就造成各个副本之间的数据不一致,数据内容冲突。

因此,数据复制在提高系统可用性的同时,也带来了多副本数据一致性的问题。

::: hljs-center

02 数据一致性的两种类型

:::

一致性模型主要可以分为两大类:强一致性模型与弱一致性模型。

1、强一致性

强一致性是能够保证所有进程对数据的读写顺序都保持一致的一致性模型,即复制是同步的。写操作完成之后,读操作一定能读到最新数据,用户体验好。对系统的一个数据更新成功之后,如果所有用户都能够读取到最新的值,该系统就被认为具有强一致性。但实现起来往往对系统的性能影响大,且在分布式场景中强一致性较难实现。

2、弱一致性

系统在写入成功后,不承诺立即可以读到写入的最新数据,也不承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态。弱一致性,复制是异步的。

::: hljs-center

鹏云网络凭借自主研发的分布式架构

以及核心技术专利

可实现数据的强一致性

:::

::: hljs-center

03 鹏云块存储如何兼顾效率和数据一致性?

:::

鹏云网络产品 ZettaStor DBS 分布式块存储系统,支持 2 副本、3 副本、3 副本高可用数据冗余模式,实现数据的多副本保护。那么,在多副本情况下,ZettaStor DBS 是如何兼顾数据一致性和效率的呢?

1、分布式数据副本技术

数据卷(Volume)是 ZettaStor DBS 系统提供存储资源服务的基本单元,基于分布式数据副本技术在系统中各个存储节点和硬盘上分布存储,以保证数据可靠性和可用性。

ZettaStor DBS 将硬盘划分成指定大小的 Segment Unit(系统执行存储空间分配的基本单元),并以 Segment Unit 为单位进行存储空间分配。

每个 Segment Unit 就是所属 Segment(逻辑单元)的一个数据副本,有几个副本就有几个 Segment Unit。多个 Segment Unit 互为副本,构成一个 Segment,再由一组 Segment 构成一个数据卷,供客户端访问。

鹏云块存储在多副本情况下,如何兼顾数据一致性和效率?-鸿蒙开发者社区

::: hljs-center

图 1:三副本数据卷(Volume)的构成

:::

每个 Segment 拥有自己的 membership,利用 membership 维护自己内部的主从关系和数据一致性,Segment 之间互不影响,并发操作。

这些副本之间数据保持一致,而且一定来自不同的存储节点服务器,在此情况下,任何一个硬盘故障或网络亚健康存储节点服务器故障,受到影响的只是某一个数据副本,数据的可靠性和可用性就得到了保障。

ZettaStor DBS 系统针对数据卷来设置数据副本个数,以三副本为例,一个 Segment 由三个 Segment Unit 构成,其中一个作为主副本(Primary),另外两个作为从副本(Secondary)。

主副本是构成 Segment 的数个 Segment Unit 之一。执行数据写入操作时必须保证主副本写入成功,执行数据读取操作时由主副本进行响应。

从副本是构成 Segment 的其他非主副本 Segment Unit。在主副本失效后,各个从副本会从中自主选举出新的主副本,并接管工作。

每个 Segment unit 会落在不同存储节点的不同盘上,这样一方面增加了安全性,节点级故障最多只会导致一个副本的不可用,其他副本可以正常使用;另一方面提升了效率,多个磁盘并发读写互不干扰。

我们可将三个 Segment unit 分别命名为 Segment unitA,Segment unitB,Segment unitC。Segment unitA、Segment unitB、Segment unitC 利用我们优化改进的分布式一致算法,在任意时刻都保证三个 Segment unit 有且只有一个 Primary,其他两个 Segment unit 则作为 Secondary,这样就得到了一个“一主两从”的 membership。

当用户的数据写入这个 Segment 时,我们只要求 Primary 一定要写成功,多数副本要写成功但是不要求全部副本成功。由于多数副本写成功,所以在发生少数节点 down 机、多数节点可用的情况下,我们仍然保证多数副本写成功,从而保证了一致性,不要求全部副本写成功则保证了少部分节点异常(突发性的网络延迟、硬盘速度变慢等情况)下的写效率。

当异常节点恢复后,Segment unit 通过 Copy 机制将丢失的数据从写成功的 Segment unit 中增量拷贝过来。

鹏云块存储在多副本情况下,如何兼顾数据一致性和效率?-鸿蒙开发者社区

::: hljs-center

图 2:Volume 空间在系统内的分布

:::

2、全流程数据校验机制

ZettaStor DBS 提供 IO 处理全流程的数据校验机制,来确保用户数据被正确地存取访问,保障数据可靠性和一致性。

当用户数据进入 ZettaStor DBS 系统之初,系统就为该数据生成一个校验码,此后数据在系统中的每一次传递过程中都会进行数据校验,只有正确无误的数据才会被接受,直至最终写入底层存储介质,以充分保障数据可靠性和一致性。同理,当用户在读取数据时,也只有校验无误的数据才会反馈给客户端。

3、完善的网络亚健康和磁盘亚健康检查模式

ZettaStor DBS 系统拥有完善的网络亚健康和磁盘亚健康检查模式,当发现有节点出现故障时,会永久将此节点剔除(用户确认修复后可以收到加回),排除节点异常情况的影响从而提高效率。

当节点重新加入 Segment 后, 利用 log 分析出差异性数据,充分保证数据一致,之后再做增量拷贝(QuickOPC),提高效率。

::: hljs-center

04 总结

:::

鹏云网络 ZettaStor DBS 分布式块存储系统采用全对称分布式架构技术与原生块存储技术,通过鹏云自身优化改进的分布式一致算法,在实现数据多副本保护的同时,能够确保数据的一致性和可靠性,并兼顾数据一致性与效率,为企业核心应用上云提供高效、可靠、智能的数据存储服务。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
    相关推荐