zl程序教程

您现在的位置是:首页 >  Java

当前栏目

Polardb 核心存储 polarfs 是怎么进行数据存储的(1)--译

2023-02-18 16:23:53 时间

POLARDB 数据库中有一个核心是他重新设计的存储系统,polarfs,polarfs 是怎么设计的架构是怎样的,下面根据官方的一篇详细的英文文档作为翻译的目标 https://www.vldb.org/pvldb/vol11/p1849-cao.pdf

PolarFS 是专门为polardb 设计的分布式文件系统,他具有低延迟,高可用的特点并且这款存储系统运行在阿里云的基础上。PolarFS 本身利用了轻量级的网络站和IO栈并充分的利用了 RMDA, NVME 和 SPDK等技术。

在基于这样的技术情况下在我们的测试下,POLARRFS 的延迟已经减少到与本地SSD 磁盘系统延迟相当的状态。基于保持复制的一致性的问题,我们开发了parallelraft 一致性协议,他基于RAFT协议但打破了raft协议的限制中的串行性,在乱序的基础上,还能保证数据的一致性。Parallelraft继承了raft协议的简单,同时提供了更高的IO能力,最终成就了polarfs 为polardb提供最优的存储支持。

1 介绍

最近一段时间存储和计算分离已经成为云计算的工业的主流,这样的设计让架构更加灵活并且可以充分的利用共享存储

1 计算和存储节点能够使用不同的类型的服务器硬件帮助,可以单独进行定制,如计算节点不在考虑内存和磁盘的容量,这让严重依赖应用环境的不可预期的部分脱离了计算节点。

2 在集群中的存储节点的磁盘来自一个存储池,他可以介绍磁盘碎片的缺陷平衡磁盘的利用率避免磁盘空间的浪费。(此部分基于商业风险不进行翻译,跳过到安全部分),为了保证数据的可靠性,数据库必须自己管理数据复制,存储使用通用文件系统,如ext4或XFS磁盘文件格式,在使用RDMA或PCIe SSD等低I/O延迟硬件时,内核空间和用户空间之间的消息传递成本可能会降低I/O吞吐量,问题更大的是存储不能支持所有类型的数据库集群架构,但这是高级云服务的必需品。

所以在这篇文字中,我们要描述和设计我们要讨论的对象polarfs,一个分布式文件系统,如我们之前所提到的,低延迟高吞吐量和高可用中采用的数据存储机制。

首先polardb使用目前最高级的硬件系统,如RDMA ,NVMe,通过使用轻量级的网络栈和IO栈,来规避数据在内核处理中产生的内核锁,同时PolarFS提供了一个类似posix的文件系统API,他被编译到数据库的进程中,替换操作系统与数据库之间的文件系统接口,数据库会直接调用。在设计中POLARFS也避免了数据调用中的上下文切换,降低了不必要的内存拷贝,利用大量的DMA在主存和RDMA NIC/NVMe磁盘之间传输数据,通过这些特性PolarFS端到端的传输延迟大幅度的降低,最终达到接近本地SSD 的性能。

部署在云生产环境的分布式文件系统通常有数千台主机,在这样的规模下,由硬件或软件错误引起的故障是常见的,因此需要一个通用的协议来保证所有提交的修改不能被丢失,副本和主数据一定要一致。

协议PAXOS可以满足以上的需求,raft协议是PAXOS的分支,很多分布式系统都是依照RAFT来进行开发的,而将此应用到POLARFS上,我们发现当使用延迟非常低的硬件,RAFT就严重的阻碍了POLARFS的I/O可伸缩性,因此我们开发了ParallelRaft协议,这是一种基于Raft增强共识的协议,允许乱序写入但保证最终的顺序性。

在POLARFS 上我们构建了一个以ALISQL 为基础的关系型数据库POLARDB,通过共享存储架构和多个只读实例,从上图看,POLARDB节点主要分为两类,写节点和只读节点,主和从节点共享一个数据存储结构。

PolarFS 支持以下的功能支持POLARDB 以下的功能

1 PolarFS 能够同步修改数据元信息,从主节点到从节点(包含所有的从节点)同时PolarFS 保证了文件元数据的修改是并发的同时是序列化,所有的节点的数据均死一致的,在节点切换或网络分区的情况下,产生的多个主节点中只能有一个节点写入数据成功。

(介绍文章每个章节的要点,略过)

2 背景介绍

这个章节简单的描述了 NAMe, SSD , RDMA 和他们相关的程序模块

NAVe SSD , SSD 是从传统的协议中演进而来的如SAS , SATA 到 NVMe, NVMe SSD 具有高带宽低延迟的交互性能。NVMe SSD 最大可以达到500K在100纳秒的延迟下进行数据传输,最近型的 3D Xpoint ssd 已经达到了10纳秒以下,对比NANE SSD提供超高的 Qos。

随着SSD 可以越来越快,内核的IO栈成本了新的瓶颈,正如之前研究的要传输4KB的数据就需要传输20000条指令。最近INTER 提出的提高存储性能的SPDK ,这组工具和连接库可以作为NVMe工作的基础,通过将所有的驱动程序放置在用户控件中并使用轮训的模式,而不是依赖中断来保证超高的性能,这避免了内核的上下文切换导致的中断处理的开销。

RDMA。RDMA技术提供了数据中心内部服务器之间的低时延网络通信机制。例如,在连接到同一交换机的两个节点之间传输一个4KB数据包需要大约7µs,比传统的TCP/IP网络栈要快得多。之前的大量研究[9,14,15,17,24,25,30]表明RDMA可以提高系统性能。应用程序通过Verbs API访问队列对(QP)与RDMA NIC进行交互。QP由发送队列和接收队列组成,并且每个QP与另一个完成队列(CQ)相关联。

Send/Recv动词通常被称为双边操作,因为每个Send操作都需要一个由远程进程调用的匹配Recv操作,而Read/Write动词被称为单边操作,因为远程内存由NIC操作,而不涉及任何远程CPU。PolarFS使用Send/Recv和Read/Write动词的混合。小的有效负载直接通过Send/Recv动词传输。对于大数据块或批量数据,节点使用Send/Recv谓词协商远程节点上的目标内存地址,然后通过Read/Write谓词完成实际的数据传输。通过轮询用户空间中的CQ而不是依赖中断,PolarFS消除了上下文切换。

待... 下一部分将开始介绍POLARFS 的构造