系统日报-20220507(Meta 链式复制的对象存储——Delta)

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 系统日报-20220507(Meta 链式复制的对象存储——Delta)

《系统日报》持续关注分布式系统、AI System,数据库、存储、大数据等相关领域文章。每天以摘要的形式精选不超过三篇系统文章分享给大家。

如果你有好文章推荐,或者有其他任何想法,欢迎在 Articles Weekly Repo[1]提 issue。

image.png来源https://engineering.fb.com/2022/05/04/data-infrastructure/delta/

导读:偶然看到群里同学分享的 Meta 技术博客[2]新公开的高可用、强一致、链式复制的对象存储。由于我也做过一段时间的对象存储,也分享过 Facebook 家的小文件存储:Haystack[3](做 batch) 和 F4[4](冷热分开、EC), 顿时来了兴致,好奇这次 Meta 又带来了什么干货。

看完之后觉得的确有点意思,下面简单梳理下文章要点,感兴趣的同学可以去看看博客原文,还有华人小姐姐解说的相关视频哦。

Delta 是什么?

Delta 是简单、可靠、可扩展、低依赖的对象存储,只提供四个基本操作:put、get、delete 和 list。在架构设计上,Delta 牺牲了读写延迟存储效率,来换取架构的简单性可靠性

Delta 不是:

  1. 通用存储系统。Delta 只追求弹性、可靠和最小依赖。
  2. 文件系统。Delta 只是简单的对象存储,不提供 POSIX 语义。
  3. 为存储效率而优化的系统。Delta 并没有针对存储效率、延迟和吞吐做优化,而是专注简单和弹性。

总结来说,定位是一个基座式存储服务,就是性能可以不高,但要简单、弹性、可靠。其定位坐标如下图:

image.png

                              Delta 产品定位的坐标

Delta 的架构有何特点?

  1. 链式复制

对于一个逻辑上的 Bucket(对象存储的命名空间)中的数据,首先使用一致性哈希进行分片(Partition),对于每个分片,使用链式复制(Chain Replication)进行冗余。通常每个分片有四个副本,每个副本放在不同的容错阈。

image.png

                               四个节点的副本链的读写

读写流程:所有的写入都在链表头,依照链表顺序复制后,等到链表尾复制完成后返回成功(同步复制);所有的读取都被路由到链表尾,以保证强一致

可以看出,由于是同步写,Delta 的写入延迟比较高;由于是只读尾节点,读吞吐也不高。

当然,Delta 对读取稍稍做了个优化——分摊查询,即允许客户端读任何一个副本,但该副本必须要和尾节点通信确定数据可靠版本(clean version)后才能返回数据给客户端,以保证一致性。

image.png

                                多节点均摊读

其依据是,相比客户端查询,内部版本确认查询要轻量的多。

  1. 投票剔除和挂尾加回

Delta 通过心跳和投票来剔除故障节点:即当同时有一定数量的节点标记某一个节点心跳超时后,就将该节点上所有副本从复制链中剔除。其中有两个阈值需要慎重选择:

  • 心跳超时。过短的话,受网络抖动影响太大,过长的话又会加重相关链的写入延迟。
  • 可疑票数。设置为 1 显然不行,因为很可能有两个节点间网络不好会互相投票;过多也不行,会导致故障节点在链中停留过长时间。Delta 一般设置为 2,并且配合自动化的机器故障修复。

在故障节点修复之后,可以通过一系列操作加回副本链:

  1. 将其上副本重新追加回原链结尾
  2. 读取上游节点(原尾节点)同步数据
  3. 同步完成前将读请求都路由给上游节点
  4. 同步完成后变成新的正常尾结点

20201204182323419.gif

                          故障副本的摘除与挂回

  1. 自动修复

Delta 使用一个控制平面服务(CPS,control plane service)对故障节点进行自动检修。每个 CPS 实例监控一组 Delta Bucket 列表,其主要策略有:

  • 在修复桶时,维持其副本的合理故障阈分布
  • 保证所有服务器上的复制链均匀分布,避免局部过载。
  • 在链中副本缺失时,倾向修复而非新建,以最小化数据复制。
  • 在添加新的服务器到链中,会对服务器进行严格的健康检查。
  • 维护一个健康服务器池,在某个链过半副本故障时,才往其中添加一个节点。

解释下最后一条:即能修复先修复,只有坏到不能再坏(超过一半)才从池子中拨出一个副本给他,从而保证池子里有充足备用弹药。

文中还提到了全球地理复制和用归档服务进行冷备。并提到 Delta 下一步是想充当 Meta 中所有需要数据备份和恢复的服务的存储后端。

参考资料

[1]任何想法都欢迎来提 issue: https://github.com/DistSysCorp/ArticleListWeekly/issues

[2]meta 博客: https://engineering.fb.com/

[3]facebook 小文件存储: https://www.qtmuniao.com/2019/03/24/haystack/

[4]f4:Facebook’s Warm BLOB Storage System: https://www.qtmuniao.com/2019/03/30/f4/


相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
1月前
|
消息中间件 分布式计算 DataWorks
DataWorks常见问题之查看数据地图模块总的存储大小失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
3月前
|
存储 缓存 移动开发
详细介绍HTML5的离线储存(工作原理+使用场景+真实使用步骤)
详细介绍HTML5的离线储存(工作原理+使用场景+真实使用步骤)
|
3月前
|
存储 监控 数据挖掘
阿里云函数计算的日志可以通过两种方式进行处理
【1月更文挑战第16天】【1月更文挑战第76篇】阿里云函数计算(Function Compute)的日志可以通过两种方式进行处理
58 1
|
11月前
|
存储 弹性计算 数据安全/隐私保护
深度解析计算巢镜像部署物复制与关联原理
计算巢服务是阿里云开放给企业应用服务商与其客户的服务管理PaaS平台。服务商在计算巢创建服务(可理解为云资源、软件编排后的集合)并发布上线后,用户便可通过此服务创建服务实例(基于计算巢服务创建的服务实体)以获取具体服务内容。通过镜像部署是一种常见的部署方式。在计算巢中,需要在部署物管理中创建Ecs镜像部署物、分发部署物,然后在创建服务时关联镜像部署物,即可实现用户在创建服务实例时依据不同地域,自动部署对应地域的Ecs镜像。本文旨在说明ECS部署物的复制原理与创建服务实例时的关联原理。
122 0
深度解析计算巢镜像部署物复制与关联原理
|
前端开发 JavaScript 数据处理
更好的oss,obs对象处理库
obs,oss图片裁切库。对象处理,数据处理,url处理,链式调用。用户上传的图片长宽比例往往是不固定的,但是我们显示的区域又是固定的,或者上传了一个100 * 100 的图片,实际体积却有5M,所以需要我们对图片进行处理,一方面,可以避免图片变形,另一方面,可以加快图片加载速度。
470 0
|
CDN
利用工具合并CDN日志操作——内容简介
利用工具合并CDN日志操作——内容简介自制脑图
78 0
利用工具合并CDN日志操作——内容简介
|
机器学习/深度学习 存储 弹性计算
基于阿里云搭建全量push系统
push又称消息推送、消息触达。叫法有很多但目的只有一个,就是通过各种渠道或方式将指定内容告知到指定用户。所以我们也可以称之为通知。
220 0
基于阿里云搭建全量push系统
|
机器学习/深度学习 SQL 分布式计算
如何将模型更新到 OSS 实现离线更新|学习笔记
快速学习如何将模型更新到 OSS 实现离线更新。
177 0
如何将模型更新到 OSS 实现离线更新|学习笔记
|
安全 数据可视化 测试技术
Elastic:集群相关知识点总结(一)数据流 Data Stream、索引生命周期 ILM、可搜索快照 searchable snapshots、跨集群搜索 CCS、跨集群复制 CCR
# 0.引言 集群管理是ES的核心重点,因此相关的知识点至关重要,本期主要针对数据流、索引生命周期、可搜索快照、跨集群搜索、跨集群复制进行讲解
261 0
Elastic:集群相关知识点总结(一)数据流 Data Stream、索引生命周期 ILM、可搜索快照 searchable snapshots、跨集群搜索 CCS、跨集群复制 CCR
|
Linux Shell 开发者
利用工具合并 CDN 日志操作| 学习笔记
快速学习利用工具合并 CDN 日志操作。
188 0
利用工具合并 CDN 日志操作| 学习笔记