写点什么

放弃 Ceph,Salesforce 使用 Apache BookKeeper 在云中实现最强存储

  • 2021-05-25
  • 本文字数:4013 字

    阅读完需:约 13 分钟

放弃Ceph,Salesforce使用 Apache BookKeeper 在云中实现最强存储

本文要点

  • 使存储系统感知云的传统方式是直接迁移,这种方式表现良好,但从我们的经验来看,重构云感知架构效果更好。

  • 目前,在跨区域环境中部署 Apache BookKeeper 时需要手动将存储节点映射到特定区域/可用性区域,但在区域中断时,持久性和可用性会受到影响。

  • Salesforce 独有的使 Apache BookKeeper 感知云的方法是通过智能化存储节点,让其在云中部署可以有效运转,并保证持久性和可用性。

  • 这些方法简化了集群的改进、升级和重启操作,对消费服务的影响最低。

 

在 Salesforce,我们需要可以同时处理两种流的存储系统:一种流用来预写日志,另一种流用来处理数据。但对这两种流,我们的要求相互矛盾:预写日志流的写入延迟低,而读取吞吐量高;数据流的写入吞吐量高,但随机读取延迟低。作为云计算的领军企业,我们的存储系统必须具备云感知能力(可用性和持久性要求越来越高)。为了在商用硬件上运行并方便扩容,我们无法更改部署模型设计。

 

开源方案

在对存储系统进行初步研究后,我们考虑是自己搭建一套还是购买一套。

 

考虑到整体规划和上市时间、资源、成本等主要的业务驱动因素,我们决定使用开源存储系统。

 

在查看了开源代码后,我们有两个备选方案:Ceph 和 Apache BookKeeper。由于这套系统需要对客户开放,可扩展性和一致性都很重要,系统必须完全满足用例的 CAP(Consistency:一致性;Availability:可用性;Partition Tolerance:分区容错性)要求以及我们自己的特殊需求。首先,我们来看一下 BookKeeper 和 Ceph 在 CAP 和其他方面的表现。

 

Ceph 可以保证一致性和分区容错,读取路径可以借助不可靠读取提供可用性和分区容错;但要使写入路径保证可用性和分区容错性并不容易。并且,我们不能更改部署数据。

 

我们决定选择 Apache BookKeeper。BookKeeper 支持仅追加/不可变数据存储,采用高可复制的分布式日志,满足我们对系统 CAP 的要求。BookKeeper 还具备以下特点:

  • 已 Ack 的写入始终可读。

  • 已读 Entry 始终可读。

  • 无 Master 服务器,客户端使用 Apache ZooKeeper 实现共识(consensus)算法,获取元数据。

  • 数据布局无需复杂的哈希/计算。

 

Salesforce 也一直支持开源产品,Apache BookKeeper 社区积极活跃,充满活力。

 

Apache BookKeeper——近乎完美,但还有改善空间

Apache BookKeeper 几乎实现了我们对存储系统的全部要求,但仍需做一些工作。首先来看一下 Apache BookKeeper 可以实现我们的哪些要求。

  • 存储节点称为 Bookie;一组 Bookie 称为 Ensemble。

  • 写入的最小单元为 Entry,Entry 不可更改。

  • 一组 Entry 称为 Ledger,Ledger 仅可追加,不可更改。

  • 写入或复制 Bookie 的数量称为 Write Quorum——Entry 的最大副本数。

  • 确认写入前 Bookie 的数量称为 Ack quorum——Entry 的最小副本数。

 

从持久性来看,Ledger 跨 Bookie Ensemble 复制,Ledger 内的 Entry 可以跨 Ensemble。



Ensemble Size: 5 Write Quorum Size: 3 Ack Quorum Size: 2

 

写入根据 Write Quorum 和 Ack Quorum(可配置)进行确认,从而保证低写入延迟和高可扩展。

 

但实际上,在云中的商用硬件上运行 BookKeeper 并不轻松。

 

数据布局策略不具备云感知能力,并且没有顾及底层云服务提供商(云基础设施)。目前,一些用户的部署方法是手动标识不同可用性区域中的节点,并进行逻辑分组,然后以组为单位改进数据布局策略。这不失为一种解决方案,但不支持区域故障,也降低了维护和升级大型集群时系统的易用性。

 

另外,所有云基础设施的可用区域里都出现过停机情况;而一般的理解是,应用程序要针对这些故障做相应的设计。一个很好的例子是,2012 年圣诞节期间,Amazon 网络服务可用区域故障,Netflix 底层所依赖的公有云基础设施停机,而 Netflix 服务仍然可以在有限的容量上运行

 

公有云中的问题

公有云基础设施易于扩展,在一定程度上降低了使用和维护的成本,因此,从网站到应用程序,甚至是企业级软件,基本都在公有云服务提供商提供的基础设施上运行。但是,公有云也有其缺陷,它在节点、区域或地区层面都可能出现不可用的情况。底层基础设施不可用,用户什么都做不了。起因可能是某些机器、区域或地区出现故障,也可能是由硬件故障引起的网络延迟增加。所以最终当在公有云基础设施上运行应用程序时,开发人员在设计时需要考虑由故障引发的问题。

 

Apache BookKeeper 本身不能解决这一问题,因此,我们需要自行设计一个修复程序。

 

Salesforce 重构

对问题有了一定的了解之后,我们开始考虑解决方案,让 BookKeeper 具备云感知能力,满足我们的以下要求。

  • 在公有云集群中的 Bookie 需要一个标识。

  • 根据可用区域内 Ensemble 的分布设计数据布局策略,实现更好的高可用,简化维护和部署。

  • 改进 Bookie 已有的功能,如读取、写入、数据复制等,使 Bookie 可以充分利用多区域布局的优势,并计算跨区域传输数据的成本。

  • 上述工作和云基础设施无关。

 

我们的解决方案如下。

 

云感知能力:Cookie 和 Kubernetes

现有的 BookKeeper 架构为所有 Bookie 提供唯一标识(在首次启动时分配)。标识存储在元数据存储(ZooKeeper)中,其他 Bookie 或客户端可以访问。

 

使 Apache BookKeeper 具有云感知能力的第一步是让所有 Bookie 均可获取它部署在 Kubernetes 集群中的位置。 我们认为 Cookie 数据是获取位置信息的最佳方式。

 

因此,我们在 Cookie 中增加了 networkLocation 字段,它包含两部分:可用区域和升级域,用于定位 Bookie。Kubernetes 和云基础设施无关,我们可以使用 Kubernetes API 来查询底层的可用区域信息。我们还根据涉及主机名顺序索引的公式生成了 upgradeDomain 字段。它可以用来滚动升级,而不影响集群的可用性。

 

在机器启动时生成上述字段和对应值,并保存在元数据存储中供用户访问。这些信息可以用于生成 Ensemble,分配 Bookie 到 Ensemble,以及确定从哪些 Bookie 复制数据,复制的数据存储到哪些 Bookie。



公有云布局策略

现在,客户端已经足够智能,可以与某些区域中的 Bookie 进行通信,下一步便是确保有一个可以使用这一信息的数据布局策略。我们开发了 ZoneAwareEnsemblePlacementPolicy(ZEPP)。这是一个针对基于云部署而设计的两级层次化布局策略。ZEPP 可以获取可用区(AZ)和 upgradeDomains(UD)信息。

 

AZ 是区域内隔离数据中心的逻辑概念;UD 是 AZ 内的一组节点,关闭 UD 不会影响服务,UD 还可以监测到区域的关闭和重启。

 

下图为 ZEPP 可采用的一种部署示意图。这种部署方式兼顾了 Cookie 中的 AZ 和 UD 信息,并据此对 Bookie 节点进行分组。

 


可用性 & 延迟 & 成本

进行上述调整后,Apache BookKeeper 可以具备云感知能力了。但成本也是设计架构时必须考虑的因素之一。大多数云基础设施对传出服务的数据进行单向收费,跨可用区传输的费用会有所不同。这是 BookKeeper 客户端需要考虑的一个重要因素,因为它现在是从 Ensemble 中随机选择一个 Bookie 进行读取。

 

如果 Bookie 和客户端属于不同的可用区,会增加不必要的成本。数据复制可能发生在跨可用区的 Bookie 之间,当可用区出现故障时,使用成本会增加。

 

我们通过以下方式来处理这些特殊情况。

 

重排序读取

目前,BookKeeper 客户端从 Ensemble 随机选取 Bookie 进行读取。借助重排序读取特性,现在客户端可以选择 Bookie,从而减小读延迟,降低成本。

 

启用重排序读取后,客户端按照以下顺序选择 Bookie:

  • 本地区域中满足要求且待处理请求少的 Bookie;

  • 远程区域中满足要求且待处理请求少的 Bookie;

  • 本地区域中故障最少或待处理请求高于设定阈值的下一个 Bookie;

  • 远程区域中故障最少或待处理请求高于设定阈值的下一个 Bookie。

 

按照上述顺序,运行很长时间且出现过故障的系统也可以满足我们对延迟与成本的要求。

 

处理区域故障

当区域关闭时,不同 Ensemble 中的所有 Bookie 都开始将数据复制到当前可用区域内的 Bookie 中,从而满足 Ensemble Size 和 Quorum 要求,引起“惊群问题”。

 

要解决这一问题,首先要确定区域关闭的时间。故障可能是暂时性的操作失误,比如网络故障引起区域不可用,我们不希望系统复制 TB 级的数据;但同时我们也要做好准备,应对真正的故障。我们的解决方案包含两步:

  • 辨别区域是真正故障还是暂时故障;

  • 将整个区域的大规模自动复制转换为手动操作。


下图为区域关闭与重启时我们的应对方案。



根据区域中可用 Bookie 数量和区域中 Bookie 总量可以计算出 HighWaterMark 和 LowWaterMark 的值。用户可以为这两个值设置阈值,系统可以据此判断故障情况,进而确定故障类型。

 

当区域标记为关闭时,我们会禁用自动复制,从而避免跨区域自动复制 TB 级的数据。此外,我们在数据复制的地方增加了告警,提示用户可能出现的区域故障。我们认为,运维专家能够将噪声与实际故障区分开,并决定是否开始自动复制整个区域的数据。

 

我们还可以通过 shell 命令启动已禁用的 Bookie 自动复制。

 

我们的收获

Apache BookKeeper 是一个开源项目,社区非常活跃,并一直在积极讨论面临的一系列挑战。由于 BookKeeper 是存储数据的组件,对很多用户而言,其云感知能力十分重要。

 

本文介绍的更改已在 Salesforce 进行了实战验证。目前,借助 Apache BookKeeper ,我们已经可以支持 AZ 和 AZ + 1 故障。但是,这样的架构更改必然会影响到可用性、延迟、成本、部署和维护的简易性。社区已经接受了我们提交的一些更改,我们会继续为社区做出贡献。我们希望这些更改可以简化集群打补丁、升级、重启的操作,同时尽可能降低对消费服务的影响。

 

关于作者


Anup Ghatage 任职于 Salesforce,主要负责云基础架构和数据工程,曾任职于 SAP 和 Cisco Systems,对维护和开发高可扩展的系统有浓厚兴趣。他本科毕业于普纳大学计算机专业,硕士毕业于卡耐基·梅隆大学。他是 Apache BookKeeper 的 committer,积极参与 Apache BookKeeper 的开发。欢迎在 Twitter 上关注 Anup(@ghatageanup )。

 

原文链接:

https://www.infoq.com/articles/storage-cloud-apache-bookkeeper/

2021-05-25 11:502666

评论

发布
暂无评论
发现更多内容

downie 4怎么下载?苹果mac专业的视频下载工具downie4下载安装 含集成版许可证

理理

Downie 4许可证 Downie 4 下载 Downie 4 Mac版 Downie 4视频下载器

面试这么多,为什么拿不到offer?

老张

面试 求职 职场成长

奈飞中文影视_Netflix for mac v2.13.0激活版 支持m1/m2

理理

Clicker for Netflix Netflix客户端 Netflix mac版破解版下载 网飞客户端

好用的微软代码编辑器Visual Studio Code免费版(mac&win)

理理

Visual Studio Code 微软代码编辑器

面经精选:数据库高频面试十问

王中阳Go

数据库 面试

蓝易云 - Linux部署kettle并设置定时任务

百度搜索:蓝易云

中文版谷歌访问助手 for Mac(谷歌浏览器插件)下载安装教程

理理

谷歌访问助手插件 谷歌浏览器扩展

MES系统如何实现生产管理自动化

万界星空科技

mes 万界星空科技 制造业工厂 生产管理MES系统 自动化生产

交易所/永续合约跟单交易系统开发稳定版/案例搭建/成熟技术

V\TG【ch3nguang】

蓝易云 - 跨境电商企业应该如何选择服务器?

百度搜索:蓝易云

实力认证!望繁信科技入选2023WISE未来商业之王年度企业

望繁信科技

数字化转型 大模型 流程挖掘 流程智能 上海望繁信

无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案[含ollama部署]

汀丶人工智能

人工智能 agent LLMOps rag dify

ps2019直装版:Photoshop 2019 for Mac/Win 版

你的猪会飞吗

Mac软件下载站 PS2019 Mac中文版下载 mac破解软件下载

蓝易云 - DB2 HADR+TSA运维,TSA添加资源组的命令

百度搜索:蓝易云

mac&win xmind思维导图破解安装包(附Xmind入门指南)

理理

XMind 2024破解版 XMind思维导图下载 xmind使用教程

photoshop 2021 滤镜如何使用?ps滤镜库下载及安装【永久使用】

理理

ps2021破解版 photoshop 2021 滤镜 neural filters逆天滤镜 ps照片滤镜 photoshop 2021 安装包

Advanced RAG 11:对用户输入的内容进行「分类处理」和「再优化」

Baihai IDP

AI LLMs 企业号 8 月 PK 榜 rag RQ-RAG

永久使用 Photoshop CC 2019中文破解版下载安装包(mac&win)

理理

苹果Mac电脑想要实现双系统运行,Parallels Desktop虚拟机来帮你!

Rose

Parallels Desktop 虚拟机 Mac双系统安装

如何卸载Maxon产品?红巨星系列插件如何彻底清除

Rose

红巨星激活系列插件

蓝易云 - postgresql-常用数学函数

百度搜索:蓝易云

基于51单片机设计的公交车LED屏

DS小龙哥

8月月更

地理编码之旅,一场地址与坐标的漫游

HarmonyOS SDK

HarmonyOS

专题 | IAM业界热度不减,2024市场持续井喷(二)

芯盾时代

身份安全 iam 身份和访问管理 零信任

【永久使用版】Parallels Desktop 18虚拟机 for mac下载激活教程

理理

Parallels Desktop 18 Mac虚拟机 PD18破解版 Parallels 永久使用版

CSS萤火虫按钮特效

南城FE

CSS 前端 动画

【ACL2024】阿里云人工智能平台PAI多篇论文入选ACL2024

阿里云大数据AI技术

人工智能 阿里云 acl 论文 PAI

汉化版Microsoft Remote Desktop微软远程桌面使用教程

理理

全红婵夺冠!数业智能心大陆告诉你原生家庭在背后发挥了怎样的力量

心大陆多智能体

智能体 AI大模型 心理健康 数字心理

蓝易云 - Ubuntu之apt-get系列--apt-get安装软件的方法/教程

百度搜索:蓝易云

C ++ IDE智能代码编辑器:CLion 2023 (Win&Mac)激活版

你的猪会飞吗

CLion 2023 CLion 2024破解版 CLion激活码 CLion破解版

放弃Ceph,Salesforce使用 Apache BookKeeper 在云中实现最强存储_大数据_Anup Ghatage_InfoQ精选文章