系统日报-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,搭建一个在线教育视频课程分享网站。
相关文章
|
6天前
|
存储 SQL 关系型数据库
存储系统、数据库和对象存储 | 青训营
存储系统、数据库和对象存储 | 青训营
|
6天前
|
存储 安全 API
对象存储OSS产品常见问题之中文文件名无法打开让系统自动utf-8编码如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。对象存储OSS产品常见问题之
65 0
|
6天前
|
缓存 安全 API
对象存储OSS产品常见问题之多租户系统用程序统计每个租户的下行流量如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
32 0
|
6天前
|
存储 Cloud Native 数据挖掘
MinIO作为一种开源的对象存储系统,具有以下核心特点
MinIO作为一种开源的对象存储系统,具有以下核心特点
57 0
|
11月前
|
存储 Cloud Native Java
Spring Boot 玩转 MinIO:轻松搭建分布式对象存储系统,提升数据管理效率
Spring Boot 玩转 MinIO:轻松搭建分布式对象存储系统,提升数据管理效率
1565 0
|
存储 前端开发 JavaScript
什么是对象存储系统
大多数现代企业收集和处理大量数据。所有这些信息都需要存储在某个地方。对象云存储有助于应对不断增长的数据量。它是当今可用的最有效的解决方案之一。
507 0
|
存储 Java 应用服务中间件
oss-server 简单对象存储系统
oss-server是针对项目开发时提供的小型对象存储系统,开发者在针对文件上传时业务剥离,同时方便文件迁移,为满足单个项目,多个系统的情况下,提供统一的oss服务
5139 0
|
存储 NoSQL 物联网
TableStore+OSS:物联网数据的备份系统实践
: TableStore是阿里云自研专业级分布式NoSQL数据库,OSS是阿里云的对象存储服务,本篇文章会介绍如何同步TableStore中的数据到OSS中,以便对冷数据做更长久时间的低成本存储。
4584 0