黄东旭:创业不如写代码惬意

个人简介 黄东旭,PingCAP 联合创始人/CTO, 资深 infrastructure 工程师,擅长分布式存储系统的设计与实现,开源狂热分子,著名的开源分布式缓存服务 Codis 的作者,对于开源文化和技术社区建设有独到的理解。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、上海、旧金山召开。自2007年3月份首次举办以来,已经有超万名高级技术人员参加过QCon大会。QCon内容源于实践并面向社区,演讲嘉宾依据热点话题,面向5年以上的技术团队负责人、架构师、工程总监、高级开发人员分享技术创新和最佳实践。

   

1. 黄先生您好,首先我们来一个轻松的问题,聊一下您对QCon2016的感受。

黄东旭:其实我已经是QCon的常客,前几年InfoQ、QCon还有Archsummit都会来参加。但是以前都是作为参会者,这次是第一次以讲师的身份过来。给我最大的印象是你们一年比一年好。因为我之前参加社区的会比较多,明显QCon给我的感觉就是非常高大上。

   

2. 在很多社交媒体上看到您的自我介绍,其实是不一样的,比如说在新浪微博和推特上。我个人比较好奇,现在你能重新介绍一下自己吗?

黄东旭:我很小就开始写程序,小学二三年级就开始用 basic来写程序了。一直以来非常喜欢open source、hacker的文化,其实我一直给自己的定位都是软件工程师,不管在什么职位上。从软件工程师开始到架构师,现在在PingCAP做CTO,一直以来我每天都有很多的时间写代码。可以这么说,我个人是一个很喜欢写程序的人。总体来说,我觉得在国内像我们PingCAP有这种hacker气质的公司并不是太多,我觉得我过去的经历和受到硅谷这边文化的影响,影响了PingCAP公司的性格,总体来说,我就是一个很喜欢写程序的人。

   

3. 你享受写代码。

黄东旭:对,享受写代码这种造物的过程。

   

4. 谈到PingCAP,这是一家本土为数不多敢走纯粹开源路线的公司,我们本来是可以选择闭源的,你为什么要这么做呢?

黄东旭:我觉得在基础软件领域,开源是唯一正确的商业模式。因为开源是一个更好的软件分发方式,对于基础软件来说,你不应该闭源,如果你选择闭源的方式,你就需要构建很大的sales团队去touch你的客户,客户有痛点找不到需求,需要等着你的销售团队去找他们。但是如果你选择了开源,反过来是会让他们带着需求到社区找到你,你可以touch到更大的痛点或者是需求,甚至对于他们的特殊需求有一些自己的修改,还能反哺到社区里面。因为基础软件并不是像专业软件有太多的领域支持,只有当你的影响力和社区足够大的时候才能发挥更大的价值,不要重复造轮子。因为刚才也说了,我从小是受open source这种文化熏陶很久的人。基本上我做的所有的东西都会开源。包括之前在豌豆荚做的分布式缓存Codis也完全是开源的方式来做,一是个人喜好,二是商业上的一些想法。

   

5. PingCAP的开源品牌模式,比如有很多开源商业公司在项目、品牌和产品上,有的是三者一致,有的是两两一致。我们PingCAP是选择了项目和产品一样。公司的核心产品是TiDB,项目和产品都叫这个名字,公司叫PingCAP,这对于初创来讲他的品牌开销是很大的,你们是怎么考虑的呢?

黄东旭:我先简单解释一下PingCAP这个名字的含义,CAP是分布式系统里面著名的定理,就是CA、CP、AP三个特性你只能满足两个,不能满足三个。自从谷歌把他们的Spanner和F1论文发布出来以后,业界说CAP理论好像可以达成了。但其实并没有达成,它是C,HA跟P,我们的野心不仅仅是想做一个数据库。目前来说OLTP分布式的管理型数据库,它在整个数据膨胀时代,单机的数据库是没有办法搞定的。但是我们可以通过这个切入点把分布式的solution在OLTP场景了里面落地,未来我们肯定会选择在上面接入其他的像search,像分布式文件存储,把整个上下游构建起来。你的产品如果跟你的公司完全绑定在一起,对未来是把自己的路限的太死,可能有这么一个打算。

   

6. 我们的项目是直接托管github,当初你们有没有考虑像apache孵化,linux基金会等等,为什么选择了自我建设。

黄东旭:我们当初认真考虑过这个问题,甚至当时我们都已经差不多联系到Apache基金会的人,希望能把这个项目放在Apache里面做,但是后来我们是自己掌控这个项目的状态。最核心的原因是这样的,因为捐给apache基金会有一个问题就是你所有的工具,你讨论的形式和邮件组都需要在Apache基金会里面运转,它会给你指派项目委员会的负责人,以及项目的一些工具都需要用Apache基金会那一套。 我们觉得一个项目的早期,你需要快速的迭代,很多的决定不应该浪费在社区的讨论当中,可能就是民主跟集中的阶段的选择,早期我还是更偏向于集中式的快速的小团队的开发。因为在项目早期,你很难吸引一大波社区开发者进来,你只能通过内部人员快速的迭代先把这个项目做起来,做到一定的程度,这时候你再选择加入Apache基金会也好,linux foundation也好,对你的项目走向海外或者上另外一个新的台阶的时候,你再去考虑这个事情。其实我们有想法在项目要去海外的时候放到Apache基金会里面去,这算是一种市场PR的手段或者让海外社区更容易接纳你的方式。但是我觉得在早期还是以项目本身为主。Github确实很好用。

   

7. 我们回归到本土,本土的文化环境,它是比较不适应开源项目和公司的成长,关于这点你找到了什么秘诀吗?

黄东旭:我们之前也运营过Codis这个开源项目,国内的社区给我的感觉是这样的,因为随着整个互联网快速发展,硅谷的顶级工程师跟国内互联网顶级工程师,他们的水平并没有差多少。但是缺乏的是对于社区的反哺,我可以拿来用你的东西,而且我用的很好,我内部也改了很多,我明明可以贡献,但是我很难把自己的东西share出来,我觉得这个是比较缺乏的。所以在中国做我们采取的并不是从草根出发的方式,现在京东跟华为都有全职的工程师在我们的项目里面提交代码,他们更像是公司内部有需求,我们也是touch他们从上往下推进这个项目,让他们参与进来。而不是说纯粹的是一个业余时间草根的开发者行为。在国外可能更多的是一种自底向上,在国内社区你可能需要自上而下推进。

但是我觉得情况会越来越好,随着中国开发者的水平提高以及和硅谷文化的交流,我觉得会有一天你会看不出到底哪个项目是中国孵化的,哪个是美国孵化的。我们中国有信心可以做到全球级的顶级开源项目,我觉得像TiDB已经迈出很好的第一步,我们发布的时候引发了国内外社区很多的讨论。摆在中国开发者面前比较大的问题就是语言的问题,因为社区是一个重沟通、重交流的人与人之间活动的平台,你永远都是在自己的华人圈子里面或者是中文圈子里面,你很难让世界知道你。我觉得这个是国内工程师或者是国内社区的一个问题,太害羞了,很难把自己放开跟老外去PK。这个我觉得还好,我相信中国人的技术水平的能力已经到了,接下来就是不要这么害羞。

   

8. 你是非常热衷于分享,你是不是在PingCAP团队中也比较提倡分享,有没有把这一点加入到社区建设的规划当中呢?

黄东旭:我们非常希望能把这种精神在国内推广开来,我们公司每周六都会有一个开放的数据库技术的meetup,会邀请社区里面或者是所有对nosql技术感兴趣的人过来一起讨论,我们去分享技术。我觉得分享并不意味着你的东西被别人知道了,你就完了。我觉得这个市场或者说这个社区是大家越做越大的,而且参与的人越多,对各方是双赢的事情。我并不认为你把一个很好的东西藏着掖着是一个很好的事情,我们非常喜欢把我们所有的技术全都开放给社区,把社区给带起来。

   

9. 开源现在变的越来越重要,难点在于找到contributor,这一点你是怎么做的,将来有什么打算呢?

黄东旭:现在我们的项目核心开发者大概1/3是来自我们公司的人,另外是一些大的公司,比如说刚才提到的华为和京东,他们有一些很强的工程师,也是全职在我们这边。但是比较遗憾的是,草根开发者必须得把他们聚集起来才会有规模的效应。对于开源项目来说,我觉得很重要的是人数不在多,一定要精。并不是说像很多项目,contributor有成千上万人,但是其实很多是提交了一行代码就走了或者改了一个readme就走掉了,当然这个也是很好的参与的贡献,但是核心的contributor并不宜太大,这一波核心的contributor应该是你自己培养起来或者去线下找到,跟他们一直在沟通,知根知底。算是一个精英核心小团队,这样的形式可能更好。而不是说你要把contributor的面铺的特别大,因为沟通成本也是很大的成本。所以我个人的感觉更偏向于主动出击,找到对这个项目非常感兴趣的人,把他拉进来。

   

10. PingCAP创建一年多了,跟你原来的职业相比较,你本人有哪些变化呢?可以举例说明一下。

黄东旭:因为我原来就是一个一天一定得写十个小时以上程序的人,现在我一天能抽出50%的时间写代码就已经很不错了。创业以来,对我最大的感受,就是杂事太多了,你能真正去写代码的时间太少了,未来公司再大一点或者是走上正轨以后,我还是很想回去写代码的,现在的事情太多了。

   

11. 最后问一个技术问题,在google的F1架构中我们看到了分布式文件系统的影子,但是我看TiDB没有看到后面有文件系统,而是使用的分布式的key value数据库,当初是怎么考虑的呢?

黄东旭:在Spanner的paper里面,它已经提到了,spanner的下一层目前是依赖谷歌的分布式文件系统colossus。在论文里面提到其实colossus对于spanner来说并不是一个必要的组件,在论文里说把它的依赖去掉是一个优化的点。因为colossus只是用来存储spanner的一些冗余的日志信息,它本身对数据的分布还是通过paxos的replication的方式来做数据的存储,它并不是强依赖的。

所以我们在做设计的时候,因为我们是从零开始写项目的,并没有像谷歌那样有一个历史负担。所以我们就选择一个更好的方式来实现,而且在系统里面,少一层分布式文件系统,意味着你RPC调用栈又少了一层,整个性能会更好一些,大概就是这样的。

InfoQ:非常感谢你接受InfoQ的采访,谢谢你。

你可能感兴趣的:(黄东旭:创业不如写代码惬意)