内容来源:2021 年 6 月 5 日,由 SegmentFault 思否主办的 2021 中国开发者生态峰会圆满落幕。会上,Apache 软件基金会董事,Tetrate.io 创始工程师,Apache SkyWalking 创始人吴晟发表了主题为《SkyWalking 与 Apache 软件基金会的那些事》的演讲。
分享嘉宾:吴晟,Apache 软件基金会董事,Tetrate.io 创始工程师,Apache SkyWalking 创始人
速记整理及发布:SegmentFault 思否编辑部
我的内容会相对来说比较轻松一点,我们今天会讲一些 SkyWalking 整个项目从 2015 年到现在六七年的的时间里面所经历的一些事情,以及我们在过程中间做的选择。我来自于一家北美的公司 Tetrate,是一家做 Service mesh 的公司。我自己是 Apache 基金会的董事以及 Apache SkyWalking 的创始人。
SkyWalking 实际上现在是 Apache 的顶级项目,应该是当前全球规模最大的开源 APM 系统。如果大家熟悉监控领域和应用性能管理领域的话,从 2000 年或者 98 年开始,这个领域从来没有一款软件是完全靠着开源生态或者以开源为背景的生态去构建起来,所有全球知名的 APM 软件都是商业化背景。所以 SkyWalking 最初并没有像今天看到的这么复杂,它其实只是为了解决很简单的问题,而开源和开源社区把它推到了今天这样的一个位置。今天的 SkyWalking 实际上已经非常非常的复杂,它涵盖了大家监控你所看到的日志、指标、分布式追踪、事件探查,以及所有的各种的日常常见的操作系统、容器,以及前端的一些架构。甚至有一些人还在做包括手机、微信小程序等等一系列技术栈的扩展,去探查各个平台的指标、性能数据以及前后观点式的性能表现,所以它会是非常非常庞大的状态。
大家也会发现其中有大量的技术栈,包括像 Prometheus、OpenTelemetry、Zipkin、Filebeat、Fluentd,会有很多全球厂商的其他的生态系统。我们并不是从第一天开始自己来做所有东西,我们会和非常非常多的全球的厂家还有基金会的项目去做合作,这就是为什么项目能够走到今天。我们有很多的朋友,来自于全球其他厂商的朋友,去给我们相关的支持,去让事情对大家来说集成起来比较方便,使用起来也符合大家的习惯。这是我最近从系统上抓的一张图,项目是 15 年底的时候开源的,它有非常长的稳定期,没有多少人来参与项目,在 17 年 18 年的时候,项目贡献者的都是非常非常少。我们在 17 年底加入 Apache 基金会的时候,项目的贡献者加上我只有 20 多个。到今天,不算太完全的统计,将近有 500 个代码贡献者,而且不包含文档,不包含其他的宣传。
SkyWalking 不管是哪家公司,从来没有过所谓的叫做社区运营的岗位,我们是靠着开发者自己,或者说靠着项目,靠着我们对开源生态的理解,去和大家去配合,去和全球的其他项目配合去完成项目的孵化和扩展。这是我们在SkyWalking 在 Apache 的官网去探到的全球的访问情况。
不出意外的话,所有的 Apache 项目,包括 Apache 官网,中国绝对是统治级的访问量。不管在哪个基金会,中国一定是开源项目的最大的使用者,但是至少我们目前还不是这些项目最大的贡献者。对于 SkyWalking,对于整个 Apache 基金会、对于 CNCF 、Linux foundation,所有大家能想到的全球性的基金会,我们都还不是最主要的贡献者来源。但是大家会看到中国孵化的项目,是曾经连代码注释都是拿中文写的项目。如果你真的愿意去做全球化,你愿意以合理的方式去做全球化,那么你一样可以去收获全球的用户,这样你可以看到除了某一些断网的地区或者非洲几乎没有 IT 产业的地区之外,全球都有非常非常大的使用者。而且 SkyWalking 在中国、在北美、在印度、在东亚、东欧以及西欧地区都有不同的厂商,基于 SkyWalking 去从事他们的商业化的产品建设,比如说有英国的厂商、波兰的厂商,有在南美的开发者,他们都在做自己的商业化的事情,包括我自己在北美的公司。如果你用合理的方式运作开源,你再做一些适合于自己的思考,如果你的项目不是那种排他性的,你其实可以有的想象空间是非常非常大的,就像大家今天看到的,我们经常在说的 Linux 的操作系统,它的所有的经济利益不全是 Linux 的人去挣的,它得到的是更多的产业级别的支持,更多的企业,更多的不同的方向,但从事情中间得到正向的产业的循环,所以我希望分享这个给大家,大家会看见说每个月有 15000 个 session 在访问我们的系统,真正的访问量就更难去计算,因为所有的指标都是以 session 级别为标准去记。回到最初最早15年的时候,其实我们就在说开源项目到底怎么样,才是好的开源项目的起点。所有的开源项目,它如果只是为了开源,或者说你去做开源的想法,那事情往往是很难成功的。SkyWalking 也是一样,如果它只是为了解决问题,那它的问题是什么呢?
在 10 年到 15 年期间,大家应该从最早的 Dubbo 的生态,从开始有 springcloud 的生态,从当年的 ESB SOA 开始,所有的应用从单体应用变成了合体应用。那么我们在当年遇到了样的问题呢?我们当年我还在给联通做项目,我们遇到问题是八个厂家做一个项目,你可以想象一下这个状态有多灾难,所有人都在指责说别人的系统不稳定造成整个分布系统不稳定,就像大家现在在组内去指责对方组的程序写的不好,这是一样的。但是当你变成八个厂家的时候,沟通会更难,因为公司内你还有老板可以拿出来拍板,现在你连拍板的机会都没有,所以当时在做 SkyWalking 的时候,开发者全都接受了一个训练,我们让大家知道,当你的分布系统出问题可能不是你的代码的问题,你的上游、下游、网络,中间的 esb 的组件都有成为任何一个短板。
所以 SkyWalking 在最初只是为了解决这样很简单的问题。当时其实已经有两个在领域很有名的开源项目,Zipkin 和 Pinpoint,那么为什么我们决定要从头开始做?Zipkin 现在还在,大家可以去看,首先它功能很简单,它没有准备去做复杂的系统。它的设计是为了简单的功能准备的,这意味着它真的会变成我们现在正要做的事情,它只是 demo,不是可以大规模生产用的东西。而 Pinpoint 是韩国一家做搜索引擎的公司 NAVER 做的产品,而且它那时候用了当时很火的大数据。没有用的原因其实很简单,今天大家有很多的原因去对标 Pinpoint 和 SkyWalking,但是作为监控产品,如果你用了大数据,那么,你可能比目标业务系统更难稳定。因为 Hbase 是高度分布式的系统,请问你用了分布式系统来监控另外分布式体系到底谁先 crush,监控系统第一个就 crush 了。我们没有想着要去做世界级 apm,我们想至少我们能解决当前的问题,所以我们写了非常非常简单版本的 SkyWalking,大家现在在 GitHub 上面都可以去翻到最早的 1.0 的代码,非常非常简单,甚至那时候我们都尝试过使用 Hbase,我们看看它是怎么做的,我们用他们的模式来做会有多少问题?所以呢,Skywalking 在很长一段时间之内都是 testing project,我们在 GitHub 上挂着,没有任何的宣传活动,没有任何对外的接洽,仅仅是把代码弄在上面。
甚至那时候 License 都是,那时候应该有一段时间是 GPLv3 的。我们的意识上来说,我们就没准备把它做为一个 community 去玩,我们更多的认为,反正我放了一个项目,并且有一定的保护作用,放了 GPLv3,大家发现从最早的 v1 到 3.2.6 花了两年半的时间。SkyWalking 在整个时间内都是 testing project。它没有任何的 kpi,它不完成任何指定的功能领域,它只是参加项目的人为了解决日常的问题,去贡献代码,能写就写点什么,能完成什么特性就完成什么特性,更多的是娱乐性的工作。或者说它是一个测试,它不是测试的技术,它是测试在大家脑子里面的一些想法,看它们是不是可以落地。3.2.6 为什么是 3.2.6,因为它是 3.0 的最后一个版本。以及 3.2.6 是我第一次站到台上去,在 GOPS 全球运维大会,我第一次站在台上去讲:有这样一个项目,它要完成什么样的功能,它能够帮大家解决什么样的问题,它是 Apache 2.0 开源的项目。这是第一次,我们把它作为真正的开源项目,让自己作为真正开源项目参加者去看项目。而开源出来之后,实际上大家会发现,比如说从初始适用的用户都开始快速提高,但是大家的反馈更多的是:哎呀,你还不完备,这个事情你做不到。
因为做监控系统,上线是非常非常困难的。用户很难把他自己的身家性命压在不稳定的监控系统上,他所有的数据都是来自这个监控系统,虽然你不承载任何商业数据,但是你如果黑掉,等于用户的整个生产系统就黑掉了,这是非常危险的一件事情,SkyWalking 在非常长的一段时间之内是没有生产可用,包括 3.2.6,其实一直以来就没有在完整的生产环境运行,更多情况下是在准时产和测试环境下运行,或者在压缩环境下运行。更多的把它当做工具而不是 apm 平台在用。起步阶段我们希望去扩大社区,我们有两个选择,Apache 或是 CNCF。我那时候已经去了华为,所以从理论上来说 CNCF 这条道路是通着的,如果大家不熟悉 Foundation 的区别的话,其实 CNCF 会更像厂家驱动,商业的气息会更浓。他需要厂家的干预,他需要厂家出资或是出人力去保障。而项目会更多的挂着企业的 logo,而当年的 SkyWalking 是个人项目,它并诞生于华为,因为我们是在业余的时候做的。它从头到尾就没有把 ip 归属在任何公司名下,自然也没有办法很简单的转移给所谓的华为,让华为去走 CNCF 的道路。
大家如果去搜 CNCF 新项目的 proposal,其实会找到 SkyWalking,因为我们曾经申请过,而且 CNCF 的 coo Kris 他其实也邀请过我们去做 presentation,但是我们最后没有选择去走很长线的流程,因为实在是太忙了。而且对于项目来说,在当时我们更关心的是项目能不能有更多人参与。至于是不是有那么多人宣传项目,对于我们来说并不是那么重要,因为自始至终,这也不是 KPI 项目,因为没有人考核。即使我们当年在华为,也不是考核制的,跟公司没有直接的关系,不是说你要有多少贡献者,你要多少 star 公司好像才考核你,今天才有奖金。这个事跟 SkyWalking 向来没有太大的关系,而且我们选择 Apache ,有一个很方便的原因是因为 Apache 需要的是 mentor,后面会讲到,刚好我周围的朋友,一个在澳大利亚,一个在华为,一个在上海。我们可以很快速的找到三位 Apache member 成为 SkyWalking 的导师进 Apache 孵化器,我们当时在进 Apache 孵化器之前就做了调整,从 GPLv3 改到了 Apache。
改的原因其实有两点,这个原因并不是 Apache 触发的,原因来自于阿里,阿里的团队联系到我们,说他们想和我们去合作共建一部分功能。
在当时很早期的时候,其实一个大事情能够出开发者已经是很少见的事情。但是他们说有顾虑你这个东西不能是 GPLv3 的,不然我在公司会报不过去,其实当时是很简单的原因,我们认为只要有更多人参与,无所谓它是不是 GLPv3,谁可以把它的商业化做得最好,谁可以拿它去挣钱,我们是站在公平的角度上去干这件事情的。
我们当时很快速的在社区内做了决议,把 GPLv3 改成了 Apache v2。今天我们站在更严谨的层面上来看的话,其实 v2 给了大家的是,更好的做商业分发的机会,比如说更多的产品在包含 SkyWalking 做二次公放,大家今天去看到很多的私有云平台、很多的产品里面都会原生包含 SkyWalking 的全部或者二次的分发版本。这非常常见,可能大家在非常非常多的开源项目都会看见部分或者全部,这也为我们之后去做跨组织的协作做了很好的基础。
但当我们真正去踏入 Foundation 的时候,我们会发现中间是有非常大的 gap。在很长一段时间,开源对于我来说是娱乐。但是当我把项目带进 Apache 之后,我更多的像职业的开源开发者。与此同时你会发现你自己需要处在不同的角色上,当我代表 Apache 来发言,当我在 Apache 里面说任何话的时候,不能是商业的,它是要追求软件项目本身的质量,安全和迭代性未来的发展,也许在我心中有一条怎么挣钱的路,但那不能放在项目层面上。所以你后来你会发现,你会受到各种约束,这也是 Foundation 带给大家的,它给你的非常好的名头,觉得你很有名,你是 Apache 基金会的项目,但同时也会给你更多的约束,你不能不限制的去使用在 Apache 基金会的 branding,你不能无限制无休止的没有编辑的去使用这个知名的商标权,因为从 Apache 基金会并不想处理。
Apache 基金会有 350 个以上的点击项目。在全球,基本上大家所有用到的软件的前台,后台某些组件一定来自于 Apache 软件基金会。但是同时,Apache 软件基金会一年的运作成本只有不到 160 万美元,而且这些钱几乎没有一分钱是以工资的名义发给 Apache 软件基金会的成员,所有人都是在以某种逻辑干活,你做了某个项目,也许是因为爱好,或者是写书、做培训,你有自己的逻辑,这让你在基金会里面的活动是会有利益的。
当然你们会不会有爱好?会。
但是爱好的参与者他一定是相对来说低强度,比如说他每周的时间很难超过五个小时,因为超过五个小时就相当于他要浪费一天的时间,而这个对绝大多数人来说是不可能的,特别很多人本来就要上六天班,再来五个小时,这不太可能。而绝大多数我们看到的中国的志愿贡献者是什么样子呢?他虽然下班比较晚,但是他对这个事情有兴趣,他觉得要贡献点东西,所以在 SkyWalking 提交的邮件中,经常会发现有人凌晨两点钟凌晨三点钟提 pull request,这个叫爱好。如果你面临一个职业开发者,他绝对不会这样,SkyWalking 有很多的职业开发者,我们晚上看到的职业开发者一定是美国、南美、阿根廷、巴西的,因为他们的晚上是正常工作时间,这个是职业开发者。面临不同的人,要知道他们喜好是不一样的。大家知道基金会有 22 年历史,最早是 98 年 99 年,基金会是相对来说大家认为比较老古董的基金会,事情讨论的会很慢,因为它都是异步的,大家通过邮件所有事情都要等 72 个小时,因为它为了让全球所有的人能看见并且要绕过周末,就变成了要三天。任何的决议,任何很小的事情,只要上升到决议层面上,就是超长时间的等待。
基金会也有好多东西大家觉得不习惯,我们一直在说 Apache 基金会,那么到底什么是Apache 基金会?这里其实是 Apache 官方的解释,对于这三句话每个人心里面都有自己的解释。
有些人是商业逻辑的解释,有些人是对于知名度对利益的追逐视角下的解释,有些是对于软件开发,对于 coding 这件事情的热爱,有些人有帮助他人的想法,有些人是想减少他人的负担,很多很多,每个人的想法都不一样。
基金会就是多元化的,出发点是不同的,不要用你自己的出发点去随意揣测对方为什么要干这件事情,他的解释很有可能完全出乎你的意料。因为有一些人真的是为了爱好在干活,比如说我们见过有些东欧的一些地方的很年轻的,16 岁 17 岁的工程师,他会为了自己 20 岁以后创业的理想去参加项目,去长年的开发一个可能在非常长的时间内都没有两个人在用的功能。SkyWalking 有个子项目是东欧人开发的,是把你所有的监控数据反向的导到 ide 里面,就当你看到代码的时候,它能告诉你这行代码在生产环境里面的系统指标是什么样子的,而这个东西目前没有任何商业场景,但是他已经在事情上面做了将近两年的时间,他很年轻,他可能在放长线,他认为这对他以后不管是拿这个事情创业,还是拿这种精力去为自己准备创业都有帮助。而这个对于像我职业开发者来说,我认为是很不划算的事情,我的时间不应该拿去做没有商业利益的、长期的、高复杂度的事情,它代码量非常大。
这是一个简单的例子,是想告诉大家,你参与进去的时候,你要保持相对比较谦虚的心态,更多的是要去问。同时大家要知道在当别人问你的时候,他不一定是反对你,他更多的是希望你更加如实的描述这种情况。我们今年也看到了好几个中国本土的项目捐赠给 Apache 孵化器,这中间我们就发现了很多问题。疑问经常会被中文的环境理解成质疑,因为中国的习惯是我们所有的事情都是先讨论好的,当我发公开的事情出来的时候,就代表决议已经形成,没有人会在公开场合说到英文的一个词,就是 argue,argue 翻译成中文基本上就是吵架这个概念。在整个文化环境里面,你需要能够有一定的耐受力,当你去合作的人跟你不是一个文化的时候,你要怎么坚持住。所以刚才说的那些多元化的事情,它保证的同样也是多元化的状态,它要保证厂商都出力,比如说,你的项目里面不能是由单个厂家来进行控制,尤其是顶级项目,它毕竟是多元的,不管是从性别、地域、肤色、年龄,各方面都要是多元的,它的代码要值得信任,不能有恶意的程序故意被埋在里面。比如说,我们能在国内看到有一些项目居然在用户使用开源版本的时候,居然在收集用户的部署信息。他居然能够知道这个项目在客户线上开源用户部署了多少分,如果这是商业合同的副产品,我觉得没有问题,但是如果你对开源用户也在收取信息,那实际上是非常危险的举动,这种情况在有些国家,有些地域,它甚至涉嫌违法,因为你在盗取用户的隐私数据。安全更多的是既有代码本身可获取安全,也就是说,一旦代码交付给你,我是不可撤回的。另外也有安全 security 这个层面,因为他开放了源码,开放了所有的版权给你,你可以更快的去修复安全漏洞,甚至你自己打 patch ,这也是很常见的事情。
那 community over code 其实早上俊平也说了,所有人在讲 Apache 文化的时候都会讲这事。这句话其实每个人会有不一样的理解,但是最后有一点大家一定是共识的:人是最重要的。
所以你怎么样让项目做到真正的透明,让大家愿意花时间来参与这个项目,大家相信你或者相信项目都好。一个简单的结论:在 ASF 和 CNCF 之间,如果你要做厂家主力,要快速进行商业 marketing,这里不存在情绪色彩(因为我们公司自己也在 CNCF 里面做,比如我们公司很多人在做 Envoy,因为做 Service Mesh,使用 Envoy、istio 甚至单独厂商不够的开源项目),不是说 ASF 比 CNCF 好,至少从我个人角度,我不认为这两者有任何的可比性,这是完全不同的运作模型。你需要去做正常的选择,但是你要知道它的差别在哪,ASF 一定不是利益先行,它一定是开发者先行人先行,怎么能够团结起来是最主要的,而 CNCF 是厂家的利益高于一切。
我要以 vendor 为背景,CNCF 的项目,它要求的 diversity,也要求diversity 的多元化,它要求至少有三个厂家在参与,它并不要求说你要来自于很多地方的开发者,它很在乎你是哪家公司,所以在和 CNCF 签 CLA 的时候,你要说你是哪家公司的,你签的的邮箱,基本上还是公司的邮箱,公司要附属的一起签 CCLA。
在选完基金会之后,其实我们会有长期的运作项目的过程,里面当然有非常非常多的故事,非常非常多的痛苦也好或者是成功的经验也好,但是我们去比较了非常多,因为我自己也参加过中国的很多开源项目,从 Echarts、ShardingSphere、APISIX、DolphinScheduler 这些 Apache 项目,或者像 CNCF 的包括 OpenTracing、zipkin,我其实都有在这些项目里面。我们能看到的,不管是中国和国外,你作为项目的 leader 或者项目的核心团队的成员,你要去保证你能够做到这些事情,虽然做到不一定能成功,但是你没有做到,就会对你的项目、对你的社区伤害非常大。开放是很简单能够说出来的词,但是当你的其他核心人员都不来自你的公司,不和你共享商业利益的时候,你怎么能够相信他们的决策?以及怎么样选择那些你可以相信的人?
相信是双向的。你越相信他,他给你带来的迭代速度,他给你带来的特性能力就会越强,他会逐步深入。而如果你所有东西都在自己手上掌握着,那恐怕你的时间投入,就是项目的极限。SkyWalking 现在应该有 80% 以上的代码都不是我写的,我不了解详细情况,更多的是别人问起来我都是照着文档来,因为我已经不知道他们把项目改成什么样子了。我知道大体是什么样,我知道数据流是什么样的,但这就是极限了,而且这是在我在作为职业开发者的情况下。如果你不是百分百全职,估计你理解的东西就更少。
远程的模式其实变相的说就是异步的模式,这在中国很多工程师心里面也是永远的痛,你问了问题发现没人鸟你,别人回答你的时候,已经几个小时过去,中国工程师很喜欢问句子的时候问半句问一句,这个行不行,行又怎样,不行又怎样,下面有个人回不行,好,这一天就过去了。这不是废话吗,你要掌握一些最基本的远程工作的技巧。以及当大家像我这样工作的时候,因为我自己的公司在美国,我们的工程师从最东的新西兰日本市区到最西的梅西市区,几乎每市区都有超过五个工程师。我们公司的所有的产品都是在异步的情况下完成,我们几乎没有公司级别的同步型会议。
这就是我们平常所面临的情况,你会想象在一家公司去 Run Open Source Community,这些东西你必须会,不然公司的工作都没法做。我们去做Google docs的评审,那人家就撇了一根Google docs给你,你有赞同的,有不赞同的,有想改进的,或者你觉得对方整个从头就想错了,那你怎么样把自己的意愿尽可能一次用文字表达清楚,这实际上才是 remote 模式的意义。
去年疫情的时候,我们在中国看到了很多很搞笑的事情。所有人被迫在家上班,在不停的 check 进度,不停的同步进展,领导就想知道你到底有没有出去开小差。像我们这样的公司,我们领导会在早上十点钟,给你发个邮件申请说,我一小时后给你开个会行不行,我可以回答说不行,我现在下去带孩子玩一会,要么我们晚上的时候再开会,要么你给我发个邮件用文字跟我说,是不是很着急?很着急的话你等我两个小时,等到下午一点的时候我们再聊。整个文化是从上到下,我下面的工程师也可以这么跟我说话,他说我现在没有空闲,在带孩子或是在接媳妇,我经常下午四点钟给我们黑龙江同事发微信说你在吗?他回答说我在接我媳妇,我说那到时候再说,然后我去补一封邮件给他。
如果你要去把 open source 做到那种状态,你必须要能接受这种工作模式,你要学会让大家能够高速运转。因为中国的微信文化、QQ 文化、实时通讯文化最大的问题就是被联系的人在频繁地被打断。大家觉得自己都在最高效的状态运行,但是结论并不高效,因为人在不停的被打断。这个模式,你要去理解,你要真的能接受,你要能活在状态里面,你才能和全球的社区集成。SkyWalking 有一个 Node.js 和 Python 的探针,这两个探针都来自于一个东欧公司在南美的工程师,我们和他们能进行实施通讯的时间只有一个小时,晚上九点到晚上十点,如果这件事情需要被实时沟通,必须在这一个小时之内做完,但是很有可能他不在线,或者我不在线,所有的事情都是在线上完成。我到现在都不知道那位工程师长什么样子,我没有做过一次视频会议,所有的东西都是文字。当你需要和别人写作,你要知道别人期望你的状态,因为他不希望被你拽着,因为你不是他领导,你又不给他发工资,干嘛你天天要拽着他,不就是贡献一行代码吗?犯得上吗?这就是你在做 remote 的时候,你要去解决的实质的问题。
而下面更多的叫做什么?我们在社区里面很多时候叫做善意独裁,你尝试去理解所有东西,你所有的代码必须要符合你的习惯,你要去做自己的决策,或者里面有个小团体来做决策,或者是其他任何类似的事情,这是非常伤人的,当大家经历过一次之后,以后的决定再也不理你,因为反正你决策的时候也不带别人。这个事是有差别的,我举办了公共的会议,我举办了公共的邮件列表,但是你没有反馈,所以我才会这么做,这跟我在线下做了决议才通知你,给别人的感受是完全不同的。你可以不参加,你可以默认通过,你可以无视,你可以后面再来挑战,你至少给了人家追溯的机会,人家知道你当年为什么去做这个决策。往往大家反对的不是你的决策本身,而是反对了你的决策列条。你的事情没有开放,没有说我今天要干这个事情,是因为 abcd 等原因,这是大家要注意的。
最后一条,中国人最难做的 be remote,就是别人不同意你,这是中国工程师最难解决的问题。英语文化里有句话叫 agree to disagree,你要同意一些不同的意见,大家可以以他的诉求去干活,有一些方向他可以先去探路。不一定在决策的时候,所有人举手表决必须全票通过,缺席投票的情况很常见。
在做这件事情的时候,你能不能做到这一点,作为社区的 leader 能不能容忍这一点非常重要。而你的软件技术能不能在这种环境下活着,比如说有一波团体通过了相对来说不太好的方案,那它会不会对你整个生态系统造成毁灭性的打击,可能你下一个版本功能完全就废掉了,那你的软件质量我们能保证,不管是你的自动化测试、混乱测试、压力测试、全自动的测试能不能保证件事情不要发生,能不能在前期通过理论证明、数据证明、实验性的测试能够得到结论,说你不好,我反对你这件事情是有数据依据的。而不是说以我的经验就不好,你的经验不行,中国人最爱说的是:我们公司有这么大流量,你没有,所以这事不行。这样你在开源里面,就没人跟你再聊技术方案,因为你根本就没有把别人的话当回事。也许流量在1000万的情况下不好使是真的,但是在10万的情况下好使,很多系统都是这样,你要理解到底有多少人要面临1000万的流量。就好像我们之前,我们代表了很多双十一的方案在聊,但是有多少公司需要双十一?阿里那样的公司是很少的,你方案做的很复杂,但它有没有用?这是很严重的问题。
这个是孵化的流程,我不细讲了,如果你对 Apache 孵化感兴趣,核心的点就是你要找到三个 mentor,说白了,孵化器、基金会,这些东西都是社交游戏,你能找到人,你能说服他们,用钱说服或是用人情说服,反正你自己想办法,不管什么都是社交能力。你能搞定,这事就能干。那么在 Apache 基金会,你会有非常非常多的 level ,但这只是所谓的 level,任何人在任何级别并不代表你比其他人有更多的权利,而往往是更多的义务,越往上走,你要干的活越多。其实权力都没什么,唯一的区别从 contributer 到 communitier,你的变化是可以直接向库里面提交代码。但是很多现在主流的开源软件,就比如说我自己,现在都不能向 SkyWalking 直接提交代码。如果我们没有经过其他 pmc 或者 review,我的代码也进不去。
后面的内容是我们希望让大家知道,在中国的 Open Source 的环境里面,大家常见的几个问题。这是我这么些年,在两边都感受了开源社区之后我认为的最大的痛。中国开发者对于开源项目的 maintainer 提了无限高的要求,高到离谱,高到客户提的要求都没有我们提的离谱。
比如说中国开发者说文档写的不好,源代码都给你了,你管我写的好不好?你想用就用,不想用就不用了,我没有收你钱。如果项目在很早期的时候,你想去找一些种子的开发者,这是你自己和对方对赌,你在赌对方的项目好用,对方在赌你会认他这个项目。但是随着项目的成熟,不会有这个过程。如果大家去翻所有中国原生的 Apache 的顶级项目,我可以很负责任的说,SkyWalking 一定是社区环境、回答问题的态度最不好的。因为最常见的那句话就是回去读文档,回去读代码,这是你问到的绝大部分问题的回答。为什么会出现这种情况?因为这是不对等的,我并没有为你提供商业服务,为什么我要提供对等的能力?换句话说 SkyWalking 看中的是那些能够自己动手的开发人员,他们才是社区的价值,你能为社区贡献一行代码,那我花十分钟和你聊是值得的。如果你是在现场部署的时候出了问题,那我一点都不想关心,因为我部署的时候没有问题。有很多人在社区说,这个事很着急,生产上出了问题,生产出了问题和我有什么关系?我为什么要花那么多精力在晚上九点钟帮你去看堆栈,我疯了吗?我看会电视不好吗?
所以这是大家在逻辑里经常对中国的项目提出的一些不切实际的希望,中国的开源软件作者每天就会抱怨,我好累,因为你也惯着他,基本上就是一个想被惯着,一个愿意惯着。
第二点,时间。所谓的我没时间,是我在 996 我在 997 或者更多。但如果大家平静下来想一下两件事:第一件事,有多少工人是真正能够 996、997 干活的?其实并没有。绝大部分晚上大家都在吃饭、玩手游、楼下健身房,到时间打卡走,或者说晚上在干活,早上十二点回来,其实一天还是只干了八个小时。因为正常来说,为什么西方的 it 公司,我们会说我跟你签的合同是八小时,我今天不想干活就不干,为什么?It 工程师是写程序,不是你要求加班他就能写得出来的。他脑子不好写程序,后面有三个程序员帮他填空,全是 bug ,还不如别写。基础设施软件更是如此,你的那些埋进去的隐藏的 bug 是毁灭性的的,你写了三分钟的程序,对方可能三个月都调不出 bug。如果他是一个这样的人,你可以认为,他不是开源软件的从业者,我并不是说这样的人不存在。开源文化并不是要说服所有的人,不是告诉所有人开源现在很热,所以你要去开源。不是所有的人都会为此买单。
就像 Apache 经常说的一句话,Community Over Code,并不适合所有的开源项目,而且不适应这件事并不是错的,很多不遵守 Apache Way 的事情都成功了,Linux 操作系统就是典型中的典型,所以不要把它当绝对的标准。
最后,你在做项目的时候,也要去连接所有你可以用的资源。工程师、生态系统、其他的项目的玩家,以及各种 Global 的 vendor。你需要从个人关系,社交能力到你的合作的项目,同一个基金会的、跨基金会的、别人公司的,或者职业的玩家们,这些职业的玩家们会在你的宣传、以后的推广里面起到举足轻重的作用,以及那样一些背靠着你做商业化的厂家,他们给你投入的职业开发者。哪一个在不同的阶段都会被需要,他们没有好与坏,钱是好事也不是好事,取决于你怎么样去用它,你怎么样去散发社区的结构,每一个社区、每一个套路,都有自己的减法。
其实我们去回顾一下六年的时间,我们会说:耐心。大家很多时候看到今天的 SkyWalking,我可以只放前三页,我可以说 SkyWalking 多么厉害。我还可以做三十页的 ppt 告诉这项目多么厉害,有多大的部署、多大的环境,我可以讲一下午,但是你要知道的是,其实第一天它啥也没有,而你背靠的是全世界最大的开发者。SkyWalking 90% 以上的功能都有中国工程师的参与,而他的用户遍布全球,而大量的中国工程师在开源里写的代码,被西方的工程师认为是太复杂的功能,这是他们认为的在异步环境下不可能完成的事。而中国很多工程师是依靠自己的能力完成工作,所以我并不认为中国工程师缺少开源的能力,但是他缺少的是正确的协作方法。我们有大量的事情都很着急,比如说 SkyWalking有很多的功能,是在两三年前吹出去的牛,我们今天才能得到结果,不知道大家有没有注意到,我最早的一篇 ppt 上写的一句话,SkyWalking 在今天,在上个月发布的 8.5 的版本,才刚刚完成了我们在五年前吹的牛,才把那些功能真正的变成代码可用的状态,而这个过程用了六年的时间,用了 500 位工程师,以及无数的测试,我们都不知道全球有多少人测试过这个程序。所以要有耐心,同样,在完成了六年前的事情之后,我会发现,原来我们六年前想的事情是整个 landscape ,我们在今天能看到的 landscape 里面,我们只完成了 50%,我们甚至也许还需要一个六年才能把我们今天想到的东西做完,这就是开源,我们的 Landscape 会越来越大,东西会越做越深,SkyWalking 从一个 java 探针,做到了全语言探针,做到了 service mesh,现在要去接操作系统,我们要自己做 database,我们要去接其他的采集软件,我们要去接其他的协议,会发现事情会越来越多。
最后,我们会在下个月和下下个月回 ApacheCon 的活动,当然今年因为疫情的原因,我们还是会在线上来做,最后一届 ApacheCon 在线下办是在拉斯维加斯,第 21 届的时候就开始疫情了,第 22 届的时候我们第一次把 ApacheCon Asia 带到了中国,因为通过 17 年到 21 年四年的努力,中国终于有了足够多的 Apache member,这能够让 Apache 基金会相信可以去办一场属于中国、属于亚洲的 ApacheCon。我们也希望明年,在疫情更好的情况下,我们能让 Apache 通过第一次把 ApacheCon Asia 带到中国的某座城市去举办一些线下活动的决议。当然今年其实已经很好了,因为我们的 ApacheCon Asia 70%-80% 的 section 都已经可以使用中文,这是 ApacheCon Asia 带给我们的好处,因为中国的 Apache member 几乎覆盖了整个会议所有的 track chair,他们有更多的话语权,我们能更好的通过 ApacheCon 的整个筛选,这是我们能够带来给大家的,以后我们希望更多的工程师能够从 ApacheCon Asia 走到全球的 ApacheCon。
今年 ApacheCon 的全球也是北美时区的,像监控的主题,基本上不管是中国的工程师还是国外的工程师都会使用 SkyWalking 相关的主题,我们也希望更多中国的项目能够走出去,能够用英语去 share 更多的主题。因为我自己在国外网络的时间比较长,这个是我的 Twitter,我会在上面的时间会比国内的平台会多一些,希望大家去聊一些,开源、SkyWalking,或者是 foundation 的一些文化,大家可以通过 Twitter 来找到我。谢谢大家。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。