前言 一场关于开源的生死抉择
创业的早几年,投资圈的朋友都说我的“赌性”很强,而且是拿“生死”在赌,有的做法甚至像是在“自寻死路”。这样做的好处和坏处都很明显:赌赢就赢得很大,赌输就打道回家了。熟悉我的人大概都知道,我对打德州扑克没有兴趣,这倒不完全是因为没时间,而可能是我在潜意识里觉得,只有足够有价值也足够有挑战的目标才能激发出我的“赌性”。
“豪赌”的初衷是什么?
选择数据库作为创业方向,并在第一天就选择完全开源的模式,这在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刘奇