QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

从 SDF 发展看百度的基础架构技术之路

  • 2014-08-18
  • 本文字数:2293 字

    阅读完需:约 8 分钟

最近,百度基础架构部高级架构师欧阳剑在“中国计算机学会通讯”期刊中发表了题为“百度基础架构技术发展之路”的问题,从“ASPLOS 2014 SDF 论文”、“为什么要发表论文”、“混合研究发展之路“、 “基础结构技术”等四个方面详细阐述了百度近几年在基础架构方面的心得。

据欧阳剑介绍,软件定义闪存 (Software- Defined Flash, SDF), 最早是由百度公司前首席架构师林仕鼎在 2011 年初提出来的。当时百度正在做新一代的存储系统, 考虑到传统的固态硬盘 (solid state disk, SSD) 在性能和成本方面的诸多缺陷, 如带宽利用率低、空间利用率低 及性能的不可预测等, 需要面向 数据计算中心重新设计 SSD。于是, 我们开始研制 SDF。SDF 是一个软硬件协同系统, 完全颠覆了 SSD 的性能。SDF 有如下几个特点:

  • 底层 Flash 通道用户态的软件是可见的, 让软件来管理数据的布局 (layout), 使得硬件的并行性能得到充分发挥。
  • 基于层次到竖井的设计理念, 实现了扁平的新文件系统和 IO stack, 提高了可扩展性并降低了延时。
  • 与存储系统相结合, 读写块的大小尽量与硬件友好。
  • 资源全局利用, 取消硬件通道间的异或校验, 存储系统的三副本本身能保证数据的可靠性。

正如欧阳剑所说,做工程和做研究其实是两条并行的道路, 并没有太多的交集。一个感性的想法离发表论文可能不太远, 但离实际的规模应用还有十万八千里。两者对做事情的方法要求也很不同, 一个公司如果要想把这两者结合在一起, 并且出成果, 除了需要工程师的不懈努力外, 还需要一套可行的研究及工程研发体系作保障。比如:

第一批 20 台, 第二批 100 台, 第三批 500 台, 每次上线都要运行很长一段时间后下一批才会再上线。前 三批稳定运行半年多, 一直都非常顺利。可是真的没有问题了吗? 我们有些庆幸、甚至有些怀疑, 当我们以为这个项目将要顺利完成的时候, 问题终于在第四批 1000 多台的上线中暴露出来。因为在进行硬件设计时的经验不足, 对现场可编程门阵列 (FPGA) 的输入 / 输出 (I/O) 没有做足够的约束, 导致在数据量大的时候会出现数据不可靠的问题, 直接影响了线上的使用。最初我们以为是硬件逻辑问题, 一直没办法定位, 那段时间我们承受着巨大的压力。如果放弃, 不仅仅是一年多的努力前功尽弃, 还会给公 司带来巨大的经济损失, 例如硬件采购成本。经过两三个月的艰难调试, 在无数次尝试之后, 发现有可能是 I/O 约束问题, 在修改约束之后, 数据的可靠性大大 提高, 使得第四批产品也顺利上线, 并且性能数据非常好。

对于“百度为什么要发表论文”这个问题,欧阳剑表示,主要目的是建立技术品牌, 扩大技术影响力, 从而吸引更多优秀人才加盟百度。另一个原因是通过公开自己的技术, 回馈社会。

互联网公司拥有大数据和大系统, 具有做系统技术研究得天独厚的优势。以百度为例, 有超过 1000PB 的数据、单个分布式计算集群过万台的服务器。 互联网公司的另一个优势就是有很多真实的问题、挑战和需求, 这些都是与互联网用户直接相关的, 基于这些问题、挑战和需求来做研究, 成果也会直接反馈到用户体验上, 更容易引起大家的兴趣, 也更容易让人理解。

文中特别提到了“百度的混合研究发展思路”,比如,百度的基础架构部门到目前为止还没有纯粹的研究人员, 工作人员的研究工作都是穿插在日常的工程项目中。这些研究工作的唯一目标就是用更大胆、更超前的想法来把系统或者产品做得更好, 这些研究最终都是要应用到实际的系统或者产品中。

无论是 SDF、 ARM, 还是我们现在正在做的一些工作, 都是世界范围内的先例。我们做 SDF 的时候, 需要重新设计软件和硬件, 硬件的架构和软硬件之间的接口都与传统的 SSD 不同, 而且我们的用户又是非常关键的“网页库”, 可以有很多理由让这个项目不能落地, 例如“新产品不稳定”,“新的架构没经过验证”等等。而且刚开始的时候,SDF 确实出现了不稳定的情况。如果一开始我们就被困难吓倒, 或者找借口不愿意承担风险, 大家就不会看到今天 SDF 的成果。ARM 项目也一样, 2011 年初百度开始做 ARM 服务器的时候, 遇到了很多困难, 例如 CPU 是 32 位的、大量代码要移植、产业链不成熟、没有参考经验等等。而且业务方是百度云, 承载了一亿多的用户, 绝对不能出问题。三年后, 百度的 ARM 服务器已经大规模应用。前不久笔者与脸谱公司数据中心的工程师聊天时了解到, 他们在 2011 年的时候也评估过 ARM 服务器, 但发现 CPU 是 32 位的, 需要移植大量的代码, 最终就放弃了。事实上, 从 x86-64 到 ARM-32 的移植并没有想象中的那么复杂。百度只靠一个工程师, 花了不到半年时间就完成了一百多万行代码的基础库和存储系统的移植和测试。

欧阳剑提到了“全栈式 (full stack, 从硬件到软件) 自主开发”在百度基础技术的盛行:这和国内其他公司喜欢完全使用开源方案形成鲜明的对比。这样设计主要出于几个考虑:

  • 首先, 百度业务发展很快, 基础架构必须能跟上并推动业务发展, 开源社区方案往往没办法做到这么快的迭代, 例如百度的 MapReduce 可扩展性优化比开源方案早了两年。
  • 其次, 如果只在开源方案上修修补补, 时间长了, 容易丧失做大系统的能力, 毕竟维护一个开源系统并做故障修复 (bug fix) 所需要的工程团队和工程能力, 和从头开发一个大系统所要求的能力是不同的。
  • 第三, 全栈式自主研发能真正做到软硬件协同, 从而真正达到系统最优, 而开源方案一般只关注某一个领域或系统里面的某一个层次, 很难做到系统最优。最明显的是, 百度有基于 ARM 和 SDF 的存储系统, 能做到单位存储成本最低或者单位吞吐成本最优。

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

2014-08-18 09:163121
用户头像

发布了 501 篇内容, 共 260.3 次阅读, 收获喜欢 61 次。

关注

评论

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

卧槽,接到一个阎王的需求

码农神说

程序员

用户故事为什么要关联开发数据?

易成研发中心

敏捷开发 开发数据

GrowingIO 大数据多维分析自动化测试实践

GrowingIO技术专栏

大数据 自动化测试 parewise

工厂模式(三)泛型工厂的概念以及示例代码

LSJ

Nginx 基础原理和命令行的真相

子杨

nginx 运维

基于 Markdown 的中文文档排版规范

Murphy

markdown 排版规范 GitHub GFM 物联网学前班

Server Queue 提高 QPS

风含叶

Python kafka 后端 队列

探索 Go 语言数据类型的内部实现

TuringTuring

内存模型 高效 Go 语言

架构师训练营0期开营

刁架构

架构师

从位图到布隆过滤器

王坤祥

位图 布隆过滤器

游戏夜读 | 改写图形API的意义

game1night

kudmp介绍和安装

唯爱

你有信息焦虑症吗?

Neco.W

学习 创业 知识体系

2020智源-京东多模态对话挑战赛开战 产学研联合推动AI技术发展

DT极客

我们可能都误解了什么是情商

董一凡

情绪

阿里巴巴为什么让初始化集合时必须指定大小?

王磊

Java 性能

「首度揭秘」大规模HPC生产环境 IO 特征

焱融科技

sds io 高性能 存储 焱融科技

10分钟了解Flink

代码诗人

奈学干货分享:分布式CAP实践分析

奈学教育

分布式

幂等问题及解决方案

Joker

幂等 解决方案

Weex开发:页面跳转以及Android端多应用选择窗口的处理

AR7

android Vue 大前端 跨平台 Weex

备案问题汇总

云也退

网站 备案

“Plus Token”传销主犯被公诉!警惕,区块链不是“取款链”!

CECBC

1024讲话 CECBC 区块链技术 人才发展 培训

Android 通过opencv实现人脸识别,追踪

sar

android OpenCV 人脸识别

神经网络中为什么不能将权重初始值设置为一样的值

王坤祥

神经网络 学习

Mysql常用删除方式比较

云也退

MySQL

一个在游戏行业摸爬滚打了十几年的人,为何我对这本书情有独钟

图灵社区

游戏开发 游戏制作 世嘉培训教材

Nginx 入门及命令行操作

子杨

nginx 运维

为什么你要学习 Go?

司徒公子

编程语言 谷歌Google Go 语言

ARTS_20200529

凌轩

Java ARTS 打卡计划

Cassandra可调一致性的使用及原理

老任物联网杂谈

大数据 分布式 Cassandra 可调一致性

从SDF发展看百度的基础架构技术之路_DevOps & 平台工程_崔康_InfoQ精选文章