【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

Facebook 冷存储系统

  • 2015-05-14
  • 本文字数:2485 字

    阅读完需:约 8 分钟

作为排名世界领先的社交网站,Facebook 经历了迅速崛起的过程。从 2004 年上线开始,其用户数量在 2007 年 7 月已经达到三千四百万。时至今日,Facebook 每月的活跃用户量已经超过 20 亿,占全球总人口的三分之一。同时,作为一个全球排名领先的照片分享站点,网站每天会收到上亿张照片。伴随着用户数量以及用户上传资源的增多,Facebook 网站的后台服务器数量也从 1 台迅速增加到数十万台。为了满足长期发展需求,Facebook 于 2010 年在美国俄勒冈州的 Prineville 建设了第一个数据中心。之后,该公司又分别在美国的北卡罗来纳州和爱荷华州等地方建立了若干个数据中心。这些高性能数据中心很好的解决了网站发展的迫切需求。即使是在西方的万圣节,服务器也可以完美支持用户成功上传 10 亿到 20 亿张图片。然而,这些数据中心在满足用户需求的同时,也给公司带来了巨大的花销。除却构建基础设施(包括机房、服务器等)的庞大花费,Facebook 数据中心每年消耗的上亿度电就是一笔很大的开销。因此,Facebook 从 2011 年开始考虑冷存储技术,来解决硬件花销及能源消耗问题。

Facebook 的冷存储技术起源于对自身数据存储方式及数据访问模式的思考。在以往,网站对于所有的照片、个人资料等基本采用同样的方式进行存储。但是,不同的数据在访问频率、访问次数等方面存在很大的不同。例如,用户在万圣节上传的大量照片基本上在几天或几周之后就不会再被访问。而用户主页的资料则是经常被访问的内容。鉴于这种情况,Facebook 提出冷存储的计划以更低能耗、更低成本和不变的响应时间来存储这些“冷”照片数据。经过几年的筹划,Facebook 目前已经建成了扩建了两个数据中心,用来放置包含全新设计的硬件和软件的冷存储系统。尽管行业界对于数据中心相关的技术都讳莫如深,Facebook 却成立开放计算项目(OCP),公布了定制数据中心和服务器的一系列设计细节。近期, Facebook 员工 Krish Bandaru 和 Kestutis Patiejunas 更是在博客中透露了新的冷存储系统在设计时遇到的各种难题,以及系统的一些设计细节。接下来,本文就从硬件、软件以及系统的可靠性和可扩展性等方面对 Facebook 的冷存储系统进行介绍。

首先,在硬件方面,新建的存储系统只配备了原本系统 1/6 的电量供应。此时,每个数据机柜机房仍然要能够支持 1000PB 的数据存储。为了到达这样的目标,Facebook 在 Open Vault OCP 标准的基础上,进行了修改。其中,最大的改变在于每个面板只支持一个驱动器的供电。为此,公司特别修改了电路设计,使得即使会出现系统启动时没有加载任何驱动器的情况,也绝对不会有多个驱动器在同时运行的情况。在此基础上,每个存储节点的风扇数量从 6 个减少到了 4 个,同时电源架数量从 3 个减少到了 1 个,电源架上的电源个数也从 7 个减少到了 5 个。这些变化使得 Open Rack 的总线数量从 3 个减少到 1 个。最终,反映到功耗方面,一个 2PB 的机柜可以在原来四分之一功耗的情况下正常工作。此外,数据中心还移除了无间断电源(DCUPS)以及发电机等来减少硬件开销。在设计这个全新的存储系统时,Facebook 的设计师遇到了很多前所未有的困难和问题。例如,在测试中,设计师才发现全新设计的机柜在携带 480 个 4TB 驱动器时竟然重达 1100 千克。之前一直在使用的运输车根本不能负载这么重的货物。

然后,另外一方面重要的工作就是设计一个能够支持冷存储的软件系统。鉴于硬件设计中已经去除了电池和不间断电源,软件需要在随时可能断电的情况下保证数据的完整性和持久性。根据设计目标,Facebook 在软件设计阶段坚持了几个准则。第一,数据的持久性是软件系统必须要保证的内容。尤其是对于冷存储系统,很多照片或其他数据可能只在该系统中保留有备份。作为数据恢复的最后一道防线,该系统一定要保证数据不会丢失或损坏。第二,硬件方面的约束使得软件设计要十分小心。非企业级的硬件配置、随时可能掉电的电源配置等情况都是软件需要应对的问题。最后,软件一定要考虑未来大规模系统的需求,保证硬件扩展后系统还可以高效率工作。

在硬件和软件设计基本确定以后,Facebook 仍然需要解决硬盘失效以及数据中心电源不稳定等带来的可靠性问题。该公司采用了传统的数据冗余备份的方式来增加可靠性。其中,所采用的冗余备份策略为 Reed-Solmon 错误检测编码。例如,一个 1GB 大小的文件会被分割成 10 个 100MB 的文件。然后,这个 10 个文件的 Reed-Solmon 编码会将其转变成 14 个文件互相冗余的文件。通过这种转换,Reed-Solmon 编码保证通过其中任意 10 个文件仍然能够将原来的数据成功恢复。因此,只要把这些文件分开存储,即使其中 4 个文件损坏,系统仍然能够正确恢复数据。数据中心根据存储媒介的失效率等参数调整编码方式中冗余数据的个数,即可完成系统对可靠性的要求。此外,数据中心会紧挨着数据本身存储一份校验和,来方便检查数据的完整性,及时发现数据完整性问题。

Facebook 数据中心关心的另外一个问题就是“bit rot”问题。之前,该公司就发现在大规模存储系统中存在无访问的情况下数据失效的问题。为了应对该问题,冷存储的数据中心采用了定期对所有数据进行扫描的策略。目前,服务器一个月左右会把所有的数据扫描一遍并向软件汇报相应情况。针对发现的数据失效问题,软件会利用备份的数据片重新构建数据,并放置到一个新的地方进行存储。通过这种方法,数据中心保证所有的数据都可以得以完整保存。

最后,为了应对扩展服务器的问题,系统软件一直均衡所有服务器的负载。对于新加入的服务器,软件会迅速把数据转移到该机器,实现所有服务器负载均衡。这样,即保证了数据存储的平等,也保证了服务器使用率的平衡。据 Krish Bandaru 和 Kestutis Patiejunas 表示,Facebook 的冷存储系统会在将来继续升级,所涉及的方面包括新型媒介(如 flash 和蓝光光盘等)的使用和应对频繁映射 / 反映射的文件系统升级等。


感谢崔康对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-05-14 07:514146
用户头像

发布了 268 篇内容, 共 118.1 次阅读, 收获喜欢 24 次。

关注

评论

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

林昊获中国计算机学会杰出工程师奖,阿里中间件再获高度肯定,“三位一体”推动技术普惠

阿里巴巴云原生

阿里巴巴 阿里云 开发者 云原生 中间件

低代码开发平台的技术路线

Sam678678

备战2O2I新年资料

ios 面试

普通人必须掌握的五个必学理财知识

v16629866266

工业传感器:工业互联网的第一道门

浪潮云

工业互联网

electron实战练习-三个文件实现一个命令行终端

OBKoro1

node.js Electron electron实战 命令行终端 electron学习

mysql字符串字段索引优化

瞌睡的李先生

MySQL 索引

安卓开发在线!字节跳动Android研发岗这些知识点内部泄露出来了,已拿到offer

欢喜学安卓

android 程序员 面试 移动开发

废弃fastjson!大型项目迁移Gson保姆级攻略

Zhendong

Java json Gson Fastjson

架构师训练营第二周作业 - 学习总结

阿德儿

又出神作!阿里技术官再出山,操作性超强的Spring事务+AOP实践手册

比伯

Java 编程 程序员 架构 面试

新思科技静态应用安全测试解决方案获得Forrester Wave认可

InfoQ_434670063458

新思科技 Forrester Wave 静态应用安全测试

研发管理101军规#003 实战规模化敏捷:从8人到百人的敏捷之路

PingCode

程序人生 Scrum 敏捷开发

如何对AD和Exchange进行安全加固满足护网需要?

嘉为蓝鲸

安全 asm AD 邮件系统 权限

细节决定成败!致Android高级工程师的一封信,实战解析

欢喜学安卓

android 程序员 面试 移动开发

最近线上发生的两个坑爹锅

艾小仙

后端

2020DevOps状态报告——变更管理

禅道项目管理

DevOps 运维 开发 趋势 自动化测试

阿里P8内部架构核心学习知识笔记在各大互联网上流传,限时开放下载

Java架构之路

Java 程序员 架构 面试 编程语言

Java 程序经验小结:用私有构造器或者枚举类型强化Singleton属性

后台技术汇

28天写作

盘点2020 | 人生是一场马拉松-OBKoro1的2020年年终总结

OBKoro1

2020 大前端 年终总结 OBKoro1

架构师训练营第二周作业 - 命题作业

阿德儿

Redis 用的很溜,了解过它用的什么协议吗?

古时的风筝

redis RESP Redis 协议

软件测试--selenium安装使用

测试人生路

软件测试

快速入门案例实战:电商网站商品管理(一)

escray

elasticsearch elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

我以为自己够牛逼了,直到看到了Alibaba专家的面试笔记,我学习了三个月,却入职京东,税前36K

Java架构之路

Java 程序员 架构 面试 编程语言

GrowingIO Design 组件库搭建之开发工具

GrowingIO技术专栏

设计 大前端

新鲜出炉!阿里内部开源SpringCloud Alibaba全解(全彩版)全网首发

Java架构追梦

Java 学习 架构 面试 SpringCloud Alibaba

顶级!13位专家力荐Spring5为企业级开发提供一站式方案

996小迁

Java spring 编程 架构 面试

阿里中间件团队技术官手撸笔记,全新演绎“Kafka部署实战”,已开源

Java架构之路

Java 程序员 架构 面试 编程语言

WebRTC ICE 状态与提名处理

阿里云视频云

阿里云 WebRTC 通信 流媒体开发 流媒体传输

数字货币量化对冲搬砖套利交易软件APP系统开发

系统开发

Facebook冷存储系统_Meta_张天雷_InfoQ精选文章