与开源同行:揭秘PingCAP七年创业实践

978-7-115-59380-1
作者: 平凯星辰
译者:
编辑: 夏琰
分类: IT人文

图书目录:

详情

本书融入了PingCAP公司在开源领域的七年探索经验,以及在分布式数据库领域的研究成果,对开源的历史发展、分布式数据库的变迁演进、TiDB的框架设计、应用实践以及开源与商业化的连接进行了深入剖析。 开篇首先以PingCAP公司的创业故事为主线,讲述公司为何选择开源作为核心战略,以及主要产品TiDB的研发、运营和国际化历程。然后介绍PingCAP在成长为国内开源厂商的探索者的过程中,在技术路线选择和社区生态中的重要贡献和发展经验。最后介绍了PingCAP对未来基础软件的技术、开源趋势的思考与展望。全书以从参与者到贡献者再到探索者的视角,细致而全面地讲述了关于开源技术和开源文化对于当代技术驱动型企业的生存与发展的重要意义和影响。 本书适合所有技术驱动型的企事业成员,以及正在学习、已经从业或有志于投入IT产业的广大读者阅读。

图书摘要

版权信息

书名:与开源同行:揭秘PingCAP七年创业实践

ISBN:978-7-115-59380-1

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

版  权

著    平凯星辰

责任编辑 夏 琰

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

本书融入了PingCAP公司在开源领域的七年探索经验,以及在分布式数据库领域的研究成果,对开源的历史发展、分布式数据库的变迁演进、TiDB的架构设计、应用实践以及开源与商业化的连接进行了深入剖析。

开篇首先以PingCAP的创业故事为主线,讲述公司为何选择开源作为核心战略,以及主要产品TiDB的研发、运营和国际化历程。然后介绍PingCAP在成长为国内开源厂商探索者的过程中,在技术路线选择和社区生态中的重要贡献与发展经验。最后介绍了PingCAP对未来基础软件的技术、开源趋势的思考与展望。全书以从参与者到贡献者再到探索者的视角,细致而全面地讲述了开源技术和开源文化对于当代技术驱动型企业的生存与发展的重要意义和影响

本书适合所有技术驱动型的企事业单位成员,以及正在学习、已经从业或有志于投入IT产业的广大读者阅读。


推荐序1 人人可以受益的开源

我在拿到《与开源同行》书稿后,仔细阅读了一遍。对于开源文化,我也有话想说,所以欣然同意为这本书写点什么。

我觉得这本书至少对于以下四类读者都是开卷有益的。

第一,对于数据库的学习和研究者。TiDB是国产数据库的新宠,特别是在国际开源数据库市场上更是有亮眼的表现。尽管这本书不是讲TiDB的技术实现的,但是散布在全书中的关于TiDB数据库的缘起和发展的故事,关于产品不同版本之间的演化,关于产品架构的设计考量等内容都是很有价值的。TiDB从一开始就被设计成一个“分布式”的产品,工程师们按照“解构”和“松耦合”的理念来构建数据库系统,围绕客户追求数据价值变现的真实需求,坚持“真实场景是最好的架构师”的理念,打破传统数据库系统的固有逻辑,将TiDB打造成了一个能为客户带来价值的产品。

第二,对于想做开源产品的技术发烧友和开发者。TiDB创业者们的很多观点特别有价值。比如,做开源首先要解决信念问题,没有坚定的信念是做不好开源这件事情的。无论是自由软件的创立者理查德·斯托曼,还是Linux内核的发明人莱纳斯,都是靠信念走到今天,改变了整个软件产业的格局。其次,要拥有一颗“冠军心”,也就是要将产品做到极致,中国新一代创业者的这种自信让人欣慰。实现中华民族伟大复兴的事业需要的就是这种以实力为基础的自信和以成果为证据的创新能力。再次,做产品要有“场景洞见”的能力,也就是从领先的需求中预见领先的场景的能力。最后,要充分认识到做产品,特别是做基础软件,“复杂性是真正的敌人”,找到对抗系统复杂性的方法显得尤为重要。这样的金句书中比比皆是,值得我们去细细品味。

第三,对于想以开源产品为依托的创业者。开源产品的生命依托于社区,开源社区由产品、用户和贡献者组成,三者组成了一个不断循环转动的“增长飞轮”,涵盖开源活动的整个生命周期,其核心是“开发者”的成长和荣誉体系。“开源最重要的门槛不是代码,而是一个个积极参与的人”。因此,开源社区要重视人才的挖掘和培养。PingCAP举办的Talent Plan(“人才计划”)以及黑客马拉松活动,为自己也为社区培养了一大批优秀的人才。开源项目的发展还要跨越发展道路上必然会遭遇的“死亡之谷”,创业者对此要有足够的认知和应对措施。这些对开源产品的认知和实践都是创业者的宝贵财富。

第四,对于想了解开源文化,或者想以开源的方式推进某些事业的人。PingCAP公司的成功给我们提供了一个很好的范例。“开源最引人入胜的魅力在于它消弭了一切不必要的边界”,开源文化已经不仅仅局限于软件开发,在数字时代,类似开源社区的组织具有不可限量的影响。开源文化是一种共创文化,它甚至会给数字时代带来一场开放革命。最近我在组织教育部数据库系统虚拟教研室的工作,这是教育数字化转型的重要实践。我们提出了一个“八字方针”,其中第一个原则就是“开放”,要用开源的模式、开源的文化、开放的社区来组织虚拟教研室。这本书对我们进一步做好这件事有很多的启发。

我与PingCAP的缘分是从中国计算机学会数据库专业委员会的VLDB (Very Large Data Base,数据库领域顶级会议之一)暑期学校和PingCAP合作开始的,对此书中也有介绍。那是我第一次到他们位于北京的总部访问。企业简约的环境设计和接待文化,给我留下了深刻的印象:不讲究形式,直入主题。刘奇先生话不多,但是稳重刚毅;黄东旭先生侃侃而谈,他对于数据库系统的一些理解我是高度认同的。后面的合作很愉快,尽管受到新冠肺炎疫情的影响,我们还是在2022年初的农历春节前在“温暖如夏”的海口成功举办了为期一周的2021年VLDB暑期学校。这也是VLDB暑期学校近20年的历史上,第一次与企业合作。在企业的技术支持下,本次暑期学校以分布式数据库事务的实现技术为研究对象,以专家讲课、工程师指导和学生动手实践相结合的模式组织,其效果得到了数据库专业委员会的专家和参与学习的众多同学的高度认可。2022年的VLDB暑期学校将继续由PingCAP提供技术支持。

祝愿PingCAP越办越好,祝愿TiDB能发展成为大数据时代的世界级基础软件产品。

中国人民大学教授 杜小勇

2022年5月于北京

推荐序2 编程就是为了让世界变得更有趣

我从2011年开始云存储方向的创业。作为软件工程师,我总是相信,编程就是为了让世界变得更有趣。创业这10年,我也总会在技术创业圈子遇到一些有趣的人以及他们的公司,刘奇和PingCAP就是其中很特别的存在。

最早认识刘奇的时候,他还在豌豆荚,他和黄东旭写了Redis的开源项目Codis,一下子在圈子里变得小有名气,他也很积极地参加我和几个人发起的社群论坛ECUG。ECUG全称为Effective Cloud User Group(实效云计算用户组)。这个活动组吸引了国内有技术情怀的一拨人,我记得刘奇每年都来。我们的交往就从ECUG开始。通过这些活动,我能感觉到他身上有很多我们这类技术情怀主义者认可的味道。

刘奇给我的第一印象是优雅的技术品味,尤其是对产品品质的极致追求,这一点在他变成CEO(首席执行官)之后也没有丝毫变化,反而被放大了。我印象比较深的是Chaos Mesh项目,他很积极地推动这个混沌平台测试项目,还把它捐给了CNCF(Cloud Native Computing Foundation,云原生计算基金会)。他很享受做大产品经理的感觉,特别喜欢抠产品的体验细节,愿意在打磨产品上花很多时间。

刘奇给我的第二个印象是商业感觉,他总能从外部的“小白”用户视角分析如何通过产品体验放大影响力。Chaos Mesh项目从零开始并飞速成长为CNCF明星项目,本身就需要同时把握技术品味和商业影响力。

不过,当刘奇他们用开源方式做TiDB时,我其实并不太看好。因为当时的时机既不适合做数据库,也不适合做开源。一是市场竞争,数据库是个巨头林立的市场,创业公司会直接面对传统数据库巨头的压制和云厂商的正面竞争。二是生态挑战,数据库产品高度依赖上下游,向上需要吸引大量应用,要建生态,而向下,数据库本身高度依赖服务器或云基础设施,有很多不可控因素。三是当时国内的开源氛围并不好,开源软件公司都还没有商业化的成功路径。开源数据库的道路仅从这三个角度看就比较崎岖。但是我当时没有直接表达我的看法,因为我觉得PingCAP的尝试很有勇气,这个事儿也很有意思,就想看看他们到底能不能走出一条新路。

我自己比较看好云计算,我觉得云计算对用户来说有很大的创新价值,它比开源的门槛还要低,触达的用户也更为广泛,用户的心智成本也更低。同时,它给用户带来很低的试错成本,用户只需要花很少的钱就能获得弹性资源,从零起步。我们这些技术出身的人,都有一种朴素的梦想,就是通过技术让世界变得有趣一些,创造更多可能性。七牛云做的是云存储,这是云计算的核心组件,它有相对自洽和自足的生存空间。那么相对来说,开源的门槛还是要高些,触达面积没有云那么大,开源用户的门槛也要比云高很多,用户至少要懂技术,能下载开源软件并自己完成部署,数据库产品还要自己运维,遇到问题还要懂得如何在社区求助。

云意味着一种软件交付模式的根本改变,如果说开源软件节省了很多测试的成本,云干脆连运维的成本都帮用户省了,这是用户心智成本最小的一种使用方式。在七八年前,云在当时的中国,显然比开源更靠谱。相比之下,PingCAP用开源的方式做数据库,是从一开始就要做国际化。在我看来,PingCAP是把三件难事放在一起做,而且还是一家创业公司,这个路径着实有点难。

我和刘奇还有个共同点——都是Go语言的信徒,我们都相信Go语言是一场革命。我当时还在微博上和人打了一个赌,说10年后Go语言一定是世界上排名第一的编程语言。当然Go语言也存在一些局限,这也是为什么我也推动发起了Go+活动。刘奇也是每次都参加,TiDB数据库的核心组件TiDB Server就是用Go语言写的。再后来,Go语言没有想象中发展得那么好,但TiDB反而发展得超出了预期。

我觉得PingCAP得以快速发展的一个最大原因,是刘奇、黄东旭、崔秋这三个创始人有一种对开源的执着。他们看到了开源的更多可能性,靠一种初生牛犊不怕虎的“劲”生生闯出了一条路。而恰恰是因为数据库太难做了,只有坚持开源才有一线生机,PingCAP闯出来的道路为后来的开源创业者蹚出了一条路径。现在,中国已经涌现出很多开源创业公司,我想这是PingCAP给中国开源带来的价值。

作为一名开源从业者,长时间以来,我一直觉得用GitHub可以做些事情,没想到这个事被刘奇做了。PingCAP推出的OSS Insight项目(https://ossinsight.io)很有趣,它把GitHub过去10年的数据做成了一个工具平台,人人都可以通过这个工具比较各种开源项目的活跃度,这个工具也让很多人可以更直观地体会到TiDB Cloud的价值,这是个很好的公益项目,这个出发点很酷、很有趣。

这个项目的思路和刘奇做Chaos Mesh一样,先是凭着一个工程师创造有趣产品的本能,觉得这个事儿做出来就会很有吸引力,然后它会自发地带来很大的影响力。我觉得全世界的软件工程师想法都一样,都希望提出一些能点亮世界的想法和有参与感的项目,大家心有戚戚焉。

PingCAP最近两年加速了国际化和云化的进程。一方面,在很多中国的技术公司开展国际化都晚了一拍的情况下,我希望PingCAP在国际化的商业成功方面蹚出一条有借鉴意义的路径;另一方面,我也相信,只有基于云计算,国际化的商业成功才会成为可能。开源和云计算在未来殊途同归,都会为未来的技术世界创造更低的门槛,让世界变得更有趣。

七牛云创始人 许式伟

2022年6月

推荐序3 念念不忘,必有回响

这本书读起来很愉悦,书中讲述了专业的人、开放的视野、鲜活的故事。

首先,这本书讲述了一群很专业的人的故事,表达了很专业的观点,涉及数据库技术、商业、开源,并且都体现了国际化的专业性。开源为什么是一种先进的生产模式?企业为什么选择开源软件?中国技术如何出海?什么是生态?一个好的开源社区的终局是什么?在此都可以找到专业的回答。

其次,书中体现的开放态度和国际视野令人振奋。开源的本质是开放协作,今天全球都被笼罩在新冠肺炎疫情的阴霾之下,开源的开放协作精神和群智汇聚能力尤其可贵。无论谁,都有机会以互联网汇聚全球智力众研众用众创。但是,只有真正做到国际化才能胜出。实现国际化首先要具备国际化的视野。

在TiDB吸引海外客户的众多因素中,开源是第一要素,因为它天生带来信任和宣传优势。此外是精细培养活跃社区。TiDB社区尝试过很多种社区讨论和沟通的方式,最终坚持了全球通用的邮件组。这个细节让我印象深刻,因为最近发现好多学生从不用邮件,这让我感到困惑:有什么沟通方式可以替代邮件吗?

最后,作者从业务、场景、社区、信息技术发展等维度,提供了鲜活的案例,从中可以看到这个时代的节奏。书中对不同地区的业务分析让人读得津津有味。例如TiDB在日本的发展规划是先从游戏和互联网行业入手,再逐渐转向传统行业和金融行业。

中国本土一个很强的特征是广阔的市场和众多的场景,“场景驱动已经成为PingCAP产品研发和迭代的主要动力之一”,这充分说明本土有肥沃的土壤支持技术和产品的发展。原创技术和产品是原力,是所有竞争力的基础。开源提供了一个广阔的时空,滋养着野蛮生长的原力。

念念不忘,必有回响。

期待目前在开源领域努力耕耘的人们,创造无数个如PingCAP般专业、开放、鲜活的开源公司。

北京大学教授 周明辉

2022年5月10日

推荐序4 永远做“难而正确”的选择

我时常回忆起第一次和黄东旭见面的情景。那是2017年3月初的一个清冷的早晨,我约的时间太早,赶到PingCAP位于东升科技园最早的办公室时,只有东旭一个人在会议室等我。进门就是一张小会议桌,然后几乎就没什么空间了,我只能侧着身子进去坐下。

我并没有预料到这次见面就让华创资本(以下简称华创)从此与PingCAP结缘——东旭很成功地在一小时的时间里,让并非软件工程师出身的我,理解了PingCAP成立的背景、要解决的问题,以及非常令人激动的使命和梦想。

在和东旭见面之前,2016年下半年,华创企业软件小组认定“优秀的软件创业团队一定出自开发者社区的意见领袖(KOL)”。于是小组成员开始纷纷在认识的技术牛人里打听他们眼中的高手。华创几个被投公司的创业者不约而同地推荐了刘奇。借此机会,华创团队拜访了刘奇,并根据和刘奇的对谈写了一篇采访稿《刘奇:开源和精英,在创业中一个都不能少》,于2016年12月发布在华创的微信公众号上。

作为一家2014年才正式募集基金的早期风险投资机构,华创为了寻找自己的差异化,聚焦的投资方向之一就是企业软件。那时候,国内移动互联网创新创业正如火如荼,而软件行业相对冷清,此前还没有让风险投资机构赚大钱的案例出现。因此,聚焦投资软件的我们不免有些孤单。那时候我们的学习对象是国际上已经开始引起关注的云计算赛道上的公司和它们的投资机构,虽然国内大家的普遍疑问依然是:中国的企业客户愿意上云吗?他们会担心数据保密问题吗?他们愿意付费吗?……

我很庆幸,在见到刘奇、东旭之前,我们作为一个决定“聚焦企业软件”的投资团队,已经读过《大教堂与集市》,对“开源社区”并不陌生,对于“开源软件是否具有商业价值”这个问题也没多少疑问——“开源”和“商业价值”本来就是两个维度的问题啊!因此,我们和PingCAP团队一见如故,每次聊天都热火朝天。我们为国内居然出现一家致力于做下一代优秀数据库的公司而感到激动、鼓舞,投资决策前唯一的障碍就剩下估值了。

那时候的PingCAP成立刚满两年,公司已经融过天使轮和A轮,接下来就是B轮融资了。刘奇很谨慎地报了一个他认为合理的估值,但是这个数值对华创来说依然有不小的挑战。如果我们要在刘奇认为合理的估值上领投PingCAP,就会投出华创成立以来最大的一笔钱,是我们舒适区域投资额的好几倍。怎么办?如果在平时,我的第一反应肯定是和创业者再重新聊聊估值,不过我们太喜欢这个团队、这个机会了,担心议价会丢失投资机会;况且,说实话,我们内心里是觉得“值”的。

投资小组和华创的所有团队成员分享了对这个项目的看法之后,我就奔机场出差去了。刚下飞机,我就查看了团队成员对项目的意见反馈,令我感动的是,大家都投了赞成票,觉得我们可以为难得一遇的“激动人心的机会”突破投资金额或估值限制。我马上给刘奇打电话:“没问题的,我们来领投这一轮吧!”

后来刘奇说:“海燕下了飞机就给我打电话,说明这个投资决策是在‘云上’做的。”——看来我们就是和云有缘分!

此时回顾我们做出投资决策的时间点,也就是2017年4月,TiDB的1.0版本还没有发布,也没有任何商业化验证——没有合同、没有收入。我们看到的,是PingCAP创始团队的技术视野、对下一代数据库需求的敏锐判断,以及比较活跃的社区。当时,已经有100多家企业用户把社区版TiDB v0.5部署到自己的生产环境里了。我们在走访一些社区用户时得知,它们也是“不得已而为之”,实在是没有其他选择了。我们清晰地看到了“巨大而未被满足的客户需求”,以及TiDB作为先行者的优势。

华创当时还是一支规模比较小的早期基金,可是在投资PingCAP上并没有遇到激烈的同行竞争。那段时间,行业里的“风口”是以共享单车为首的各种共享经济,但是很多人并不知道,订单呈指数增长的摩拜单车正是PingCAP的早期企业用户之一。刚完成投资的某天,我在咖啡馆偶遇几位同行,有人问我:“听说你们刚投了家数据库公司,估值特别高。”我问:“为啥你觉得估值高呢,它和刚刚我们聊到的共享充电宝公司不是也差不多吗?”同行说:“因为你们这家公司还没有收入,而共享充电宝公司的订单、流水都已经‘起飞’了。”

我心里想,数据库公司哪有这么快就能把产品推向市场、赚钱的?一家没有收入的初创公司,难道就等同于没有价值吗?开张就有流水的公司,正说明它的启动门槛低啊!

坚定了我对“云未来”的信心的,是投资PingCAP之后不久的一次硅谷之旅。那次旅途的安排之一是和几个国内投资机构的朋友一起拜访Sutter Hill Ventures,一家位于帕洛阿尔托的老牌硅谷风险投资机构。正是这家风险投资机构前瞻性地看到了云计算的未来,早在2012年就孵化了Snowflake公司(一家基于云的数据仓库初创公司)。Sutter Hill Ventures的一位合伙人接待了我们,他在这家风险投资机构供职超过10年,一直负责投资企业软件。在交谈时,我简单提及了几个我们投资的公司的名字。突然,对方说:“我知道PingCAP。”我不禁愣住了,心想是不是他听错了。毕竟,国内的很多同行都不知道当时名不见经传的PingCAP,何况这位从来没有去过中国的美国风险投资者呢。对方解释说,他在GitHub上关注到了TiDB,并通过邮件联系到了TiDB的创始人,还在线交流过。

这就是开源社区的魅力之一——有意义的工作,就会被关注这个方向的人们看到,不管他/她在哪里。成立才两年多的PingCAP,在硅谷已经有一小批用户和关注者了,几位创始人去硅谷办Meetup(聚会),参加的人可不少呢。

一转眼五年过去了,PingCAP的发展速度已经远远超出了我们在2017年的认知和想象。过去风险投资者们认为,只有消费互联网行业才有“网络效应”,而企业软件公司的发展是线性的、缓慢的。但是,全面拥抱开源的PingCAP,在活跃的开发者社区的支持下,实现了一家软件公司的“网络效应”。

过去的五年,对我们早期投资机构来说是“意外之喜”,对PingCAP团队来说可能就是“波澜壮阔”了。从2017年的30多人、一小间办公室,到现在分布在全球数个国家和地区的600多人的团队,PingCAP逐步成为国际开发者社区里一家不容忽视的、具有领袖气质的公司。刘奇作为一位“CTO(首席技术官)出身的CEO”,也展现了不同寻常的领导力。伴随过去20年中国互联网行业的高速发展,说实话,我们并不缺乏顶级技术人员。但是,我们很缺乏具有前瞻性技术视野、懂客户需求、能领导一家国际化公司的CEO。这一切既出乎意料,其实又有迹可循——毕竟,从决定创立公司起,刘奇、东旭、崔秋三位创始人,他们要挑战的目标就是中国软件行业前所未有的,因此他们不断地做出了一个个“难而正确”的选择,这正好契合了直面商业本质的“第一性原理”。

与此同时,PingCAP还带动了国内企业软件创新的浪潮,它闯出的“开源之路”,以及因此而拥有的国际影响力,激励了无数中国开发者踏上云计算的征途。我们越来越确信:在云计算的时代,中国会延续消费互联网时代的成功,涌现一批国际领先的创新公司。

路很长,很庆幸,我们都在正确的方向上!

吴海燕 华创资本管理合伙人

2022年5月

推荐序5 开源与人才教育

如今,开源已经从最初的自发行为,演变成商业行为,并正在成为国家战略。软件是知识产品,开源是人类知识生产的新模式,是“万众创新”的源头。开源势在必行,不仅是因为全球数字合作呼吁开源开放,更是因为我们中国的发展更需要开源开放。

中国不仅要参与开源,更重要的是要为开源做出贡献,才能让中国企业赢得尊重和钦佩,进而在数字化转型中锻炼核心竞争力。本书从PingCAP的七年创业史出发,从开源的理念与实际应用、开源社区生态、开源商业化、国际开源生态合作等方面完整讲述了PingCAP对开源的思考以及实践,给当前众多从事开源创业的软件公司和推动开源的大型企业的工程师带来了鲜活的参考。

作为一名教育工作者,我深刻地认识到,开源若想蓬勃发展,一定离不开人才。而只有高校、企业和开源社区三方聚力才能培养更多开源人才。近年来,国内高校的开源教育正在从传统理论课程向与实践结合的产教融合模式转变。华东师范大学在去年与GitLab开展了开源教育合作,致力于共建开源开放生态,共同推动开源教育的发展。在本书中,我也欣喜地看到,PingCAP 的Talent Plan(“人才计划”)秉承“用开源、教开源”的理念,融开源于教育之中,通过开源教育,营造开源文化,培养开源精神和开源能力,开创了一条培养开源人才和数据库核心人才的新路。

同时,我们也要看到,目前国内的开源教育仍不十分充分,仅有少数高校开展了开源教育课程。开源教育的实践以及开源教育愿景,让我们感受到肩负开源教育的使命的艰巨性,意识到了开源教育的重要性和紧迫性。通过开源教育,我们可以抓住开源带来的历史机遇,树立更高的价值观,发展更好的技术、更包容的文化,也能让我们在当前这场开源浪潮中占领制高点。

未来,希望在各方努力下,开源教育能够成为全民教育,让每个数字时代的公民了解开源的理念与文化,培养数字化协作的能力,共享开源开放的成果。

华东师范大学副校长 周傲英

2022年5月

前言 一场关于开源的生死抉择

创业的早几年,投资圈的朋友都说我的“赌性”很强,而且是拿“生死”在赌,有的做法甚至像是在“自寻死路”。这样做的好处和坏处都很明显:赌赢就赢得很大,赌输就打道回家了。熟悉我的人大概都知道,我对打德州扑克没有兴趣,这倒不完全是因为没时间,而可能是我在潜意识里觉得,只有足够有价值也足够有挑战的目标才能激发出我的“赌性”。

“豪赌”的初衷是什么?

选择数据库作为创业方向,并在第一天就选择完全开源的模式,这在2015年的IT圈是个非常疯狂的做法,也是我人生中最大的一次“豪赌”。是什么激发了我和整个创业团队?让我们一直走到今天的动力到底是什么呢?

在早期的职业生涯中,我是数据基础软件使用者,到后来又成为一些项目的参与者。在这些经历中,我接触的基本都是国外产品或者是国外产品主导的项目。但我一直心有不甘,凭什么中国人就干不了这个事儿?当时,现存的所有数据库都让我很失望。于是,我就想创造一个让自己满意、让他人欣赏、让用户省心的数据库,让工程师们不用熬夜,可以安心睡个好觉。这事说起来简单,其实每一步都很难,而且做起来才发现比想象的难得多。但不管需要付出多大的代价,经受多长时间的痛苦,“让用户省心”就是这场“豪赌”的初衷:创造一个伟大的产品,让工程师们可以不再做重复的运维工作,专注于创造业务价值。这也是PingCAP创立几年后形成文字的愿景。The best and most respected infrastructure software company(成为最好、最受尊敬的基础设施软件公司)。

是“自寻死路”还是平庸过活?

在这个愿景的驱动之下,很多看似“自寻死路”的选择就变成可能,甚至是必然了。

今天,我们可以看到开源项目、开源企业越来越多样和成熟。但在我们创业之初的2015年,一个开源软件公司面临的压力是大家现在完全无法想象的。A轮:你有收入吗?B轮:你有收入吗?可能现在大家不觉得这是一个问题,但是在创业刚开始那几年,我们就是没有任何营收。最支持我们的投资人也问我:“既然你觉得你是最好的,为什么要开源?”这也可以理解,因为当时业内的很多舆论场充斥着“好的软件都不开源”这样的流行言论。

当你走到分岔路口,一条暗淡崎岖,不知道能否走得通,也得不到别人的认可;另一条能让你走得安稳,但你知道如果走下去,你辛辛苦苦创立的公司就会变成一家平庸的公司。你要怎么选?这个时候,心底里的那个初衷“The best and most respected”会告诉你,平庸的道路千万不要选,哪怕它看起来很好。

平庸地活着是不是我想要的?对于这个问题的思考使我做出了很多艰难的决定。

唯一路径

什么时候是做开源的最好时机?有人说“种一棵树最好的时间是十年前,其次是现在”,开源也一样。有些人觉得现在的开源在资本市场有泡沫,我们还曾被一位具有全球影响力的创业界前辈当面质疑过。但我觉得,现在谈我国开源泡沫为时尚早,我国的开源还远远没到泡沫阶段,我国程序员对于开源的真正理解才刚刚开始。我们现在关于开源的环境、做法还在借鉴、学习阶段,顶多做到了和世界差不多同一个水平,还远没有做到超越。

我在2016年讲过一句话:“开源是基础软件成功的唯一路径。”如果更严谨一点,要给这句话加一个限定词——中国,即“开源是中国基础软件成功的唯一路径”。

我们曾做过一个特别朴素的金字塔分析:我国有全球领先的巨大市场和需求,领先的需求一定会产生领先的场景,尤其是移动互联网的场景。在这些领先的场景里就应该有机会在某些领域产生世界领先的基础软件产品。那么,过去这样的产品为什么都似乎与我们无关呢?因为基础软件的底层特性导致这些场景以及有场景洞见的人才都被分散在众多大中型企业中,同时这样的分散又遏制了基础软件的普适性和可复制的优势。这么分析下来,只有开源能将这些分散在各个企业的人才和场景聚拢起来形成合力,很明显开源就成为探索金字塔顶端的唯一路径。

另外,我特别想强调的是,做企业一定要回报社会。在今天和未来的时代,一个好的商业模式是什么样的?我觉得应该是先创造社会价值,再从社会价值上萃取一部分商业价值,这也是我们公司对于自己未来发展的一个长期的期望。

前面说过,我曾做过很多艰难的选择,开源可以说是其中的第一个选择,第一性原理的那个“元选择”,并已经成为我们撕不掉的标签。开源这个选择之后还有一系列选择,归纳这一系列选择,我发现通常我的选择都是基于生态的考量,包括场景的生态、人才的生态、技术架构的生态、开发者接口的生态,等等。

生态即未来

其实建公司,选架构,做选择……本质上来讲就是在赌未来是什么样子,这里列举这一系列艰难选择中的几个小例子。

选择云原生

我们坚定地看好未来云原生方向的巨大潜力,所以我们要拥抱云原生的生态。这引出了另一个异常艰难的选择:我们在当时如日中天的Mesos和Kubernetes中选择了CNCF(Cloud Native Computing Foundation,云原生计算基金会)的标杆项目Kubernetes。很有意思的一点是,当时因为客户反馈和反对,比如提到Kubernetes不成熟、没有实际用户案例,等等,我们内心产生了各种纠结。不过短短几年后,再看这个选择就变成了理所应当。我们的第一个项目TiKV分布式存储层也选择了CNCF平台。

随着CNCF本身的不断壮大,我们也有了第二个沙箱项目——Chaos Mesh(云原生混沌工程)。作为最早加入CNCF,且项目数量和贡献度排名最靠前的国内公司之一,PingCAP也因此获得了品牌提升和客户的信任,还吸引了更多人才,这些都算是技术生态考量之后的意外收获吧。所谓“念念不忘,必有回响”。

选择语言

另一个重要选择是我们产品使用的编程语言——Rust和Go。早期讲全球化的时候很多人觉得我们的创始团队应该是从硅谷回来的,其实我在创业之前都没去过美国。第一次去硅谷,是跟 Uber、YouTube、亚马逊等公司做交流的时候。美国的同行这么评价我们的技术风格:“PingCAP好时尚啊!”为什么他们会这么评价?如果大家去关注一下Rust的历史迭代,就会知道2016年我们的这个选择真的是在赌博。用不到五岁的Go来创建数据库,用还没发v1.0的Rust写存储层代码,风险太大了。最安全的选择应该是Java,当时的主流分布式系统大部分是用Java编写的,比如Hadoop、ZooKeeper、Cassandra、HBase等。但如果当时选Java,我们的产品就很可能是一个平庸的系统。在云的时代,我们需要更敏捷、更高效,同时更安全的新方式构建系统。如果我们有机会重新开始构建系统,编程语言的选择会变成一个杠杆很高的决定,这也是我们选择了Go和Rust的原因。

在这个决定之后,我们作为最早全面拥抱Rust生态项目的公司之一,也非常荣幸地得到Rust研发团队两位核心成员的加入。我们在没有做任何全球化品牌的时候,就是靠这张名片去吸引人才加入我们的社区和公司的。当时网上还没有像今天这么多的有关Rust的文档和教程,所以这张名片还需要我们自己来打造,我们将Talent Plan的所有教程用Rust实现了一遍,虽然这离我们的主业有点远,但对后来的招聘和培训极其重要,这也是我们第一次在全球范围内好评如潮。

选择人才

很多人知道,我们早期是一家真正的分布式公司,因为员工都远程办公,我们第一篇真正出圈的文章居然是讲远程协同工作的。选择什么样的工作模式取决于选择什么样的人才,包括所有围绕人才的吸引、协同、管理、激励……都要与之相匹配。

有一部分特别顶级的人才,他们的成就感并不是来自可以在一条大船上很安稳地航行。早期的创业公司,尤其是做硬核技术的,找到这样的人是很重要的。当时我们的CTO(首席技术官)黄东旭去校园招聘,不是广撒网做宣讲,而是直接跑到学校国际大学生程序设计竞赛队的教练那里,问最牛的队员是谁。他会和同学们说PingCAP这里有道特别难的题,再附上几篇论文,告诉他们全世界还没人做得出来,而且这里用的是最先进的编程语言。这些同学虽然手上有多个大公司的录用函,但是感觉这家小公司在做一件更加牛的事情,就会选择加入或者去实习。

选择广度

在我们的产品从TiDB 1.0到TiDB 6.0逐渐迭代出一个稳定可用版本的过程中,我常年内心的状态是恐惧。如果我们在一条小路上越走越远、越走越窄怎么办?是做成某个细分领域的数据库?还是一个通用型数据库?这还是一场赌博,到今天都不能说我们的选择百分之百正确。对于很多创业公司来说,有可能在一个细分领域做深是一个更加正确的选择。但对我而言,只做一个细分领域的领头羊,与“The best and most respected”这个目标相去甚远,这并不是我想要的,所以纠结了一下还是选了广度优先,确保我们的产品对于需求的普适性,也确保公司以后的规模和扩展的潜力,保持更高的天花板。但这并不是说选择做深做精不对,我们这样的选择也很容易做死。所以,一个公司的愿景很重要,与之相配合的战略也同样重要,两者都选对和做对公司才能在一个天花板高的市场获得持续成长。在战略上,我们很大程度上利用了开源的优势。社区创立早期我们经常说“势高则围广”。社区在帮助我们探索广度,将产品运用到各行各业,汇聚最佳实践。我们从这些广度里面大浪淘沙般找到了可以制胜的场景,在这些场景里反复打磨,做深做精,再将做法复制到商业场景。当然有少数行业和场景是需要攻坚的,比如金融、超高并发交易场景,需要更复杂的系统保障,也让我们更加专注地去做深度。其他的行业和场景就是依靠社区,依靠用户,今天我们在某些场景的产品认知远不如用户。用户是我们的老师,而真实场景是最好的架构师。

地理上的全球化是另一个维度的广度。为什么成功的基础软件很多在美国?美国的科技企业除了资本和人才优势外,大多还有一个全球视野的自我定位,这起到了很大的作用。我们为什么从很早期就投入做全球化?因为这是一个认知的改变。如果你只在意某个区域,只做某个行业,最后所有认知全都是建立在这个非常窄的领域里,在这个认知下,你去跟具有全球定位的公司竞争,可能还没开始就已经输了,后面需要花很大精力去为认知补课。

一段漫长的旅程

坚持长期主义

数据技术相关行业的所有人都应该铭记一句话:数据爆发的时代,我们往往高估了短期,低估了长期。其实做产品、运营公司亦然。在志向高远的前提下,坚持长期主义必有回报。

长期主义因为回报期很长,人们往往就没怎么算ROI(投资回报率)之类的,其实也算不过来。觉得对的事就去做,不断证明是对的事,就要长期坚持。这也是公司战略和组织文化的体现。拿开源来说,最初我们公司一穷二白没什么拿得出手的,社区建设唯一能做的只有分享。

公司创办第一年,我们坚持每周举办聚会(Meetup)做论文分享、技术讨论(见图0.1)。第一场Meetup只来了两个人,今天市场上任何一家创业公司的起点都比这个高得多。每一场Meetup我们都坚持了下来,并将相关视频传到B站上,希望分享给更多人。几年后一看,B站的TiDB_Robot号已经积累了350多条视频内容。一家科技公司的品牌化怎么实现?在创始人和项目这些硬件条件已定的情况下,再提升就只能靠时间积累。砸一两波广告成就不了科技品牌,真正有影响力的科技品牌还是要经过沉淀,逐渐积累。这本身是创造社会价值的过程,不管是被人学习、被人提问,还是被人批评、自省改进,都是对社会价值再创造的过程。这个过程会随着时间的推移,慢慢变成公司的文化之一。很多很多历史会沉淀出习惯,很多很多习惯会沉淀出文化。有时候大家会很着急,我也很着急,但长期主义是真的需要花时间才能做到的,确实需要时间沉淀,特别是公司真正想积累的文化。

图0.1 TiDB Meetup

说完文化,再回到公司的核心产品上来。对产品来说,短期消耗精力在社区建设上,肯定不如“996”写代码来得高效。但长期坚持人才汇聚、场景积累,对产品迭代的作用是惊人的。下面分享一张图(见图0.2)。开源项目看起来到底是什么样子的?这是TiDB历年产品代码迭代的统计图,横轴表示时间,纵轴是代码量。图中的红色是TiDB 2015年的代码,蓝色是2016年的。作为创始人,我当初写的代码现在就只剩一点点了,肉眼几乎不可见。就产品迭代的速度而言,这张图可以给大家一个很清晰的感受。

图0.2 TiDB历年产品代码迭代统计图

产品做出来之后能不能用?我们从外界收到很多反馈,比如有人说PingCAP蛮傻的,看起来很奇怪,天天在搞互联网场景,可互联网公司根本不付钱,要付也就一点点。但是我们从第一代产品开始,几年来都在互联网行业深耕社区用户。为什么?因为中国的互联网就是要满足前面提到的金字塔基础逻辑——全球领先的需求、全球领先的场景。我记得在为日本第一大在线支付客户提供业务服务的时候,他们很紧张地问:“我们的业务数据规模挺大的,搞得定吗?”后来我看了他们官方博客公开的用户量数据,规模是我国同类用户的十分之一。在坚持长期主义过程中,这样的案例让我们一次又一次对这个基础逻辑建立起更坚定的信心。

投资关键路径基建

因为坚持长期主义,所以注定我们不能同时做很多事,因为事情又多、耗时又长,肯定要失败。所以六年多来,我们只专注在一个产品上,就是TiDB。细心的读者可能会问,你们不是还做了别的东西吗?对,我正想说说另一个需要长期关注、长期投资的事,那就是关键路径的基建。

质量

我们在TiDB的存储层TiKV之后的第二个CNCF项目混沌工程平台Chaos Mesh就是这样的例子。一家基础软件公司,在工程上最大的挑战是怎么保证软件质量,尤其是开源协作的软件,在高速迭代的同时还要健康、稳定地发展,这里面花在测试上的精力会比一般的应用级产品要多得多。现实中各种各样的故障都会发生,Chaos Mesh这种“人工地震”的方式可以模拟这些故障,以测试特殊情况下软件会怎么应对。所以Chaos Mesh虽然看起来是我们的一个副业,但其实包括Chaos Mesh在内的一大堆测试工具,都是我们产品质量的保障,是关键路径的基建。

这个项目火爆的程度远超我们的预期,我们用一年的时间在混沌工程领域做到了后发先至。目前全球大量的数据库或者其他类型的基础软件、大型关键业务系统,都采用Chaos Mesh进行测试,最近它还成为第一个进入Azure Cloud的Chaos Studio混沌工程平台。该项目也已成为CNCF的Incubator(孵化器)项目,引起了主要云厂商的关注。这说明越是基础的,越是全球的,我们不应该辜负这个广度的馈赠。

人才

软件产业是一个人才密集型产业,不然人们也不会把程序员叫“码农”了。所以另一个关键路径,一定就是人才。刚创业的时候我们发了一个招聘帖,几十万的阅读量,出道即巅峰,现在的招聘帖都没那么高的阅读量。结果,我们一份简历也没收到,虽然收到了无数鼓励,“特别好”“有勇气”“加油”“上”,但当我们问要不要来时,一个都不来!我人生中第一次受到了如此巨大的打击。后来我们跑到学校进行招聘的时候,过来一个同学就问“BAT(B指百度,A指阿里巴巴,T指腾讯)在哪里”或者“PingCAP是谁”。

为了用程序员能听懂的语言回答好“PingCAP是谁”这个问题,我们做了一个Talent Plan(“人才计划”)的小项目,教大家怎么一步一步创建分布式数据库,让大家在大学里也能够学这个知识,在学习过程中还可以来PingCAP实习。早期,这就是我们不多的路径之一,让我们争取到了非常优秀的年轻员工。今天,看到友商的大赛上获奖的很多人都是Talent Plan的毕业生,我感到很欣慰。这也是当初我自己在大学时的梦想。国内大学的计算机专业教育,和先进国家的差距还是有点大。所以,我们做了一些事,在解决了公司的关键路径问题的同时,这些事也秉承了我创业的一些初衷,那就是先持续不断地创造社会价值,再从社会价值中萃取一部分商业价值。

长期激励

踏上长长的旅程不是一件容易的事,至少比读者从我的文字里能读到的要艰难百倍。但对人生而言,最大的激励又是什么呢?我想可能就是“改变世界的机会”。我常常在想,PingCAP在干的这件事除了我们这些人,别人是不是也能干?能干的人肯定很多。有时候我会特别感恩,觉得我们运气特别好。为什么会是我们?是PingCAP?不管未来如何,至少我们已经能冲到这么远了,即使失败了也创造了新纪录,要成了我们还可以走得更远。这个机会不是凭个人的能力就可以抓住的,很多人都具备这个能力,很多人比我能力更强,但实际上这样的机会他们不一定有。这样的机会通常来讲人一辈子能够有一次就十分幸运,有两次就是老天爷追着赏饭吃了,所以这个机会往往远大于其他一切激励,因为没有任何物质或金钱的回报会如此稀缺。换言之,这个机会能换来其他的东西,但没有什么能买得到一个“一生的机会”。

选择的代价

任何选择都有代价,这就是我这几年创业的感悟。PingCAP过去几年每次选择时都走了那条更加艰难的路,尤其是选择的当下。因为看不懂所以理解起来难,因为更长期所以讲清楚难,因为天花板高所以执行拆解难,往往在三年内我都不会觉得这是一个正确的选择。但创业成功的概率太小,资源又通常不够用,哪怕外面看起来融了很多钱,所以,我不得不建立起一个思考习惯,那就是重要的决定要往后想5年、10年,然后反过来做现在的决定。但是这带来的副作用也很明显:当下去做的时候会很痛苦。比如你希望10年之后生活安逸舒适,现在就没办法安逸地待在舒适区里。我相对痛苦,公司的同事们也比较痛苦一点。从长期来看正确的选择,在短期看来都是更难的选择。

数据库这个产品,优点是天花板足够高;缺点是它承载业务的核心,出事的话就是大事。对于一个从零打造的产品,早期要想不把路走窄,我们就必须承受产品的不完美。不完美的时候,韬光养晦、闭门造车是个安全的做法,但产品就没有经历真实业务的打磨,迭代就不可能快。所以我们把产品放到社区去锤炼,变成我们的“华山一条路”,我们也一路体会着广大社区用户的厚爱(吐槽)。

以前外面有一个传说:PingCAP的公关稿子他们自己不审,因为每一篇里面都有吐槽。其实这是我们要求用户的,希望他们在文章中加一小节对自己使用不满意的地方的描述。这种做法在硅谷很常见,因为把一个产品写得很完美人家就不信,所以我们确实是在用户的吐槽中成长的。我们还有一个惯例——吐槽大会。2021届的DevCon又办了一场,还第一次请了投资人来观摩。很有意思的是,投资人从我们社区用户的各种吐槽中,听出来的是大家对我们的爱。有足够的吐槽,才能掌握最真实的需求优先级。我们一路走来,从稳定的内核到更多更好的工具,在此基础上再做云整合、开源生态和周边工具的整合。

其实被吐槽真的是幸福的,因为这说明你的产品有人用,而且用户还非常热切地希望你进步,改掉一些小毛病。之所以我们无比珍惜这样的吐槽,是因为在产品1.0刚出来的时候,在最痛苦的阶段我们没有一个用户,更别说商业化了。经过一个多月,我终于想明白了一点,你的这个产品,也就是数据库,作为一个承载业务命运的基础软件,用户选择它就是选择依靠你,这份信任的建立本身就是很花时间的过程,所以急不得。

那PingCAP到底凭什么赢得客户的信任呢?今天如果把一家国内的软件公司放到全球市场上,客户听说公司不开源就会免谈,因为客户不知道公司是否会在软件里面设置漏洞,特别是他的数据都在公司这里的时候。比如他最重要的资产、客户、账号、钱、游戏里的道具,统统在软件公司的数据库里面,他靠什么相信这家公司?这再一次说明开源是“华山一条路”,你只有公开透明,才会有一个信任的根基。开源是建立信任的起始点。

但只有开源是不够的,它还必须是鲜活的,长期运转的。能得到客户信任的前提是,基于开源项目你说的和做的长期如一。开源社区有一个优点,那就是一切行为都可以被追溯。基于这些长期的追溯,客户用很低的成本就能建立起对你的认知,知道你是不是长期如一地这么做,这也是长期信任的基础。客户选择了你的一个基础软件、一个数据库,本质上来讲就是选择了信任你、依靠你,就是要跟你做朋友。而我们选择长期主义,选择开源,也是选择做时间的朋友。

我是一个农村娃,有时候回看自己这一路走来所经历的种种,觉得自己特别幸运。每一年我都会有所成长,也有新的焦虑。比如跟上一年相比,觉得自己好像没怎么成长。所以,我和团队养成了一个习惯,会时常审视自己到底成长了没有,还有哪些方面需要提升,哪些可以相互补位。这样的焦虑会长期伴随我们,刺激我们不断地成长,不断地去接近我们的初心和目标。我也希望我的这种坚持本身,对于很多追求更大目标的、背景普通的人是一种激励。

PingCAP创始人兼CEO刘奇

第一章 缘起开源

第一节 写了个好玩的东西叫Codis

我记得是有一天下午在喝咖啡的时候,同一个小组里的伙伴随口聊到的这个想法,这里面其实有一个特别创新的点,解决了一个大量用户并发访问情况下数据的无痛迁移问题。所以当时它就是一个动机,非常随机的一个动机。而且Codis从开始写到发布,第一个版本一共用了不到两个礼拜的时间。

——黄东旭,PingCAP联合创始人,CTO

2013年,还在豌豆荚当工程师的黄东旭遇到了一个挑战:由于业务量的急剧增长,有些服务器的缓存告急。如果缓存耗尽,就会造成用户在使用豌豆荚的服务比如搜索或浏览功能时,出现服务器性能急剧下降的问题,甚至完全失去响应,这显然是用户不能接受的。豌豆荚当时的一个设计理念,就是尽可能地把数据全都放在缓存里面,因为这样访问速度会更快,也才能保证更顺畅的用户体验。不用缓存的话,用户每次访问可能就需要花费100毫秒甚至更长的时间;如果希望只用1毫秒访问的内容就显示出来,那就只能用缓存技术。

但在当时,缓存服务只有单机版,而要解决这个问题,必须能够把缓存做成一种弹性水平扩展的分布式服务。这么一来,如果一台服务器不够就可以加一台或多台,直到缓存够用为止。

和所有的软件工程师一样,刘奇和黄东旭花了不到两个礼拜的时间,写了个叫Codis的软件,实现了这样的服务,彻底解决了这个业务问题。但和大部分软件工程师不一样的是,他们没有止步于此。黄东旭发现,Codis属于基础软件的范畴。因为缓存问题并不是只有豌豆荚的某个具体业务,而是所有业务都会或多或少、或早或晚遇到的问题,所以,他们做出了一个与众不同,但非常重要的决定:

把Codis开源。

Codis是第一天就开源了的,它的成功其实是我们后面事业的基础,因为Codis在开源以后,成为全中国能叫出名字的互联网公司都在用的东西。但它其实是我们花了一两个礼拜做的。这么快的时间,也没做任何推广,就因为它确实是刚需。

——黄东旭,PingCAP联合创始人,CTO

Codis在开源一年以后,已经红遍大江南北;传播范围之广,连原作者都始料未及。时间来到八九年后的今天,黄东旭还经常在各种技术会议上被问及Codis的各种技术细节的问题。“有时和会议主题一点关系也没有,而且这个项目也早已不再由我作为主要的维护者了,但是真的经常还是会有人问我关于Codis的事情,因为他们还在使用,很多都是用户自己根据需求在维护。”黄东旭说到这里的时候,在无奈中又透着些许自豪。

开源的力量,就是以这样的方式给黄东旭以极其强烈的冲击。仅仅因为自己对某个需求的理解更深入一些,并给出了一个通用的、能够满足现实世界中人们的需求的解决方案,他的影响力就不胫而走,因而他无须花费巨大的人力和财力,用户就会主动而热情地选择他的产品,这简直是一种魔力!

也许,Codis的诞生过程的一个更加重要的意义在于,它让三个后来成为事业合伙人的豌豆荚工程师结合成了一个团队。黄东旭当然是其中一员,另外两人,就是刘奇和崔秋(见图1.1)。

Codis并不是从零开始做起的,而是建立在当时最流行的单机版缓存服务Redis的基础上的。最简单的理解就是:Codis利用了Redis已有的接口协议,但没有改造Redis本身,而是在其上层架设一套设施,把缓存服务做成分布式的。也就是说,在每一台服务器上,缓存服务还是由Redis来完成,但是将缓存中的数据从一台服务器扩展到更多的服务器上,以及这些服务器之间缓存数据的转移和同步,则是Codis实现的了。应用程序在使用Codis时,可以采用和单机版Redis几乎一样的方式,只是它面对的是一个“容量无限”的Redis缓存服务。可想而知,这样的服务会给应用程序的性能带来多大的提升,并且还几乎不需要对应用程序做任何的改动!难怪Codis一经推出,就会受到非常热烈的欢迎。

图1.1 左起:黄东旭、刘奇和崔秋

但是,软件开发可不是说说那么容易。其中有一个比较大的挑战,那就是作为一种分布式缓存,Codis需要能够弹性地自动扩容,既能实现扩容数据在不同系统间迁移,又能保证客户端访问数据的一致性。比如,在一台机器上有一块数据,数据扩容后,增加了两台服务器,这时需要把原来的部分数据挪到新的服务器上。在挪数据的过程中,还得保证客户端通过原来的服务器能够访问以前的数据。如何实现这一点,很让人伤脑筋。

灵感来得很突然,一天下午刘奇跟同事讨论之后,脑子里忽然就有了思路,知道了怎么写一个算法来实现。

这个创新的算法,刘奇并没有给它命名,但它却是Codis项目的起源。简单来说,这个算法是给Redis增加一个迁移(migrate)命令,这个命令相当于做了一个将缓存的键值从Redis A到Redis B的原子迁移。这个操作听起来很简单,实际上挑战很大,因为刘奇和他的同事希望尽可能在不改变或少改变Redis的前提下,保持上游的Redis一直使用新版本,这就涉及数据平滑迁移的问题。传统的数据迁移,一般是整片的数据搬运,两台机器停止写入,做数据交换。但是这个过程需要一定的交换时间,这点恰恰是刘奇和他的同事不能容忍的,他们觉得这个交换的时间曲线不够平滑,也让算法整体的设计变得复杂。而刘奇想出来的算法,相当于把一个大的迁移作业分解成无数个小的迁移作业,像蚂蚁搬家一样,一点点地完成数据交换,原本可能需要几天才能完成的大事务,用这个算法只需要几小时就完成了。打个比方,一般情况下,Redis的数据交互就像买东西时A给B一笔钱,B给A一个东西,然后A再给B一笔钱,B再给A一个东西。而Codis是直接把A要购买的物品清单全部列好,然后一次性发送,大大减少了交换时间,降低了连接建立和并发计算的开销。

黄东旭开玩笑说:“这个是非常老师傅的编程技巧,我以前都不知道。

Codis使用一种现在已经炙手可热但当时还不甚流行的语言——Go语言来实现。Go语言的缔造者中,有一位全世界程序员公认的大神级人物——肯尼思·汤普森(Kenneth Thompson),他是UNIX操作系统的主要开发者。UNIX操作系统不仅是一切主流操作系统(包括苹果的macOS,还有Linux及其前身MINIX等)的事实基础,更重要的是其设计哲学几乎影响了整个软件行业和在这个行业中的所有人。尤其是在行业内深耕的、具备相当素养的工程师,都一定会自觉或不自觉地受到UNIX设计哲学的影响。Go语言的另一个主要设计者和早期实现者罗布·派克(Rob Pike),虽然没有直接参与最初版本的UNIX的开发,但同样也属于贝尔实验室UNIX开发组的最资深成员,并且他是字符编码UTF-8的主要实现者。UTF-8是目前整个互联网上的字符编码的事实标准,它的灵活性和包容性使得从古埃及圣书体到只在小范围内使用的苏州码子,以及层出不穷的网络表情符号中的每一个古今中外人类所使用过的字符都能够被编码并在网络中传播。

所以,Go语言的出身决定了它具备极高的品质。而且,Go语言也是一种从第一个版本起就开源的程序设计语言,所以来自世界各地的很多程序员也是第一时间就发现并开始使用它,然后立刻发现了它所具有的很多美妙的语言特性,比如GoRoutine,这是一种从语言层面上就支持并发编程模型的特性。在并发中使用最频繁的、也是占用时间最多的上下文切换,其他语言基本上是通过线程的切换来完成的,但是通过在语言中内建的资源调度器,Go语言使用比线程轻量得多的GoRoutine完成了上下文切换,比前者节省了高达80%左右的时间。可想而知,这会给涉及密集上下文切换的重度并发程序带来怎样的性能提升。尤有进者,Go语言的并发模型的基础是一种有着严格数学背景的、称为CSP(Communicating Sequential Processes,通信顺序进程)的原语,所以在实际工程中具备几乎无懈可击的可靠性。这一切都深深吸引着这三个豌豆荚的工程师。图1.2展示了Go语言负责人转发并评论PingCAP的推文。

图1.2 Go语言负责人转发并评论 PingCAP推文

黄东旭和刘奇都在豌豆荚的基础架构组,这个组的英文名字叫作Technical Infra。刘奇最早还在京东的时候就开始使用Go语言,在京东期间他还把Go语言的标准库源代码(又称源码)几乎都读了一遍。刘奇去豌豆荚面试时,黄东旭是面试官。根据刘奇的回忆,他在面试过程中黄东旭除了考查他算法,大部分时间在和他交流Go语言的各种使用心得。而崔秋则是在广告和游戏业务组,也十分热爱Go语言,用崔秋自己的话说,通过几次内部的黑客马拉松比赛,他马上就和同样热衷于Go语言的黄东旭他们成了“臭味相投”的同道中人。正好崔秋所在部门的业务最早遇到了缓存问题,所以崔秋成了Codis的首批用户,而Codis又是开源的,所以,同样擅长编程的崔秋不仅在业务中重度使用Codis,还动手对Codis的源代码做了不少改进。就这样,三人基于对技术的共同爱好越走越近。

黄东旭小传

黄东旭来自广西南宁,是一位狂热的编程爱好者。在小学期间他无意中接触到Basic编程的图书,之后便对计算机相关的书籍产生了浓厚的兴趣,这位少年通往编程世界的大门也随之打开了。

我每周都会让我母亲带我去书店,去看那些计算机相关的书,一待可能就是半天或一个晚上。

1997年,黄东旭拥有了自己人生中的第一台计算机。小学毕业时,他已经能玩转基本的C语言、Pascal;初中毕业时,已经能够用Visual Basic做一些小工具的开发;高中毕业时,在Linux、GNU及自由开源软件运动的社区里他结识了很多志同道合的网友。

大多数同龄人很难理解黄东旭的这些所作所为,“怪咖”这个称号也就伴随了黄东旭几年的时间。

所以还是蛮孤单的,后来我也习惯了这种状态,享受起这种孤独的时光。我更喜欢跟机器打交道。机器让我觉得非常舒服,觉得一切尽在自己的掌控之中,所以很有安全感。它就相当于是你的特别好的伙伴。就算我开着计算机不干什么事情,就是看着它,也会觉得很温暖。

也正是因为年少时的这段经历,让黄东旭成为一个外表乖巧,内心却又比较叛逆、固执、任性的人。他还有一个鲜为人知的身份——摇滚爱好者(见图1.3),并且听摇滚乐与他喜欢开源软件之间还有着某些特别的联系。

图1.3 摇滚爱好者黄东旭

我接触开源是在初中,当时正好也开始听摇滚乐。我那时还住校,然后周末的晚上就会溜出去看演出。

现在的黄东旭,吉他、贝斯……基本上他都会玩。摇滚代表一种独立自由的人生姿态。他觉得坚持独立思考是这个世界特别稀缺的品质。比如音乐和审美,大多数人可能不知道自己喜欢什么音乐,或者不知道什么是美,或者大家认为的美其实是别人说的美,可能没有经过自己的思考。他觉得审美也是一种能力,尤其是独立的审美能力。他对计算机和摇滚乐的喜爱,源于他对秩序和美的渴求,这也是开源核心价值的组成部分。

UNIX哲学

20世纪60年代,贝尔实验室、麻省理工学院、通用电气公司合作了一个名为Multics的项目。由于合作中存在诸多问题,最终Multics项目失败了,但项目组的核心成员之一肯尼思·汤普森不甘失败,他认为这个项目中还是有一些非常有价值的想法和积淀的。于是,他用汇编语言重新写了一组核心程序,同时包括一些工具和驱动, 以及一个小型文件系统,并起名Unics。后来,肯尼思·汤普森的同事丹尼斯·里奇(Dennis Ritchie)发现这个东西太好用了,但是移植性很成问题。因为每次将Unics安装到不同的机器时都要重新用汇编语言写一遍,很不方便,于是,丹尼斯·里奇就把它用C语言重写了一遍,同时把名字改为UNIX,这一年是1973年。

经过多年的发展,UNIX的技术越发成熟,如今已发展成为一个支持抢占式多任务、多线程、虚拟内存、换页、动态链接和TCP/IP(传输控制协议/网际协议)网络的现代化操作系统。它以直接或间接的方式,构成了目前所有主流操作系统的基础。UNIX中的一些重要设计因素到如今都还在使用,甚至形成了一组称为“UNIX哲学”的技术原则,其核心思想一言以蔽之,就是“松耦合”,也就是以简洁自洽的方式设计模块化组件,每个组件只完成一项工作,彼此之间边界清晰,然后用管道的方式,把复杂的工作用各项单一工作串联成流水线。换言之,就是软件组件之间各司其职,以松散的方式独立开发和迭代,只保持接口的相对稳定性,这样即便某个组件出了bug(漏洞),也能单独对这个组件进行修正升级,而不会影响其他组件,这就可以大大减小整个系统的“爆炸半径”。

UNIX哲学对黄东旭还有像他一样优秀的同事,都产生了深远的影响。

第二节 Spanner论文和MongoDB的启发

Online Schema Change(《在线数据库表结构变更》)是一篇带有一个很神奇想法的论文。看到它以后,我们发现了整个拼图的关键,这回需要的东西都齐了。

——黄东旭,PingCAP联合创始人,CTO

Codis解决了缓存的扩展性问题,但是,数据访问的三个层次中,最底层、最核心,也是最重要的一个层次,就是工程师无时无刻不在与之打交道的数据库层。能不能把Codis的开发经验也应用到数据库中呢?我们通过利用单机版的缓存服务Redis的基础能力,开发出了Codis,那么是不是也有可能在应用最广泛的开源数据库MySQL的基础上,开发出一种支持弹性水平扩展的分布式数据库呢?

其实互联网行业龙头谷歌公司很早就开始研究分布式数据库,并且已经实现了用在谷歌自身业务中的版本——Spanner。但是,可能是由于与自身业务绑定得过深,也可能是出于其他考虑,谷歌并没有把这个数据库软件开源,而是采用了一种更有意义的方式向世界展示,就是从2012年左右开始发表了一系列的技术论文。黄东旭等人在2013年看了这些论文,尤其是这些论文中的第二篇,让他们看到用类似Codis的实现方法做分布式数据库已经有人实现了,换言之这件事情是肯定可行的。这对于有追求的程序员来,是一种莫大的鼓舞。

我们一开始觉得,这东西半年肯定能做出来。你想嘛,我们Codis才花了两周时间做出来,就算这个东西难10倍,两周乘以10,那也就才20周,还不到半年。但到现在都六年了,还不能说我们已经完全做到了理想程度。

但在工程的世界里,完成永远比完美重要。黄东旭、刘奇还有好几个人都不约而同地回忆起2016年的大年三十,那天大家还在调试代码,并且就是在那几天联调通过。这个代码是数据库服务器的物理基础,也叫作持久层的关键服务,它的基础数据结构是KV(Key-Value,键值)对。有了它,数据库中最核心的组件就算做出来了。

这个组件,就是TiKV。而建立在这个组件之上的数据库,就是大名鼎鼎的TiDB[DB为database(数据库)的缩写]。为什么名字以“Ti”开头呢?很多人都知道的是,Ti表示的是元素周期表中的钛元素。钛是一种高端金属材料,既轻又结实,而且用途广泛,从眼镜的镜架到飞机的表面材料都有应用。这个名字应该饱含着黄东旭和刘奇他们的希望,那就是希望这个产品和钛金属一样经得起折腾。但是,很少有人知道这个名字还有另一层含义,它是这个产品最初的开发团队的名字——Technical Infra的首字母缩写。

以键值对实现的持久层,就是曾经风靡一时的所谓NoSQL技术,它的代表是一款开源产品MongoDB。虽然有数据库(DB)之名,但是它却完全脱离了SQL而直接操作键值对。“NoSQL的出现虽然解决了水平扩容的问题,但牺牲了SQL,不支持事务,无法处理对一致性有很强要求的交易类复杂数据。”这是刘奇基于自己对NoSQL技术和产品的理解对这项技术给出的综合判断。因此,在决定架构的时候,他们选择了按照Spanner论文中的做法,把数据库层(SQL层)和持久层(KV层)分离。在谷歌的产品线中,持久层的名字叫F1,所以,TiDB/TiKV就对应于Spanner/F1。在潜意识中,他们也感觉这是一个更好的选择,因为它符合UNIX哲学中的松耦合原则:所有能够分离的东西都尽量分离。后来的发展也证明,确实TiDB和TiKV分离后,虽然各自都进行了较大的改造和升级,但彼此之间几乎不会有任何影响,都可以独立运行,甚至可以各自去适配不同的数据层和持久层组件。

MongoDB也是一款明星开源产品,而且直至今日还拥有海量用户。虽然刘奇他们最终没有选择走NoSQL这条路,却也在其他重要方面受到了MongoDB非常有价值的启发,这是后话。

无论如何,选择了与谷歌相同的技术赛道,这听起来确实很酷。但这还不是最酷的,在产生了“要做分布式数据库”的想法以后不到一周,这个小团队(指刘奇、黄东旭和崔秋)就做出了一个令所有人大跌眼镜的决定:

辞职创业。

第三节 做一家把开源作为核心战略的公司

太想做这件事了,一刻都不愿意等待!

2015年初的冬日寒风中,刘奇、黄东旭和崔秋并肩走在北京东升科技园内。虽然没有事先说好,但他们都知道这场谈话后,三人将脱离稳定的职场,跃入创业的浪潮。

公司的名字,再一次反映了创业团队的硬核技术范儿。PingCAP(见图1.4)这个有点古怪的名字,发音是/pɪŋ′kæp/。它分为两个部分,即Ping和CAP,得分开来解释。

图1.4 PingCAP的设计海报

Ping是一个UNIX命令。它的功能是测试机器的连通性和访问性能,它们是高效和可扩展性的基础指标。

而CAP则是分布式系统的核心概念。具体地说,C表示一致性(consistency),A表示可用性(availability),P表示分区容忍性(partition tolerance)。

所以,其实公司名字的含义就是高效可扩展的分布式系统,没有一定技术基础的人还真理解不了。“当时看了一下,发现域名pingcap.com还没有人注册,那么就是它了。”黄东旭又为这个已经充满技术味儿的名字加了一条务实的注解。

接下来就是一个所有创始团队都会面临的问题:创始团队的角色和分工。关于这一点,崔秋回忆道:“最开始,大家一起写代码,这也是当时最开心的一段时间。但是那个时候我们也面临一个问题,就是一个公司里边不太需要三个CTO,所以,我们开始有了一些分工。我当时其实是在做自己人生的一次选择,还是很纠结的。因为我之前的想法,不说成为一个伟大的技术人员,也是要做一个优秀程序员。尤其是出来创业了,更希望透过开源社区,能给业界带来一些不一样的东西。可是,如果说为了公司好的话,考虑这个问题的角度可能就有一些不一样了。所以,那个时候我就做了一次对人生来说很重要的决定,就是不担任技术负责人,而是去负责公司一些偏内部运营方向的事情。”

一个成功的团队,当然不仅需要技术角色。但PingCAP创始团队中的所有三个人都是资深的技术人员,都对技术有深深的热爱和很高的追求。崔秋的选择是极其难得的,虽然不做技术负责人,但他以一个非常懂技术的身份为公司招聘了80%以上的技术力量,并把一家技术驱动的公司的管理和服务做到井井有条,而且尤其深得技术员工的喜爱,让公司成为他们成长的良好土壤。当然,崔秋在任何时候都是一个非常强的技术工作者,他也利用自己的技术优势,对PingCAP进行了很好的内部服务和中台系统的选择与开发。这些都是他被所有人称为“PingCAP大管家”的原因,他自己也很为这个称号而自豪。

而在CEO(首席执行官)和CTO的人选方面,PingCAP也与众不同。一般来说,技术实力更强的人会做CTO。但在PingCAP,技术更强的人是做CEO的,而且“在确定这个原则时几乎没有任何阻力地就通过了”。经过内部讨论以后,黄东旭出任CTO,而刘奇则做了CEO,“他也更成熟稳重些”。所有人对自己的角色和分工都感到满意。价值观一致的团队,的确讨论不累。

分工和产品明确后,就要决定最关键的方面:核心战略。要创业做分布式数据库,谈何容易!凭什么谷歌花费巨大人力财力才能做出来的产品,几个国内工程师也能做出来?这种质疑似乎完全没毛病。刘奇在微博上发了一条招聘帖(见图1.5),浏览量近百万,却一份简历都没收到。但是另一方面,在PingCAP连公司都还没注册下来时,就已经有了第一个员工——唐刘。他来自哪里呢?开源社区GitHub。

图1.5 刘奇创业后的首条微博

我们一直坚持做开源,最后这变成了PingCAP的一个标签,变成了一个根本不可能撕下来的标签。

唐刘和PingCAP创始团队接触还是在做Codis项目期间,他是这个项目的积极贡献者,双方在网上有过比较多的接触,但在线下从未见过面。2015年4月1日,唐刘忽然接到了刘奇的一个电话,刘奇直截了当地问:“我们创业了,做分布式数据库,你要不要过来?”面对这么突然,甚至有点突兀的问题,唐刘最后的回答竟然是“Yes”。

开源就这样给PingCAP带来了招聘的破冰,这是PingCAP将开源作为公司的核心战略后的第一个成果。后来,开源核心战略一直是PingCAP的制胜法宝。

刘奇谈作为核心战略的开源

我们讲战略的时候,通常有一个潜台词,叫战术。那么战略和战术的差别体现在哪里呢?比如说,我要做一件事情的战略规划是5年、10年、20年,也就是说每一年在做这件事情的时候,我都是坚定不移的,不会为其他的东西让路。但如果是战术开源,它通常的结果就会演变为使用KPI(关键绩效指标)考核的开源,大家会每隔一段时间评估一次开源带来了什么收益、效果或者是商业层面带来多少营收。而如果是要10年、20年坚持做一件事,那你通常不会这么干。

我们对开源的信仰是极坚定的。比如今年我有一笔预算要支出,那战略的支出和战术的支出差别是什么?如果是战略支出,那么什么都不需要抢,其中的一部分我先划拨出来,剩下的钱如果不够满足战术项目,就再想办法。那如果把开源当作战术的话,大家就会想,某个项目我投进去比如说1000万元要带来3000万元的营收,这个开源项目投了1000万元,好像没带来什么营收,那优先级就要往下降。到最后能分到开源项目上的投资,不好意思,今年就20万元,你就这么干吧。这就是战略和战术的区别。

唐刘小传

“如果哪一天PingCAP决定不再开源了,那我肯定立马就走人——这是个原则问题。”PingCAP首席架构师唐刘(见图1.6)曾经说过这样的话,他也是PingCAP的第一位员工。

图1.6 唐刘在开源中国的演讲

唐刘将自己与PingCAP的结缘形容成一场“网恋”。在加入PingCAP之前,唐刘跟PingCAP的创始团队可以说是“最熟悉的陌生人”,他们从来没有见过面,就算走在路上也互不认识,只是在网络上大家比较聊得来。在之前的聊天中,他们提到过一起做一个开源的分布式数据库的梦想。有一天刘奇突然联系唐刘说自己创业了,做的就是分布式数据库,邀请唐刘加入。唐刘虽然很感兴趣,但还是一口回绝了,因为他在珠海定居多年,不想去北京。没想到刘奇却说:“不用来北京,你在珠海上班,在家上班就行。”唐刘一听,果然来了兴致,立马飞到北京跟刘奇他们见面。那时的PingCAP还是个简陋的“小作坊”,但是唐刘与刘奇、黄东旭、崔秋见面交流后,果断决定辞职加入PingCAP,因而成为PingCAP的第一位员工。

唐刘是一名重度开源爱好者,他认为开源是一个生态闭环,不仅仅是开源代码,还要包括维护的全过程。开发者应当将细小的事情做到极致,将代码分享给更多有需要的人,解决他们的问题,而不是把代码开源出来就不管了。

加入PingCAP后,唐刘主要负责下一代分布式数据库TiDB和分布式存储TiKV的开发。虽然谷歌的Spanner和F1论文为他们提供了参考,但是实操时还是需要自己摸索。唐刘等人根据论文的论点,先通过朋友或者其他渠道搜集更多的信息,再尝试解决一系列技术难题,工作难度很大。因为他们是全世界最先实践这种拥有超大规模集群、可在线进行Schema(数据库对象的集合)变更的开源软件的人,没有参考物,一切只能靠自己摸索。

相关图书

ChatGPT与AIGC生产力工具实践 智慧共生
ChatGPT与AIGC生产力工具实践 智慧共生
专利写作:从创意到变现
专利写作:从创意到变现
产品经理方法论——构建完整的产品知识体系(第2版)
产品经理方法论——构建完整的产品知识体系(第2版)
程序员的README
程序员的README
架构思维:从程序员到CTO
架构思维:从程序员到CTO
开发者关系实践指南
开发者关系实践指南

相关文章

相关课程