专访阿里巴巴研究员赵海平:从Facebook到阿里巴巴

标签: 阿里巴巴 研究员 facebook | 发表时间:2015-04-02 13:11 | 作者:
分享到:
出处:http://news.cnblogs.com/

赵海平,2007 年加入只有不到 50 个软件工程师的 Facebook,致力于软件性能和架构分析,在此期间创建了 HipHop 项目,重新编写和实现 PHP 语言,使其速度提高 5 到 6 倍,为公司节约数十亿美元。HipHop 项目之后,致力于“用异步处理来优化分布式系统”的设计理念中,并为此做了多项分布式数据库的优化研究,在 PHP 语言中加入了 yield 和 generator 的新功能,来帮助日趋复杂的 Facebook 网页设计。

2015 年 3 月,他回到中国,加入阿里巴巴技术保障部,任职研究员,将重点攻克阿里巴巴在软件性能以及 Java 使用过程中遇到的技术问题。

InfoQ :首先欢迎您回到中国。可以介绍一下您加入阿里巴巴的初衷吗,阿里巴巴最吸引您的地方在哪里?

赵海平:去年机缘巧合,我和阿里巴巴的同事有了交流的机会。当时我们聊了很多技术细节,发现阿里巴巴的规模非常之大,很多技术上的难题是美国公司都没有的。比如说双十一这个问题,没有哪家美国公司单天有这么大的交易量,这是很特殊的一个问题。这个技术问题对我特别有吸引力。

当规模大到一定程度,简单的问题也会变得复杂。有的时候软件就是这个样子,在一台或者几台机器上执行是一个情况,当机器多到一定程度时,对软件的要求就特别高了。在多台机器上,怎么才能保持很快的速度,并且节省机器,又不出问题,这是一个很难的技术问题。

单天的资源需求是平时的好多倍,怎么计划机器,让峰值最高的那天不出现问题,平时又要做到很好的利用,这是很不容易的。我特别希望自己能够有这么一个经历,去阿里巴巴解决这个问题,这是在其他公司找不到的技术问题,而且跟我很对口,我一直在做的都是怎么提高大规模系统的性能、稳定性,所以这正是我的兴趣所在。

InfoQ :您在阿里巴巴的新角色就是解决这些基础设施的性能问题?

赵海平:基本上是几个方面,性能、稳定性、容量、架构,还有运维,恰恰就是我现在这个团队——技术保障部——的工作。性能提升上去,容量就增加了,随着我们监控系统的改进,系统的稳定性也会提高,运维也会更方便。如果发现架构上的问题,我们也会做些调整。

InfoQ :谈到性能问题,定位是很关键的一点。像这种规模的分布式系统,如何实现全系统的监控,准确定位问题就非常重要,您会在这方面发力吗?

赵海平:Profiling 特别重要。如果能有一个特别强大的 Profiling 系统,就知道整个系统在哪个地方,哪台机器上,花了多少 CPU、内存、磁盘 IO 或者网络带宽等资源,才能知道优化什么地方效益最大。

所以我的第一步工作就是帮助完善阿里巴巴的监控和 Profiling 系统,希望能够很清楚地把软件的整个性能展现给大家,做到实时监控,同时让研发人员看到自己的代码在线上的运行情况,了解这些代码花掉了多少资源,这样有问题的话他们可以自己解决。

InfoQ :大家对您的最初印象多是来自 HipHop for PHP 这个项目。像淘宝之前就从 PHP 切换到了 Java,而 Facebook 选择了自己改进 PHP。可以谈一下这个项目吗,当时的出发点是什么样的?

赵海平:HipHop 也是一步步慢慢建立起来的。最初是我遇到了一个 PHP 的函数,在 C++ 里也想用。当时想,重写一下就可以。不过那个 PHP 函数不断在变,我就想写一个简单的工具,把这个函数转换成C++,这样就可以跟上 PHP 代码的变化。那时正好机器开始吃紧,大家意识到 PHP 的速度问题,CPU 消耗很大。大家就开始讨论如何提高 PHP 的性能。当时想法很多,有人想改变 PHP 本身,有人想干脆用 Python 或 Java 重写网站。

当时也重写过,有三四个人在做这件事情,但这些人改的速度远远赶不上另外二三十人写新 PHP 业务代码的速度。所以我们就想到写一个工具,来转换这些新写的代码,既不干扰既有的开发节奏,又能大幅优化性能,跟上变化。

当时我也读了下 Zend Engine 的代码,研究 PHP 为什么会慢。发现 PHP 速度之所以慢,是因为有很多的函数调用是动态的,而像C和 C++ 里,很多函数是静态调用,不需要在执行的过程中去查询函数指针在什么地方,所以速度才快。

所以我们做了很大的调整,一定要改变这种方式,争取让所有的函数调用都能尽快实现,在编译的时候静态处理,执行的过程中就不需要再查询,指针已经在那儿了,这是最主要的加速思路。

那时候就萌芽了一个想法,如果能够把 PHP 直接转换成C++,也许这个性能问题就解决了。然后就花了很多时间去做原型。我们做了很多工作,把底层的 PHP 实现都改变了,有一个自己的 Runtime Library,再就是一个 PHP 的扩展库,这个实际上是很大的一块代码。在这个上面,我们又写了一个把 PHP 转换成 C++ 的一个编译器。先将 PHP 编译成C++,然后靠底下的这个库实现功能。这是最早期的工作。

不过这在当时只是一个副业,因为不知道这个东西到底有没有意义,是不是能提高性能。大概能拿出 30%~40% 的时间做这个。做完之后发现效果很好,就加入了其他同事一起做。后来速度不断提高,第一年提高了 2 倍,第二年又提高了 2 倍,后来提高到5~6 倍的样子。

现在回头看,如果当时雇很多人把网站改成 Java 的,也是可以做到的,但 Facebook 的发展可能要停半年到一年时间,甚至更久,就有可能对 Facebook 的发展带来不可预期的影响。这件事情主要还是业务推动的。

InfoQ :后来 HipHop 发展成 HHVM,从原来的静态编译变成了动态的 JIT 机制,您也参与了这方面的工作吗?

赵海平:引入 HipHop 之后,我们也有自己本身的一些问题,比如产品环境和开发环境就是不一样的,这样多多少少会存在一些问题,也就容易出现 bug。再就是 Facebook 的代码量非常庞大,编译时间非常长,另外生成的二进制文件也非常大(超过 1G),发布也很困难。

这时就出现了 HHVM。HHVM 不再是把 PHP 转换成C++,而是采用了一种新方法,把 PHP 转换成一个中间码,这个中间码在执行过程中再转换成机器码,不过调用的还是我们原来为 HipHop 写的底层库,它取代的主要是把 PHP 编译为 C++ 的过程。

我并没有参与 HHVM 的编写,当时我已经离开这个小组了,另外一件事情吸引了我,这就是异步处理在分布式系统中的优化作用。

之所以离开这个小组,原因大概有几个方面:一个是,个人认为 HHVM 不再能把性能提高更多了,后来也确实如此,两三年之后 HHVM 出来,速度并没有更大的提高,最高只比原来静态编译机制快 10%~15%,而且是因为静态编译这一块不再开发了。再就是新的课题特别有意思,具体我会在 QCon 北京上分享。

这就是为什么去 GitHub 上看,HHVM 里面会有我的代码,主要是底层的代码还是基于 HipHop 的。HHVM 的头两个字母就是来自 HipHop,引擎还是原来的,不过上面做了很多工作,把 PHP 转换成中间代码,这个有点像 Java 的 JVM。这样的好处就是研发过程和产品过程其实是一样的,而且不会有原来说的那种超大二进制文件的问题。中间代码很小,PHP 可以直接发布到线上系统上。

InfoQ :国外一些著名的互联网公司,在性能调整和优化的过程中,慢慢都发展出了自己的编程语言,像 Facebook 设计了 Hack 语言,Google 有 Go 和 Dart 等语言,Apple 有 Swift 等。这方面您有什么感想吗,Facebook 的 Hack 语言您是不是参与设计了?

赵海平:Google 的 Go 语言挺有意思的,写得非常好。Hack 语言我没有太多的参与。

PHP 是弱类型的,这是性能提高的一个瓶颈,而强类型的话就可以做很多优化。最初我们是想增强 PHP 的类型系统。强化数据类型,这是引入 Hack 的一个主要因素。

InfoQ :PHP7 最近也有很多改变,性能提高也比较大。

赵海平:这也是我临来之前刚刚听到的。PHP 核心开发组的力量是很强的。我也跟他们的人员交流过,他们对整个 PHP 的优化有自己的思路和想法,也做了很多工作。这是件好事。其实重要的并不是说哪个团队或小组把 PHP 优化到什么样的地步,有几个小组都在做这个事情,彼此竞争,会促进整个 PHP 生态系统的发展。这种竞争也恰恰说明了 PHP 的重要,所以会有很多人关注它的性能优化。

InfoQ :您对公司发明创造自己的编程语言怎么看?

赵海平:编程语言这个问题,我说两点。第一,不能把语言当成一个特别神圣、至高无上的东西。语言也是整个软件系统的一部分,只是它分割的很好,独立出来了,可以执行更多的功能,我们可以用它实现我们的功能,可是在整体架构上看,语言也只不过是软件系统的一部分,而这一部分我们完全可以做一些调整,使其更适合我们的系统。而设计语言时一般考虑的是比较通用的目标,我们拿来用,只是因为它的绝大部分特性都是我们想用的。比如我们用C和 C++ 写程序的时候,每次都要思考内存的模式是什么,是不是用 share pointer,是不是用自己写的 Object,内存的 allocation/deallocation 怎么做,一个语言帮我们把这些事情都做好了,这就是它的好处。它提供了一个很大的库,提供了一个软件执行的环境和范围,而这正是我们选择语言的初衷。

第二,作为一个公司来讲,不能说为了研发一个语言而去研发一个语言。这是没有意义的。一定要根据自己想要做的事情,在现有的软件架构当中,我们发现当前所用的语言提供的环境和范围不太适合,或者说这个语言的很多假设和假想,和我们所期待的东西并不一样,只有在这个时候,我们怎么也找不到一个合适语言的时候,我们才会创造一个新的语言,让这个语言更适合公司的事情。如果可以通用化,提炼出来,那就是语言,否则设计成软件库就可以了。

这是水到渠成的,不要强求。像 Google 开发 Go 语言,我认为它有自己的考量,可能在开发很多分布式系统的时候,现在的语言写法上不太直观,或者速度不够快,所以才创造了这么一个东西。Go 应该能解决公司内部的很多问题,否则是很难存活的。

InfoQ: 您可以结合自己这些年的经验,给中国开发者的成长一些建议吗?

赵海平:在美国的时候,我跟 Facebook 的中国员工聊的很多。我给他们最多的建议就几条。

第一,一定要提高交流能力。咱们中国人,尤其是中国搞计算机的人,很多人有个不该有的特点,就是喜欢把自己锁在黑屋子里埋头干活,跟机器交流特别擅长,跟人的交流一窍不通。这样不行,我相信在中国也是这样的,你不但要把自己的工作,技术活要做得特别好,而且要擅长表达自己的想法,擅长在工作当中讲述做的是什么,怎么样能够说服别人,怎么样能够跟别人在不伤和气的情况下,把问题解决好,这是很强的一个能力,而这个能力不是在学校里能学会的,是我们走向社会之后慢慢学到的东西,这个我恰恰认为中国的员工,尤其是在美国那样的环境,因为不是母语,可能处理得就不是特别好,有时说出来的话比较生硬,给对方的感觉不是特别好。

第二,中国人比较谦虚、内敛,讲究内涵,自己心里有的东西不表达出来。但是在工作中,可以适度强势一点,勇敢表达自己的想法。当然这个建议是基于美国多元文化的背景,在国内大家的文化背景一致,也许可以探讨最合适的沟通方式。

第三,掌握好英语,开拓眼界。我觉得在计算机这个技术里边能够非常了解英语,把英语的这个隔阂给去掉还是非常重要的。

我回来的时间还不长,等和大家接触多了,可能会有新的想法,目前就这几点吧。

本文链接

相关 [阿里巴巴 研究员 facebook] 推荐:

专访阿里巴巴研究员赵海平:从Facebook到阿里巴巴

- - 博客园_新闻
赵海平,2007 年加入只有不到 50 个软件工程师的 Facebook,致力于软件性能和架构分析,在此期间创建了 HipHop 项目,重新编写和实现 PHP 语言,使其速度提高 5 到 6 倍,为公司节约数十亿美元. HipHop 项目之后,致力于“用异步处理来优化分布式系统”的设计理念中,并为此做了多项分布式数据库的优化研究,在 PHP 语言中加入了 yield 和 generator 的新功能,来帮助日趋复杂的 Facebook 网页设计.

阿里巴巴的零知识证明

- 见涛 - 科学松鼠会
战争中你被俘了,敌人拷问你情报. 你是这么想的:如果我把情报都告诉他们,他们就会认为我没有价值了,就会杀了我省粮食,但如果我死活不说,他们也会认为我没有价值而杀了我. 怎样才能做到既让他们确信我知道情报,但又一丁点情报也不泄露呢. 这的确是一个令人纠结的问题,但阿里巴巴想了一个好办法,当强盗向他拷问打开山洞石门的咒语时,他对强盗说:“你们离我一箭之地,用弓箭指着我,你们举起右手我就念咒语打开石门,举起左手我就念咒语关上石门,如果我做不到或逃跑,你们就用弓箭射死我.

[原]阿里巴巴B2B搜索学习

- - 文武天下
主搜索:商品搜索、商家搜索、采购搜索、app搜索. 行业搜索:淘货源、淘工厂、聚好货、主题市场、品牌馆等. 由于用户多,需求强烈,收益大,所以功能、场景、架构做到极致高效. 代码复用性强:基础通用功能进行组件抽象化. 组件通用性好:一些组件或者组件进行组合的服务,适用更多场景,支持更多功能. 转化效果好:算法做的比较深入、细致.

阿里巴巴开源项目: 阿里巴巴去Oracle数据迁移同步工具

- - agapple
   08年左右,阿里巴巴开始尝试MySQL的相关研究,并开发了基于MySQL分库分表技术的相关产品,Cobar/TDDL(目前为阿里云DRDS产品),解决了单机Oracle无法满足的扩展性问题,当时也掀起一股去IOE项目的浪潮,愚公这项目因此而诞生,其要解决的目标就是帮助用户完成从Oracle数据迁移到MySQL上,完成去IOE的第一步. .

阿里巴巴高层震动的扯淡

- chenqj - It Talks--上海魏武挥的博客
这是真扯淡了,完全就是写博客,没有什么中心思想,想扯哪里扯哪里. 国内外有两家公司,遥相呼应地都非常强调所谓“价值观”,外有谷歌,内有阿里. 谷歌上市时,可以挑战华尔街的规矩,阿里上市时,则创下当时一批IPO的新高. 故而,这两家公司都是一时的翘楚,属于“从优秀到卓越”的公司. 公司是非常象一个宗教组织的——或者这么说,“好”公司都得象宗教组织.

阿里巴巴集团股权结构图

- telefan - Finacial Planet China 中国投资专家博客集
雅虎SEC文件原文是:“为了尽快获得一个重要牌照,阿里巴巴集团旗下在线支付公司支付宝已经被重组,其100%流通股现由阿里巴巴集团CEO马云控股的一家中国公司持有. 阿里巴巴集团管理层、主要股东雅虎和软银参与了有关支付宝重组条款的详细讨论. 收起 | 查看大图 | 向左转 向右转.

TradeSparq:阿里巴巴+Linkedin的采购网站

- anger - 互联网的那点事...
为什么人们会在Linkedin注册. 其中一个原因在于,他们想和他们的同伴(卖家或者买家)保持联络. 那么阿里巴巴这些年又是为什么这么流行呢,是因为它让国外用户很容易的找到数以千计的中国商品. 但是,你在Linkedin上,通常并不知道你联系的公司实际销售的是什么产品;而在阿里巴巴,如果你是一个制造商,想要推广自己的产品通常需要支付高昂的会员费(供应商会费一年3012美元).

马云给阿里巴巴员工的公开信

- Alex - cnBeta全文版
董事会已经批准B2B公司CEO卫哲、COO李旭晖引咎辞职的请求,原B2B公司人事资深副总裁邓康明引咎辞去集团CPO,降级另用. 几个月前,我们发现B2B公司的中国供应商签约客户中,部分客户有欺诈嫌疑. 而更令人震惊的是,有迹象表明直销团队的一些员工默许甚至参与协助这些骗子公司加入阿里巴巴平台. 大家已经看到了公司的公告,董事会已经批准B2B公司CEO卫哲、COO李旭晖引咎辞职的请求,原B2B公司人事资深副总裁邓康明引咎辞去集团CPO,降级另用.

TechCrunch:阿里巴巴收购雅虎很划算

- David - cnBeta.COM
知名科技博客网站TechCrunch昨天载文称,从财务方面来看,阿里巴巴收购雅虎是很划算的,非常明智. 阿里巴巴CEO马云今天在斯坦福大学演讲时表示,该公司有兴趣收购雅虎. 从表面上来看,马云正是雅虎在后巴茨时代所需要的CEO类型:擅长与外界沟通、精明、相对寡言少语.

阿里巴巴Dubbo分布式服务框架已开源

- tangfl - ITeye论坛最新精华讨论帖
Serving services with invocations everyday, Dubbo becomes the key part of Alibaba's SOA solution and has been deployed to the whole alibaba.com family:.