百万个冷知识百万个冷知识

百万个冷知识
一起学习百万个冷知识

Facebook强一致性键值存储ZippyDB架构简介(facebook发文)

作者 | Eran Stiller

翻译者 | 张卫滨

策画 | 丁晓昀

Facebook 工程项目组最近发布了一则网志文章,阐释了如何构筑其通用的数组储存的,也就是 ZippyDB。ZippyDB 是 Facebook 最大的数组储存,已经投入生产环境超过了六年的时间。它为插件在方方面面提供更多了稳定性,主要包括可调整的无毒性、连续性、易用性和低延后保证等方面。ZippyDB 的采用情景主要包括sysfs的元统算数据、用作内部和内部目的的事件算数,和用作各种应用特性的产品统算数据。

Facebook 的应用软件技师 Sarang Masti 对建立 ZippyDB 的意图展开了剖析:

ZippyDB 采用 RocksDB 作为下层的储存发意图。在 ZippyDB 之前,Facebook 的各个项目组都直接采用 RocksDB 来管理工作他们的统算数据。这导致每一项目组在化解类似的考验时造成了工作的重复,比如连续性、纠错、机械故障恢复、复本和耗电量管理工作等。为了化解这些不同项目组的需求,我们建立了 ZippyDB,以提供更多两个高度长久化和连续性的数组统算数据储存,通过将所有的统算数据转移到 ZippyDB 上并化解管理工作此种统算数据相关的考验,大大提升了产品设计的速度。

两个 ZippyDB 布署(叫做“tier”)由分布到全世界范围数个地区(region)的计算和储存资源组成。每一布署都以多租客的形式代销数个示例。ZippyDB 会将属于某一示例的统算数据划分为新溪洲(shard)。依照实用性,它会跨数个地区为每一新溪洲建立复本,进而同时实现可扩展性,这个过程可以采用 Paxos 或触发器复本来同时实现。

图片来源:https://engineering.fb.com/2021/08/06/core-data/zippydb/

每一新溪洲复本的开集都是某一 quorum 组的一部分,在这里统算数据会被并行拷贝,进而能在出现机械故障的这时候提供更多高无毒性和易用性。如果以 follower 的形式实用性了其他复本的话,将会采用触发器拷贝的形式。Follower 能让插件拥有数个地区内的复本以全力支持宽松连续性的低延后加载,同时能保持较细的 quorum 大小以同时实现更低的载入延后。此种新溪洲内复本配角实用性的稳定操控性让插件依照自身的需要平衡无毒性、载入的操控性和加载的操控性。

ZippyDB 为插件提供更多了可实用性的连续性和无毒性级别,它们可以在加载和载入 API 中以ZWG的形式展开指定。对载入来说,ZippyDB 预设会将统算数据长久Nozeroy大多数复本的 Paxos 的笔记中并将统算数据载入到主 RocksDB 上。如此一来,对主结点的加载能始终看到最新的载入。除此以外,它还全力支持两个更低延后的快速证实(fast-acknowledge)商业模式,在此种商业模式下,在主结点上排队等候展开复本操作的这时候,载入就会展开证实。

对加载来说,ZippyDB 全力支持最终一致、加载自己的载入(read-your-write,该商业模式指的是系统能保证一旦某一条目被更新,同两个客户端发起的任意加载请求都会返回更新后的统算数据,参见该文章的阐释——翻译者注)和强读商业模式。“对‘加载自己的载入’商业模式,客户端会缓存服务器在展开载入时得到的最新序列号,并且会在随后的加载查询中采用该版本号”。ZippyDB 在同时实现强加载的这时候,会将加载操作路由到主结点上,进而避免与 quorum 展开对话。“在某些极端的情况下,主结点尚未得到更新的消息,这这时候对主结点的强读就变成了对 quorum 的检查和加载。”

图片来源:https://engineering.fb.com/2021/08/06/core-data/zippydb/

ZippyDB 全力支持事务和条件性的载入,进而能适用作要对一组键展开原子加载 - 修改 - 载入操作的采用情景。Masti 介绍了 ZippyDB 的同时实现:

所有事务在新溪洲上预设是序列化的,我们不全力支持更低的隔离级别。这简化了服务器端的同时实现,并且便于在客户端推断出并行执行事务的正确性。事务采用乐观并发控制来探测和化解冲突,作用原理如上图所示。

ZippyDB 中的新溪洲,通常被称为物理新溪洲或 p 新溪洲,是服务器侧的统算数据管理工作单位。插件将其核心空间(key space)划分为μshard(微新溪洲)。每一 p-shard 通常代销着几万个μshard。依照 Masti 的说法,“这个额外的抽象层允许 ZippyDB 在客户端不做任何改变的情况下透明地重新新溪洲(reshard)统算数据”。

ZippyDB 利用 Akkio 同时实现 p-shard 和μshard 之间的映射,进而得到了进一步优化。Akkio 将μshard 放置在信息通常被访问的地理地区。通过此种形式,Akkio 有助于减少统算数据集的重复,这样就为低延后访问提供更多两个比在每一地区放置统算数据更有效的化解方案。

原文链接:

https://www.infoq.com/news/2021/09/facebook-zippydb/

未经允许不得转载:百万个冷知识 » Facebook强一致性键值存储ZippyDB架构简介(facebook发文)
分享到: 更多 (0)

百万个冷知识 带给你想要内容

联系我们