阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

社交巨人 Facebook 使用 Linux 和 Btrfs 的姿势

  • 2017-02-20
  • 本文字数:2564 字

    阅读完需:约 8 分钟

Reddit 上有人表示把 42TB 的普通存储(没有组 RAID 或者其他)全部采用 Btrfs 技术,通过把 ext4 文件系统迁移到 Btrfs 至少节省了 5TB 的存储空间。尽管已经开发了相当长时间,但是鲜有发行版把 Btrfs 当作默认的文件系统,目前 SUSE 企业版把 Btrfs 作为系统默认的文件系统。 Linux.com 日前采访了 Btrfs 的主要贡献者 Chris Mason,通过他的讲述透露了社交巨头 Facebook 使用 Linux 内核与 Btrfs 文件系统的大量细节。

Chris Mason 是开源文件系统项目 Btrfs 的主要贡献者,Mason 最初在 Oracle 从事 Btrfs 的开发,后来他加入社交巨人 Facebook 的 Linux 内核技术小组继续从事 Btrfs 文件系统的研发工作。当 Facebook 需要升级新内核的时候,Mason 会做兼容性测试与性能优化的工作。

本文主要介绍了 Facebook 是怎么使用 Linux 和 Btrfs 的。

Linux.com:Btrfs 已经开发了很长时间,现在是时候推出了吗?我知道有些 Linux 发行版已经把它作为默认的文件系统,有的没有。

Chris Mason:众多发行版中 SUSE 确实在企业服务器版使用 Btrfs 作为默认文件系统,因为 SUSE 花了大量的人力和物力在做 Btrfs 的技术支持,我也很感激;Red Hat 并没有这么做。一个发行版是否采用 Btrfs 是人们特别关心的特性,而且大家希望能在这个特性上构建新的东西。

Linux.com:Btrfs 最有价值的地方是什么?如果我没记错的话,Facebook 也在使用 Btrfs。

Chris Mason:在 Facebook 内部,我们有针对性地使用 Btrfs 的一些特性来提高我们手头工作的性能。我们比较关注在系统任务管理、快照之类的事情上。

Linux.com:我们都知道 Facebook 是 Linux 的重度用户。在 Facebook 庞大的基础设施里,哪些地方用到了 Linux?

Chris Mason:简单地说,Facebook 所有的基础设施都使用了 Linux。围绕分布式操作系统我们利用了 Btrfs 的很多特性,比如分布式任务管理、利用快照功能快速更新以及哈希校验功能,等等。

我们在相当数量的机器上运行着 Gluster——既支持 XFS 也支持 Btrfs,我们的目标就是做好存储这件事。在 Gluster 上喜欢用 Btrfs 的其中一个原因是,数据循环冗余校验(cyclic redundancy checks)和元数据循环冗余校验使我们能够检测硬件本身存在的问题,例如静默数据损坏。事实上,通过使用 Btrfs 我们发现了一些较为严重的硬件 bug,这对 Btrfs 来说也是一个利好。

Linux.com:刚才我们聊了 Facebook 使用 Linux 的情况,我比较好奇您怎么看待和使用原生内核,毕竟大家都是根据实际生产环境的需求来 fork 一个内核的分支,鲜有人使用原生版本?

Chris Mason:从 Linux 的角度来看,我们的主要目标是尽可能和原生内核保持一致——我们的目标是至少每年升级一次内核,我们还试图进一步缩短这个更新周期。我们有一个上游优先策略,在使用一个主线更新之前我们要先了解它。如果我们想添加一个特性到 Linux 内核中,我们首先会把它合并到内核的主线更新中。

Linux.com:那为什么还需要 fork 一个自己的版本?

Chris Mason:因为在主线内核上我们无法做自己想做的事——我们不得不 fork 一个自己的版本,以便微调、修改和允许在我们特有使用情况下打补丁到这个内核里。我们的目标是,在人力可控的范围内将 fork 版做到最小。在我们把内核从 4.0 升级到 4.6 的过程中(我们现在还没完成),当我们只用一个补丁就能够获得一个相当可观的生产工作负载性能提升时,我打心里为此感到高兴。我们打过补丁的 4.0 版本的内核拥有和未修改的普通 4.6 版本的内核相同的性能。这也是我们团队的长期目标:紧随主线内核的步伐,以便我们能从一个内核版本快速过渡到另一个版本。

Linux.com:我见过太多跑在旧内核上的 Linux 机器,然而您的目标却是尽可能使用新版本的内核。这样做有什么好处?

Chris Mason:对一个工程师团队来说,最大的好处就是利于我们招聘从事上游内核开发的人才。开发者想要从事革命性的新技术的研发工作,他们想做上游内核的开发工作、参加相关的技术会议、成为上游技术社区的一员。我们也希望能够为上游内核的开发贡献力量,并把这些成果应用到 Facebook 中去。这样我们能比较容易找到并聘用上游内核的开发者,同时也是我们降低工作负载的最佳途径。

Linux.com:在服务器领域,我常听系统管理员说“一旦安装好并运行起来,就不要再碰它了”,这与我们在现代 IT 基础设施中看到的刚好相反——现代 IT 基础设施的宝典是为了安全要变动的更快。

Chris Mason:我认为,Facebook 横向扩展的能力使我们进行测试变得更为容易。这并不是说测试工作本身变得容易了,而是我们把测试单元部署在大量机器上的过程变得更容易了。我们有能力把测试工作放在一个被我们称之为“影子层”的地方进行——我们可以在一个非生产环境重放生产网络的流量,这样我们能够在一个非常安全的地方检测系统的稳定性和性能。我们可以像做实验那样一边加大流量一边说:“好了,我先给它(测试环境)5%的生产网络流量,然后一路增加到 100%,看看会有什么发现吧。”像做 A/B 测试那样,我就能得到两个内核在整个实验过程中对比鲜明的数据。

我们有工具能验证内核并帮助测试上游内核。这样比较容易发现上游内核新的有意思的 bug,而非只是找到已经被上游内核修复过的 bug。

Linux.com:您比较担心什么问题?

Chris Mason:就运行 Linux 内核或者文件系统而言,我们还没遇到什么问题;况且有这么多的社区在支持 Linux,我也没有必要担心什么。

Linux.com:您参与 Linux 开发也有很长时间了,Linux 也刚刚过完 25 岁的生日。您认为在过去的 25 年里,Linux 实现了什么目标?

Chris Mason:除了显而易见的技术贡献,我最感激 Linus 本人的地方是他一手创建了内核开发者社区,人们在这里非常积极地投入一个又一个新版本的内核开发中。Linux 项目因此没有像别的开源项目那样变得碎片化虽然不全是 Linus 本人的功劳,但我最感激 Linus 的地方是他创立了一种机制,使得 fork 一个内核版本或者做一些不同的事情远不如老老实实跟着主线内核走。

我认为这是一个非常重要的贡献——对很多人来说这是最容易忽视的地方,Linux 内核社区让大家紧密团结在一起——就像星星和星星之间,不是互相排挤,而是互相照耀。


感谢刘志勇对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-02-20 16:332904
用户头像

发布了 64 篇内容, 共 22.5 次阅读, 收获喜欢 11 次。

关注

评论

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

能源管理可视化破冰而出,数字孪生打破传统运维僵局

一只数据鲸鱼

物联网 数据可视化 3D可视化 能源管理 智慧电厂

2021最新发布拼多多/字节/360/网易/面经总结

比伯

Java 编程 程序员 架构 面试

选择IDaaS解决方案的6个技巧

龙归科技

Idaas

【点评必看】这道 Hard 到底难在哪里?大概是难在考察的是违反“人性直觉”的内容吧 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

滚雪球学 Python 之 lambda 表达式

梦想橡皮擦

28天写作 3月日更

场景demo落地 - 视频通话 2.0 ARCall

anyRTC开发者

flutter uni-app android WebRTC RTC

淘宝推荐、视频搜索背后的检索技术:阿里达摩院向量检索Proxima核心能力揭秘

Proxima 技术社区

人工智能 大数据 阿里巴巴 搜索 非结构化数据

Java面试热门技术框架:Spring Security Oauth2.0认证授权

Java架构追梦

Java spring 面试 金三银四跳槽

区块链:热追背后需冷静 技术应用要同步

CECBC

区块链

这操作真香!一线互联网企业高级Android工程师面试题大全,面试真题解析

欢喜学安卓

android 程序员 面试 移动开发

一场发生在“田间地头”的数字化变革

CECBC

三农

腾讯五面、快手三面已拿offer(Java岗位),分享个人面经

Java架构之路

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

他喵的,Google大佬的这份LeetCode刷题笔记太强了,提升算法能力必备!

Java架构之路

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

Kubectl Plugin 推荐(二)| 简化操作篇

郭旭东

Kubernetes kubectl kubectl plugin

装在套子里的人

Dc

如果延迟退休势在必行,区块链如何助力“养老助老”?

CECBC

养老

LinqToExcel.Extend 源码分析 第二波

happlyfox

28天写作 3月日更

当跨国企业女职业经理人遇上创业女 CEO,两者会擦出什么样的火花?

科技新消息

书单|互联网企业面试案头书之程序员技术篇

博文视点Broadview

数据库周刊60丨3月国产数据库排行榜出炉;日本银行数据迁移失败致使业务宕机;阿里云RDS PG13发布;亚健康Oracle数据库故障定位;Redis最佳实践;MySQL查询优化……

墨天轮

MySQL 数据库 oracle 运维 postgre

2021年3月国产数据库排行榜:雏凤声清阿里三连 绝代双骄华为合璧

墨天轮

数据库 腾讯云 阿里云 华为云 TiDB

产品经路训练营 -- 第四章作业(一)

Lucas zhou

产品经理训练

Python3 * 和 ** 运算符

老王说编程

Python3

第五.需求评审与产品发布 (承上启下的作用)

让我思考一会儿

【LeetCode】删除字符串中的所有相邻重复项Java题解

Albert

算法 LeetCode 28天写作 3月日更

从产品经理到产品架构师

博文视点Broadview

如何凝聚党员力量?智慧组工系统构架组织部管理平台解决方案

源中瑞-龙先生

解决方案 党员 智慧组工

为什么我们开发 San 项目时要用 CLI?

百度Geek说

service SLI san command

面试看这个就够了!最新BAT大厂面试者整理的Android面试题目模板,先收藏了

欢喜学安卓

android 程序员 面试 移动开发

谷歌大佬回国发展,吊打各大厂面试官!吐血总结大厂面试高频点及笔记解析

Java架构之路

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

LeetCode题解:125. 验证回文串,翻转数组,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

社交巨人Facebook使用Linux和Btrfs的姿势_Linux_魏星_InfoQ精选文章