小米首席架构师谈开源文化的建立

个人简介 崔宝秋是小米科技有限责任公司的首席架构师,小米服务器和云平台团队负责人,有十多年传统软件和互联网产品的开发经验。2000年获得美国纽约州立大学石溪分校计算机系博士学位。2000年至2006年历任IBM高级工程师和高级研发经理,从事数据库优化和内核总控等核心模块的工作。2006年至2010年任雅虎搜索技术(YST)核心团队主任工程师,参与了雅虎搜索引擎的热门搜索、查询优化和新一代查询缓存等重要项目的研发。2010年至2012年任LinkedIn主任工程师,开始接触社交网络,并负责LinkedIn搜索产品的研发,期间作为5个创始成员之一开源了SenseiDB,一个分布式实时搜索系统。2012加入小米科技有限责任公司,现负责小米服务器和云平台团队的工作。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

   

1. 大家好,我是InfoQ的社区编辑刘宇,今天非常欢迎崔宝秋来到QCon,也非常荣幸能够请到崔宝秋来给我们做一个专访,现在请宝秋先简单做个自我介绍。

崔宝秋:大家好,我叫崔宝秋,是小米公司的首席架构师,也是我们小米云平台团队的负责人,非常高兴跟大家交流。

   

2. 今天宝秋和我们分享了小米在开源路线上面的分享,我们觉得这个主题非常的不错,也受到了大家一致的好评。

崔宝秋:谢谢,希望对大家有用。

   

3. 我们就想跟您就这个方面的问题再深入的聊一下,比方说现在目前大大小小的一些公司,在开源软件的选型上面是比较困惑的,我们应该怎么样去做一些快速的选型,因为毕竟小米公司在这方面的投入比我们要更多一些。

崔宝秋:这是一个很好的问题,大家怎么选型,选什么样的软件,是决定自主开发呢,还是使用开源的,这个我觉得首先应该根据自己的业务需求,看有没有软件能够真正满足你的百分之百的需求,或者最起码百分之九十几的需求。你的需求,包括性能上的,规模上的,可水平扩展的,还是说可以掌控的程度等等,有很种因素,但主要是根据你的业务。第二就是你不管选什么,你要拿得下,要能驾驭,然后能真正掌控,不能说我随便搭个Demo、工作了就行了,将来线上有问题,压力上来了,有千万同时在线,或者几百万、上千万的日活跃,这种压力下,这个软件能不能够撑得起,有了事故以后你有没有能力、这个团队有没有能力能够解决问题,这些都是一个要考虑的因素。

   

4. 据刚才您分享的时候,有提到,在最开始在做HBase的时候,你下面的工程师团队大概投入了有多少人?

崔宝秋:刚开始我们这个真正投入HBase也就三、四个人,现在专注HBase的也就五个人,当然HDFS、Hadoop这个生态系统里面我们人稍微多一些了。

   

5. 我记得最开始的时候,时间是非常的长的,我记得是有九个月的时间投入,对吧?

崔宝秋:我现在回头看,应该是这么一个时间点,我们在2012年10月份成立了这么一个团队,我当时给了这个团队的一定的时间和空间来爬坡,学习、熟悉HBase,真正把它弄通,这个需要花一定时间。

   

6. 那对于我们其他的一些公司而言,可能没有像你开源的倡导者,或者提倡者,因此我们可能会面临着没有这么长的一个周期的一个学习期间,有可能老板会给我们的一定的时间的限制,就说我现在业务需求必须满足这个业务需求,我的时间会比较短,有可能是一个月,或两个月,并且人数可能也没有三个人到五个人,有可能就一个人,这个时候我们应该如何去面对?

崔宝秋:不是说每个选型都需要花很长的时间的,有的人力不够,确实有的团队可能就一两个人,一个人要把这个项目搞定,这种情况下,有的项目不像HBase这么大,不会说一个项目在整个公司里面的战略地位有像HBase、Hadoop生态系统这么重要,有些只是一个小的KV系统,或小的工具型的选型,那么一个人花一个星期,快速搭建一个Demo,稍微比较一下性能,你要关心的是性能能否满足你的需求,比如说latency达到20毫秒这么一个,或者几毫秒这么一个的需求,如果能达到,这个小团队,或者一个人两个人,可以是老板本人,就快速搭一个Demo,用一些数据来说话,你可以举其他公司的例子,别人已经用过的,他们的性能怎么样的,在各种QPS下,两百QPS,或者几万QPS下,性能怎么样,他们使用场景是不是跟你们公司的使用场景接近,他们公司最坏情况下会达到一个什么样的性能,最重要的是,你要根据你自己的实际使用场景做些自己的测试,压力测试也好,各种配置,维护,等等的测试,自己拿一套数据来,列一张表,来比较,这个软件跟另外一个软件,两个开源的性能怎么样的,然后如果自己开发,投入是什么样的,有这么一张表的话,你就可拿这个表,和其他一些数据,来跟你的老板讲,为什么你认为选择这个开源软件是对的。

   

7. 或者更好的。

崔宝秋:就是这么说服你老板,当然我希望每个公司都有这么一个有大的愿景,或者有长期计划的老板做决定是最理想的,如果从下往上推动,我希望小的公司团队或者小的管理者,你可以以自己的数据来说话,做足功课。

   

8. 其实我们从下往上去推动的时候,我们前期的这个准备工作是非常重要的?

崔宝秋:有时候这种做功课可能会花点时间,但是长期来看,会为公司节省成本。

   

9. 那这点是非常好的,我们一定要放长远的去看。

崔宝秋:应该有个长远的计划的。

   

10. 那么小米公司除了在追随开源脚步之外,自己也开放了很多开源软件?

崔宝秋:一些,我们刚开始。

   

11. 在我看来有很多,就是从我个人角度来看,运用工具是很不错的,包括这些新的功能,其实是很赞的,那么这些其中会有您提到的,毫无保留的commit,因为我以前就是说比较了解雅虎的Apache Traffic Server,这是一个Cache软件,从它的功能性上来讲,他是有很多代码是在开源之前有所保留的,尽管他现在已经捐给了Apache社区,但直到现在,以前在雅虎内部使用的这些非常好的功能现在也是没有公布,没有被开源,已经在陆陆续续的被阿里的工程师在逐步的去重构去写。

崔宝秋:重新实现。

   

12. 重新实现,重新开源,这个对于整个开源社区来讲,或者生态链来讲是不是有些违背了初衷?

崔宝秋:一些损失,有些可惜。

   

13. 如果在最开始开源出来,那么有可能打败了所有的这些Cache软件,因为当时真的,我使用至少有三年,那就是很早了,在那个时候Squid也好Varnish也好,等等,这还是非常的弱的,我是觉得挺可惜的,那么因此,现在小米正在走这样的一条路,那么因此就刚您提到这些毫无保留的commit,但是作为我们这些中型公司,或者小型公司来讲,我们有可能也会去开发这些工具。中国人有另外一个特性就是留一手,就说的不好听一点。我们应该怎么样去,用什么样的心态也好,或者用什么样的方式也好,去权衡这个关系或者说利弊?

崔宝秋:这个也是大家都常问的问题,首先我讲很多公司开源,把一些自主研发的软件开源出去,很多情况下,他没有百分之百地开源,也就是所谓的留一手。这个是非常可以理解的,就像我们不能要求每家公司把自己的代码全公开一样的,因为每家公司都有自己的核心技术和一些核心代码,或者有些代码它就是没有必要去公开的,没有公共的属性,没有通用性,这种情况下,首先我们不能要求别人把自己的代码,家里一些什么东西都拿出去,也没必要。第二,他们肯定要有所保留,留一些有竞争优势的东西,比如我可能要先用起来了,稳定之后,我取得了领先地位,或者过了半年以后,我已经取得市场领先地位了,我再把之前的老版本开源出去。回到这个雅虎这个Traffic Server这个例子呢,当时他们决定Open Source,我也在雅虎知道一些,肯定有这方面原因,这是我的猜想,就是一些代码没有开源出去,一个原因应该是因为有这个核心代码了,或者说他们的一些代码根深蒂固,牵涉到其他的那些代码库,很多,也可能有这些原因。

   

14. 就是不太好梳理。

崔宝秋:那些团队我觉得开源还是比较匆忙的,他们可能就会把一些公用的,或者比较好用一些东西先开源出去,这个我们应该去赞的,而不应该说你为什么不全部开源。

   

15. 是很赞的,因为给我们真的是带来很多用处,只是觉得有点惋惜,或者可惜。

崔宝秋:回到我们小米的态度呢,我认为我们小米是希望能够更大尺度的开放,就是小米会更加并非常鼓励这个共享技术,这么一种态度,一种精神,我们有好的东西,我们不会藏着掩着,更愿跟人分享,比如HBase我们有一些新的功能,对我们非常有用,解决了我们实际的问题,性能提高了三点五倍,比如写性能提高三四倍,这种情况下,我们完全可以藏着不拿出去,但是我认为这有点不太合适,因为什么?我坚信小米在某种领域领先,如手机、路由器,小米电视、MIUI、云服务等等,我们不能全凭这个技术上的一点小的先进性来领先。技术领先,技术更加先进,会保证一个公司的领先地位,但是如果一个公司纯靠这么一些技术上的一点小创新,靠这个来领先,不敢跟人分享,这个公司长远看,我觉得是没有大的前途的。所以在这点上,我们有足够的自信,我们愿意把好东西跟大家分享,也就互联网服务这些,我可以做到很多情况下毫无保留,愿意跟人分享。

   

16. 小米真的是走在我们的前沿了。

崔宝秋:我希望小米能走在前沿,靠其他的模式来创新,所谓小米模式,靠这些来创新,技术上我们是可以造福于自己,也造福于大家的,兄弟的创业公司。

   

17. 还有一个,可能也是有人比较关注的一个问题,作为一个开发者也好,平常在公司也好,那么我们有可能去使用某一个开源软件,但是在由于业务驱动的情况下,这时我们也有自己的粉丝了,因此我们会开发有一些新的Feature,但是在merge 回社区的时候,第一个可能就是不容易被采纳,当然就是你也提到了小米在HBase那块,总共提交了228个,那么其实总体上来讲,也是有一百多个被merge。

崔宝秋:有些改动是需要时间的,不是说你每提交一个改动,马上给你merge,有些是在处理过程中。

   

18. 在处理过程中,持续性的,但是其实对于个人而言,我这里是提到一个个人,个人而言,他的兴趣和爱好,很多人还是热爱开源的,那么他有些时候是提交了,但是很可能很难被社区这样去被认可,因为毕竟个人的力量和公司这种团队的力量,包括领导的支持,它的力度是限的。

崔宝秋:不可比的,很难比。

InfoQ:真的是没法比。

崔宝秋:我非常理解这一点。

   

19. 我跟有一些这种开源社区的爱好者,包括开发者去沟通的时候,大家会觉得有点小小的失落感,毕竟这种开源软件是越来越多了,我们去Follow开源软件以后,还是我们自己去开放一个工具也好,很多人可能慢慢的会逐渐的与其不被他认可,我不如自己写个小工具,我可以放在Github上,我可以放在开源中国上,这样大家很多人评论去讨论,这样至少,我能得到一个安慰,鼓励着我,我继续向前进。

崔宝秋:也可以,如果你的贡献没被一个大的开源社区接受,你可以Github给大家,你可以创建自己的一个代码库,或者自己创建一个一个新的分支,就把它放进去,如果有人对你的代码感兴趣,觉得有价值,自然有人,自然而然地向你要,来从你的分支上面再创立更多的分支,你的分支将来变成一个主分支了,变成trunk都有可能,只要你的贡献有价值。

   

20. 那么对于开发者而言,可能后续您更加推荐走这种方向?

崔宝秋:这就是我刚才在分享中我也提到过了,确实,你讲的一个人以个人的力量打入社区,融入这个开源社区,让开源社区的人接纳你的Patch刚开始可能会是一个比较艰难的过程,首先别人为什么相信你?有点像单个的这些贡献者,很可能有成百上千,几十万,或者几百万的在这个社区里。他们怎么知道你不是一个散兵游勇,打一枪换一个地方,只是三分钟热度,最后你提交了代码也不维护,有问题你也不回答,别人改进的意见你也不理,你从此消失了?这种情况都有的,所以作为这个开源项目的负责人,他会非常谨慎地来评估这个人靠不靠谱。除非他觉得,一看改动非常大,性能非常好,一看就是一个高手、一个经过很多深思熟虑的一个技术牛人进来的提交的Patch。大部分情况下,他还看不出来,他只能通过长时间的来跟你一些交流,直到你在圈里面混的,时间长了,混得脸熟了,这句话我老讲,混个脸熟,这个大家才取得相互信任,你才能进去,个人需要长时间的involvement,长时间的融入才可以达到你的目的,你想提交,你想贡献,你想把自己的代码让更多的人用,你的成就感,你想让这些代码跑在比如多个机器上,多个服务器上,你这种所谓热爱开源的成就感得以实现,最好的情况下是你背后有一个大的团队去支持你,这个团队往往来自一个比较有规模的公司,像硅谷那些大的互联网公司,他们在推动这上面比较有成效,也主要是因为这个原因,Facebook,雅虎,LinkedIn,Google这些大的公司,他们推动起来就比较快,像Cloudera,Hortonworks这些公司,他们有一帮committer进去,大家拧成一股绳,互相讨论一下,每一个Patch都有含金量的,他们永远站在技术的最前沿,方便一些,所以在国内我希望小米公司也能这样。当然我们每个个人,每个工程师要能力很强,另外一方面我从公司层面,我也希望把公司的长期的投入展示给开源社区,让他们知道我们这个团队不仅力量强,而且有这么一个长期的规划,长期的投入,有与这个开源社区一起成长的一个愿景,这样会有帮助。

   

21. 以后小米有没有可能也会去推动国内这些开源爱好者这种个人,一起去构建这个生态链的方式?

崔宝秋:这也是一个很好的建议,我们确实也讨论过,当然小米现在发展特别快,也刚起步,还是比较年轻的一个创业公司,很多方面还不是很完善,我希望在不久的将来,我们会有自己的小米的开发者大会等等之类的,或者说跟其他兄弟公司一起组建开源社区,让中国的开源爱好者一起有一个交流的平台,合作的平台,如果一个公司不容易打入国际的开源社区的话,那么几家公司联合起来是不是就可以达到?我认为我们中国工程师已经到了一个地步,我们有大量的优秀的工程师,在中国大陆绝对有能力组团,或者捆绑起来一些力量影响开源软件,为开源软件这个巨人指些方向,尤其在移动互联网领域,我们中国还是有希望。

InfoQ:我们也非常期望这天的到来,非常感谢宝秋能接受今天的采访。

你可能感兴趣的:(小米首席架构师谈开源文化的建立)