【编者按】 面对庞大的数据量和飞快的增长速度,雅虎对象存储需要在保证耐用性和延迟的基础上发挥存储成本效益,雅虎选择了软件定义的存储。本文介绍了雅虎PB级云对象存储COS解决方案的实践,解释了选择Ceph放弃Swift的原因,部署的架构及其实现,耐用性和延迟方面的优化以及未来的研发方向等。
雅虎存储用户所提交的照片,视频,电子邮件和博客文章的数据量达半个EB,对象存储超过2500亿,并且对象存储每年以20%-25%的速度增长,增长原因主要有移动,图像,视频,用户量的增长这几方面。对此,雅虎选择了软件定义存储,在保证耐用性和延迟的基础上发挥存储成本效益。
雅虎的对象存储需求
什么是对象存储?图像、照片、视频、文档、表格、演示文档、以及邮件附件都是典型的对象。这种数据的典型特点就是“一次写入多次读取”。通常,雅虎用一些存储设备来做对象存储。然而,雅虎是许多人数字信息生活的引导者,它对于对象存储的需求与日俱增。此外,由于应用程序对于数据访问方式,数据可靠性,数据访问延迟以及数据存储成本的要求不尽相同。雅虎需要在考虑成本效益的同时,还要考虑满足不同应用程序的需求,雅虎在对象存储需求需要多方权衡考虑。需要软件定义存储的灵活性来做权衡。
为什么是软件定义存储?
软件定义存储的三大优势:
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读延迟优化前后的表现。
优化主要集中在以下这几个方面:
未来的开发
以上提到的和现在用到的都是COS在雅虎Flickr上的使用,雅虎其它用例中对于对象存储有不同的工作负载模型和不同的权衡。为把COS在雅虎更广泛的使用,我们将在未来做这些方面的开发。
原文链接: Yahoo Cloud Object Store - Object Storage at Exabyte Scale (翻译/朱鹏博 责编/周建丁)