关于持久化:Xline-持久化存储设计与实现

01、引言在 Xline 晚期的原型阶段,咱们采纳了基于内存的存储来实现数据的长久化。这尽管简化了 Xline 原型设计的复杂度,进步了我的项目的开发和迭代速度,但带来的影响也是显著的:因为数据都存储在内存当中,因而一旦当过程 crash 后,节点的数据恢复须要依赖于从其余失常节点上拉取全量数据,这就须要较长的复原工夫。基于此方面的思考,Xline 在最新公布的版本 v0.3.0 中引入了一个 Persistent Storage Layer,来将数据长久化到磁盘当中,同时向下层调用方屏蔽掉无关的底层细节。 02、存储引擎选型目前业界支流的存储引擎根本可分为基于 B+ Tree 的存储引擎和基于 LSM Tree 的存储引擎。他们有着各自的劣势与劣势。 B+ Tree 读写放大剖析B+ Tree 在读取数据时,须要先沿着根节点,逐渐向上层索引,直到最初拜访到最底层的叶子结点,每层拜访对应了一次磁盘 IO。而写入数据时,同样也沿着根节点向下搜寻,找到对应的叶子结点后写入数据。 为了不便剖析,咱们进行相干约定,B+ Tree的block size为B,故每个外部节点蕴含O(B)个子节点,叶子节点蕴含O(B)条数据,假如数据集大小为N,则B+ Tree的高度为 写放大:B+ Tree的每次insert都会在叶子节点写入数据,不管数据理论大小是多少,每次都须要写入大小为 B 的数据块,因而写放大是 O(B)读放大:B+ Tree的一次查问须要从根节点一路查到具体的某个叶子节点,所以须要等于层数大小的I/O,也就是, 即读放大为 LSM Tree 读写放大剖析LSM Tree 在数据写入时,先以文件追加的模式写入一个内存文件 memtable(Level 0),当 memtable 达到固定大小时,将其转换成 immutable memtable,并合并到下一个 level 中。而对于数据的读取,则须要先在 memtable 中进行查找,当查找失败时,则向下逐层查找,直到找到该元素为止。LSM Tree 常采纳 Bloom Filter 来优化读取操作,过滤掉那些不存在于数据库中的元素。假如数据集大小为N,放大因子为k,最小层一个文件大小为B,每层文件的单个文件大小雷同都为B,不过每层文件个数不同。写放大:假如写入一个 record,在本层写满 k 次后会被 compact 到下一层。因而均匀单层写放大应为。一共有层,故写放大为 读放大:最坏的状况下,数据被 compact 到最初一层,须要顺次在每一层进行二分查找,直到在最初一层找到.对于最高层 ,数据大小为 O(N), 须要进行二分查找,须要 次磁盘读操作对于次高层 , 数据大小为 , 须要进行 次磁盘读操作对于 , 数据大小为 ,须要进行 次磁盘读操作……以此类推,最终读放大为 R =  ...

May 29, 2023 · 8 min · jiezi

关于持久化:Xline-v030-一个用于元数据管理的分布式KV存储

Xline是什么?咱们为什么要做Xline?Xline是一个基于Curp协定的,用于治理元数据的分布式KV存储。现有的分布式KV存储大多采纳Raft共识协定,须要两次RTT能力实现一次申请。当部署在单个数据中心时,节点之间的提早较低,因而不会对性能产生大的影响。然而,当跨数据中心部署时,节点之间的提早可能是几十或几百毫秒,此时 Raft 协定将成为性能瓶颈。Curp 协定就是为了解决这个问题而设计的。它能够在命令不抵触的状况下缩小一个RTT,从而进步性能。因而,Xline旨在实现高性能的数据拜访和跨数据中心场景下的强一致性。 V0.3.0版本有什么新性能?本版本次要改变为引入一个长久化层的内容,因为自身改变比拟大,故独自提取一个版本进去,新版本的改良蕴含以下内容: 特点:实现一个长久化存储层,以实现持久性,包含: 实现一个存储引擎层来形象出具体的存储引擎,比方rocksdb,并启用下层存储性能(#185, #187)。启用Curp和Xline的复原机制(#194, #184)。修复bug:修复并发的cmd程序谬误(#197)因为此前的存储都于内存中实现,因而如果过程解体了,数据恢复须要较长时间。基于此方面的考量,Xline当初引入一个长久化层,会将数据存储到磁盘上。同样,基于此前收到的“建设在内存根底上的性能测试是否具备说服力”的质疑,通过认真考量,咱们决定在此基础上做一个benchmark,后果预计会于v0.3.1 中展现。 欢送参加到Xline我的项目中咱们欢送任何对于Xline的踊跃奉献。目前在GitHub上有些工作并不需要深刻理解Curp协定或Xline这个我的项目,只须要理解API和Rust语言即可。即便您现处于入门阶段,并想要在开源我的项目中应用Rust语言,社区也会提供领导和帮忙,来疏导您更好地参加我的项目。Xline的建设须要每一位对此感兴趣且违心付出的你们的参加,咱们期待你们的退出。 相干链接GitHub: https://github.com/datenlord/XlineCurp相干论文: https://www.usenix.org/system/files/nsdi19-park.pdfCurp相干文章: https://medium.com/@datenlord/curp-revisit-the-consensus-prot...Xline官网:www.xline.cloud往期浏览举荐Xline v0.2.0: 一个用于元数据管理的分布式KV存储DatenLord | Xline Geo-distributed KV Storage 对于咱们达坦科技(DatenLord)专一下一代云计算——“天空计算”的基础设施技术,致力于拓宽云计算的边界。达坦科技打造的新一代开源跨云存储平台DatenLord,通过软硬件深度交融的形式买通云云壁垒,实现无限度跨云存储、跨云联通,建设海量异地、异构数据的对立存储拜访机制,为云上利用提供高性能平安存储反对。以满足不同行业客户对海量数据跨云、跨数据中心高性能拜访的需要。公众号:达坦科技DatenLord知乎账号:https://www.zhihu.com/org/da-tan-ke-jiB站:https://space.bilibili.com/2017027518

March 24, 2023 · 1 min · jiezi