专栏首页CSDN技术头条雅虎PB级云对象存储COS实践:选择Ceph,放弃Swift

雅虎PB级云对象存储COS实践:选择Ceph,放弃Swift

面对庞大的数据量和飞快的增长速度,雅虎对象存储需要在保证耐用性和延迟的基础上发挥存储成本效益,雅虎选择了软件定义的存储。本文介绍了雅虎PB级云对象存储COS解决方案的实践,解释了选择Ceph放弃Swift的原因,部署的架构及其实现,耐用性和延迟方面的优化以及未来的研发方向等。


雅虎存储用户所提交的照片,视频,电子邮件和博客文章的数据量达半个EB,对象存储超过2500亿,并且对象存储每年以20%-25%的速度增长,增长原因主要有移动,图像,视频,用户量的增长这几方面。对此,雅虎选择了软件定义存储,在保证耐用性和延迟的基础上发挥存储成本效益。

雅虎的对象存储需求

什么是对象存储?图像、照片、视频、文档、表格、演示文档、以及邮件附件都是典型的对象。这种数据的典型特点就是“一次写入多次读取”。通常,雅虎用一些存储设备来做对象存储。然而,雅虎是许多人数字信息生活的引导者,它对于对象存储的需求与日俱增。此外,由于应用程序对于数据访问方式,数据可靠性,数据访问延迟以及数据存储成本的要求不尽相同。雅虎需要在考虑成本效益的同时,还要考虑满足不同应用程序的需求,雅虎在对象存储需求需要多方权衡考虑。需要软件定义存储的灵活性来做权衡。

为什么是软件定义存储?

软件定义存储的三大优势:

  • 成本/性能权衡:允许应用程序在不同的硬件上进行成本和性能的权衡,使用相同的软件堆栈进行耐用性配置。
  • 灵活的接口:能够选择行业标准的API接口,应用程序内嵌客户端库,必要时甚至还可以使用私有的API。行业标准的API允许应用程序无缝从公有云迁移到雅虎私有云。
  • 跨存储类型:通过软件进行跨对象存储,块存储和文件存储三种存储类型,从而降低研发和运营成本。

Cloud Object Store(COS)是雅虎基于商用硬件的软件定义存储解决方案。在与Flicker的合作下雅虎已经对该方案进行了多PB的初始部署。并且计划在2015年把COS作为多租户的托管服务,继续通过支持Flicker、雅虎邮件和Tumblr来把COS的部数量提升十倍。未来COS将存储数百PB的数据!

COS用的是Ceph

COS的部署中应用到了Ceph存储技术。我们评估了开源的解决方案Swift和Ceph,以及一些商业化的解决方案后,最终选择了Ceph,因为它可以通过一个固有的架构把对象存储、块存储和文件存储整合到了一个存储层。同时因为它是开源的,所以它提供的灵活性很好地满足了雅虎的需求。

部署架构

COS部署由模块化的Ceph集群组成,每个Ceph集群被视为一个POD。多个这样的Ceph集群同时部署就形成了一个如下图所示的COS“超团(supercluster)”。对象在超团里所有集群中均匀分布,我们使用专有的散列机制来分配对象。散列算法是通过嵌入应用程序中的客户端库来实现的。

经过多次软件的调整和试运行之后,现在每个Ceph集群的部署大约能达到3PB的原始数据,并且无论在进行通常操作还是在做故障恢复的时候都能提供可预测的延迟。由于每个集群有数十个商业服务器和上百块磁盘,所以很有可能会出现故障。故障恢复时由于需要把对象再平衡,所以磁盘和网络活动比较频繁,最终增加了延迟时间。通过限制每个集群的规模,方便我们控制数据恢复时候要消耗资源,从而确保了SLA。

雅虎用户自然希望他们的图片,视频和邮件附件能永久存储下来,并且能在全世界任意地点快速访问。这首先就需要数据高的“耐久性”保证,耐久性在存储系统通常是通过冗余或编码来实现的。冗余可以通过数据复制额外拷贝来实现。另一方面,可以在编码中通过简单的奇偶校验,或更复杂的机制比如擦除编码来实现。擦除编码这种方法把对象分解为碎片,并将它们存储在多个磁盘上,通过一些冗余的碎片来容忍错误。

每个集群的可用容量取决于所使用的“耐久性”技术。我们当前采用的“擦除编码”技术把每个对象分解为八个数据和三个编码片段。这种机制被称为8/3擦除编码,可以同时承载最多三台服务器和/或磁盘故障修复,因为它只消耗约30%的开销。这比复制时候200%的开销要低得多。

这两个耐久性技术提供不同的价位和延迟特性。复制的延迟较低但是成本较高,擦除编码技术虽然可以降低成本(有时候高达50%),但是延迟又较高。我们可以通过使用不同的存储媒介,比如固态盘、磁盘和SMR设备来提供不同层级的服务来满足不同应用程序的需求。

从技术上讲,可以通过丰富存储需求来增加子集群的容量最终实现COS超团(supercluster)的扩展。然而,这将导致子群集间数据的重新平衡,也就意味着磁盘和网络长时间的频繁活动,从而影响到SLA。为了扩展COS,我们更倾向于把增加COS“超团”做成像增加存储农场一样。这一做法与我们目前基于设备的存储解决方案一致。

延迟优化

COS为雅虎的许多应用提供服务,所以必须得保证SLA的延迟,提供一致的、高品质用户体验。雅虎在Ceph上已经实施了40项优化,延迟表现平均提升了50%,其中延迟表现为99.99%的部分提升了70%。图2展示了Ceph读延迟优化前后的表现。

优化主要集中在以下这几个方面:

  • 冗余并行读取与擦除编码:部署8/3擦除编码方案提升耐用性。把Ceph默认8个并行读的数据块增加到11个,在第一次对8个数据块进行检索时就对对象进行重构,从而显著改善读延迟。这样一来大约降低了40%的平均延迟。
  • 数据恢复时的阀门:当磁盘和节点发生故障是,Ceph自动启动恢复,从而保证了高耐久性。但是在恢复过程中,存储节点处于忙碌状态导致较高的读/写延迟。为此,这里我们设置了可调的阀门来减轻这一影响,以减轻这种影响。这样可把数据恢复过程中的平均延迟降低60%。
  • Bucket共享:亚马逊S3 API规范要求把存储的对象bucket化。Ceph实现的bucket相当于一个托管在单个存储节点上的对象。在这里,承载bucket的存储节点成为热点,我们通过共享的bucket来缓解,共享的bucket可以跨越多个节点之间进行传播。

未来的开发

以上提到的和现在用到的都是COS在雅虎Flickr上的使用,雅虎其它用例中对于对象存储有不同的工作负载模型和不同的权衡。为把COS在雅虎更广泛的使用,我们将在未来做这些方面的开发。

  • 规模上:我们已经初始部署了一个多PB级解决方案。在2015年,我们计划将其增长10倍以上,把它用到邮件,视频,Tumblr等,实现像在Flickr那样的增长。
  • 地理复制实现业务连续性:目前,地理复制仅限于应用层。Ceph支持也地理复制,但是,我们还没有测试Ceph在雅虎这种规模和延迟需求下的表现。我们计划在COS里部署地理复制。
  • 优化小型对象的延迟:许多用例中都涉及到数量众多的缩略图,在图像搜索中需要对许多小的对象进行排序。我们需要调整COS来适应这种用例。
  • 生命周期管理:软件定义存储的好处在于,可以通过对硬件和软件的选择来权衡性能和成本。对象存储在热、温和冷之间切换分层充分利用了它的灵活性来提供差异化的服务。

原文:Yahoo Cloud Object Store - Object Storage at Exabyte Scale 

翻译/朱鹏博 责编/周建丁

本文分享自微信公众号 - CSDN技术头条(CSDN_Tech)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-06-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • EnterpriseDB推出构建NoSQL web应用程序免费工具

    【编者按】伴随着对广泛使用的JSON数据交换格式的支持,PostgreSQL开源数据库新版本的出现标志着其将目标指向日益发展的非关系型数据存储NoSQL市场,特...

    CSDN技术头条
  • 容器化RDS|计算存储分离架构下的IO优化

    在基于 Kubernetes 和 Docker 构建的私有 RDS 中,普遍采用了计算存储分离架构。该架构优势明显, 但对于数据库类 Latency Sensi...

    CSDN技术头条
  • Teradata:数字银行的根本是如何利用技术来实时掌控和分析数据

    两会期间,中国建设银行行长张建国委员半开玩笑地说:“银行也是弱势群体啊。”当时包含李克强总理在内的所有人都笑了。但仔细品味,“弱势”一词固然指的是利率市场化改革...

    CSDN技术头条
  • 如何设计跑步的垂直场景-企鹅FM跟着电台动起来

    没想到吧,你竟然可以通过企鹅FM来跑步?为什么在电台App要深度挖掘一个运动场景,交互设计师又是如何将痛点和需求转化为市场蓝海,在设计的过程中怎样将场景垂直的特...

    前朝楚水
  • InChatV1.1.2版本使用说明公众号:Java猫说

    创建一个空的Maven项目,并引入InChatMaven包,(注意,请不要使用与本项目相同的包目录)。

    Java猫说
  • .net Framework2.0 里面的Webcontrols的几个常用控件的继承树

          为了写好分页控件的自动绑定的功能,研究了一下几个控件的继承关系,目的就是为了看看DataSource到底是从哪里来的。 ?       层数还真是多...

    用户1174620
  • 将SparkSQL计算结果写入Mysql中

    天策
  • Python获取Linux或Window

        前段时间写了一篇博文名为《利用Python脚本获取Windows和Linux的系统版本信息》,本篇博文利用这篇文章中的知识提供一个增强版本的获取信息的P...

    用户2398817
  • 樊伟:可计算智能存储揭秘

    3月16日在北京举行的腾讯云自研数据库CynosDB交流会圆满落下帷幕。现将技术团队分享的内容整理如下。

    云加社区技术沙龙
  • Android开发笔记(二十二)瀑布流网格WaterfallGridView

    Android中展示门类信息一般使用列表视图ListView或者网格视图GridView,特别是电商类APP的首页,除了顶部导航、底部标签、上方横幅外,主要...

    用户4464237

扫码关注云+社区

领取腾讯云代金券