拿过不合格绩效,也创造出世界顶级开源项目 – 专访 OpenResty 章亦春(章亦春百科)
章亦春可以说是一个跟“网红”绝缘的人,用他自己的话来说,他“是一个追求 light 而不是 heat 的人”。网络上能搜索到的对章亦春本人的采访文章屈指可数,他的名字更多出现在其他人的采访文章里,或者认识他的人讲述的故事里,不然就是知乎问答里。
他所创建的开源项目 OpenResty 跟他本人很像,尽管在全球范围内拥有超过 4000 万域名用户、从微软到淘宝都是其用户,却不是一个曝光度、讨论热度很高的项目。上一次 OpenResty 在技术圈引发关注和讨论,还是在 2015 年年底锤子科技冬季新品发布会上,当时罗永浩宣布把发布会门票收入全部捐赠给那会正在筹备当中的 OpenResty 软件基金会。
时隔六年多,InfoQ 找到章亦春并展开了一场深度对话,我们得以近距离感受章亦春独特的人格魅力,进一步了解到他和 OpenResty 曾经的故事以及最新的动态。
章亦春热爱编程和计算机技术,早已是做出世界级贡献的编程高手。编程之外,章亦春喜欢读书,涉及的领域包括计算机科学、技术、数学,还有印度佛教史。他也修习禅法,这能让他感受到终极的宁静和喜悦。每天他都会尽量抽时间到山里走走,置身于大自然,思考一些艰深却有趣的问题。
“低调的简直没朋友”,曾是一些认识章亦春的朋友对他的评价。如今章亦春开始反思,自己过去确实太低调了,这导致团队很多工作进展并不为人所知,现阶段确实应该更“高调”一些了。
传说中的 3.25 绩效
不久前一篇题为《百度腾讯阿里真的是高科技企业吗?》的文章在技术圈流传颇广,在文章里,章亦春被列举为 BAT 大厂之外有世界级贡献的中国程序员之一,同时也被描述成了大厂不重视 IT 基础技术贡献的“受害者”。
原文是这么描述的:
2009 年,淘宝工程师章亦春开创了 openresty 项目,给主要处理静态文件的 Nginx 增加了动态处理能力,但是章亦春在淘宝内部拿到了需要劝退的绩效,并且最终从淘宝辞职,去了美国硅谷。
经过向章亦春求证,文章中的描述不仅时间线混乱(开创 OpenResty 项目是在 2007 年而非 2009 年),有不符合事实的描述(“给主要处理静态文件的 Nginx 增加了动态处理能力”不是对 OpenResty 的准确描述,OpenResty 并非要改进 Nginx,Nginx 只是在改写老版 OpenResty 时选择使用的一个组件库),也非常断章取义。透过章亦春的回忆,我们得以一窥当年故事的全貌。简单地说,章亦春确实拿过 3.25 不合格的绩效,但不是在淘宝,而且这跟他后续从淘宝辞职并无关联。
章亦春拿到 3.25 不合格绩效是早期在雅虎中国(当时已经是阿里巴巴的一家子公司)的时候,因为不认同当时直属经理的管理方式,在阿里评分体系里的“价值观”部分被打了不合格,从而导致整体绩效不合格,但是也没有被劝退(当时的规定是连续两个季度都拿不合格才会被劝退)。在直属经理给出差评之后不久雅虎就被拆分了,章亦春也被转去了淘宝,和那个雅虎经理分道扬镳。
章亦春至今都非常感谢当年雅虎中国搜索部门的老大何伟平,以及后来淘宝数据部门的老大姜蕾和张茂森。在他看来,如果没有当年在雅虎中国和淘宝的部门老大全力支持,就不可能有我们现在看到的 OpenResty 这个开源项目。
在雅虎中国时,早期章亦春得到了搜索部门老大何伟平的大力支持和帮助,对方非常支持 OpenResty 开源,也很支持 OpenResty 的方向和在公司搜索平台中的应用。
后来部门被拆分,团队被解散,人员重新分配到阿里巴巴下面的各个子公司去。一开始章亦春被分到淘宝的搜索部门,但是在搜索部门的工作对他来说并不愉快,开很多会,经常被拉到杭州出差,OpenResty 的开发也相对停滞。在那时候,章亦春就提出了辞职。但当时淘宝商户数据统计部门的老大姜蕾和张茂森来找到他,并邀请他加入数据部门。双方在沟通时,章亦春表示希望有足够的自由度继续做开源 OpenResty,而对方则希望用 OpenResty 作为淘宝数据平台的基础。这对双方来说是共赢,章亦春就同意了。
在淘宝商户数据统计部门期间,章亦春基于 Nginx 和 LuaJIT 等基础组件改写了 OpenResty,在这个过程中得到了当时另一位同事王晓哲(网络 ID 是 chaoslawful)的大力帮助。两年后,在把整个数据分析平台都迁移到新版 OpenResty 上、实现了性能数量级的提升后,章亦春觉得自己已经完成了在淘宝数据部门最初设定的使命。当时他认为,如果再往下走,技术和职业发展的天花板就比较明显了,自己也不喜欢花很多时间精力去和其他部门 PK 项目做。他再次萌生了过“田园生活”的愿望,就从淘宝辞职了。
特立独行的“春哥”
章亦春坦言自己是个特立独行的人。他对编程和计算机技术有着一份极致的热爱,而这份热爱和想要心无旁骛探究技术的坚持,又推动着他把对“田园生活”的向往付诸现实。
据章亦春自述,他自幼就非常专注,有强烈持久的好奇心和求知欲,很喜欢刨根问底,也总是努力把自己喜欢的事情做到最好,不计投入。自初中起,他就立志要找到值得投入一生的事业,寻找到为之努力的意义,然后就“但行好事,莫问前程”。
为此他广泛阅读了各个学科的著作,并尝试在自己感兴趣的学科上做一些自己的研究,这让他感到非常享受。上初中时他经常深夜还在家做化学实验,有一次还在凌晨不小心引发了爆炸。所以最后当他确定要投身学习计算机时,家人都松了一口气——至少不会有性命危险了。
这么多年过去,章亦春最大的兴趣爱好始终还是从根本上解决计算机领域中那些尚未被突破的难题,并将这些创新运用到产品开发中。这对他来说不是工作,而是最有趣、最让他着迷的心智活动。
同时,他更在意的是自己能不能创造真正的价值,能不能在理论和技术上有突破和贡献,因此很多时候确实更喜欢专注在自己的世界里,思考、探索一个又一个有趣的科学或技术问题,大胆想象新的可能性并予以实现。这是他一直以来保持低调、不常在媒体和外部活动中露面的原因。虽然他其实很享受与志同道合的人交流,也热爱分享,但他更希望自己每一次分享都能呈现一些在理论或技术上的新成果和进步。
章亦春对“田园生活”的向往由来已久,最早起源于初中语文课本里的一篇散文《钓胜于鱼》。文中讲一位美国大学的老教授经常乘着一条小船,在湖光山色中一边钓鱼一边研究学术问题,钓上来的鱼又经常被他放回湖中。从少年时代起,这样既能亲近自然又能潜心研究的生活就根植于他的心中,成为他理想的生活和工作状态。
对于章亦春来说,在北京工作 4 年,收获很大,但工作压力也很大,同时他还有很多关于 OpenResty 开源项目的计划和想法,希望在没有工作的情况下,集中力量去实现。所以他一直在寻找时机,换一种生活和工作方式。
2011 年决心离开阿里时,章亦春和太太(当时还是女朋友)都想去南方生活,正好太太那年研究生毕业在福州找到了一份工作,于是他们就一起从北京搬去了福州。当时做这个决定的时候,他对自己未来的工作和生活还没有清晰的计划和想法,只是比较喜欢这种能够自主安排的工作和生活状态。现在回想起来,虽然那个阶段没有收入,只有来自用户公司和个人的一些微薄的捐赠,但是能够集中力量去系统地做一些自己最想做的事情,让他感到很满足。
关于福州这一年的“田园生活”,还有一些有趣的后续。章亦春在 2011 年 3 月份决定去福州,7 月份搬到了福州,但在 6 月初就收到 CloudFlare 创始人 Matthew 和 Michelle 的工作邀请,希望他加入他们的初创团队。第一次,章亦春谢绝了他们的好意,告知他们自己准备在一个南方小城市开始“田园生活”。但是 Matthew 极其有诚意,出资邀请他们先去旧金山看一看,同 CloudFlare 的团队工作一周,体验一下那里的生活再做决定。当年 10 月章亦春和太太去了旧金山,度过了很难忘的一周。Matthew 表示章亦春可以到来旧金山过“田园生活”,在他们那里全职做 OpenResty,还能有收入。但章亦春还是想继续在福州的生活,于是再次谢绝了这个工作邀请,Matthew 和 Michelle 仍亲自开车送他们到机场。11 月份 Matthew 到北京开会,再次邀请章亦春见面,他最终被 Matthew 的诚意感动,就接受了 CloudFlare 的 offer。次年 6 月,章亦春和太太正式搬到了旧金山。
在湾区的生活,非常接近章亦春理想中的“田园生活”,为此他非常感激 Matthew。在 CloudFlare 那几年,他继续全力推进开源 OpenResty 的开发,取得了很大的进展。期间也不断有其他公司的创始人三顾茅庐邀请他加入,包括 Nginx 的作者和 Nginx Inc. 的联合创始人 Igor、Kong 的创始人、连续成功创业的 MIT 博士等。但章亦春觉得这些都不是最想做的事,自己创建公司的念头也逐渐萌发。
开源生涯新阶段
对于 OpenResty, 章亦春一直有着宏伟的愿景:希望 OpenResty 能在工业界、互联网行业引领“机器编程”革命。人类只需要向机器输入行业知识和意图,机器就能自己编写高效可靠的实现代码、自行测试,快速部署在大规模的计算机系统上,并同时生成人类可读的文档。这一灵感其实源自他高中时教机器解高考题的有趣经历。
对章亦春来说,如果一直受雇于企业,自然必须要优先保证雇主的业务需求,自己就不能完全专注于 OpenResty 蓝图的实现。另一方面,随着 OpenResty 渗透到越来越多的公司和行业,社区却无力提供商业级别的技术支持和理想的解决方案,这也是开源项目运作上普遍存在的局限。
于是在 2017 年初,章亦春在美国创办 OpenResty Inc. 公司,他的开源生涯也进入了一个新的阶段。在这个阶段,章亦春思考最多的是如何借助“机器编程”的全新思路和方法来极大提升复杂应用软件的开发速度和质量,如何实现开源商业化,如何克服开源社区本身的一些局限,以及如何充分利用尽可能多的不同开源软件来为客户以及自己创造出更多的商业价值。
创建公司后,开源不再是章亦春唯一的专注点,在目前这个阶段,公司相关事务占据了他大部分的时间。作为公司的 CEO,他的日常工作的大部分时间都用在“必须要做的事情”上,包括公司管理、产品开发和客户的交流等。即使是在很多开源项目上的工作,经常也是出于公司项目的需要。
当然,OpenResty 开源的性质不会改变,实际上,开源用户对 OpenResty 的认可和感谢是章亦春坚持 OpenResty 开源项目至今最大的动力之一。章亦春一如既往地热爱着开源,开源带给他的幸福感仍一如他大学时每天泡在 #perl 6 IRC 聊天频道与来自世界各地的优秀黑客协作交流时那般强烈。只不过现在他自己成了曾经 IRC 频道里的“教主”角色。
章亦春对自己当前在 OpenResty 开源项目中的角色定位是“领导者”。他会严格审核 OpenResty 项目贡献者提交的,不确定的或者有争议的补丁和变更,并控制项目发展的大方向。项目因为他的严格把控维持了相对高的质量和稳定性,但这两年他也慢慢意识到“看门太紧”对项目的可持续发展性造成的一些影响。
相比起 OpenResty 的使用人数,OpenResty 开源社区的贡献者数要少得多。这其中有一个重要原因就是给 OpenResty 贡献代码的门槛很高,每一行代码都会被严格把关,久而久之大家也就不敢提交代码了。
章亦春表示,如果说前十五年 OpenResty 项目的关键词是“稳定”,那未来十五年的关键词将会是“开放”。只有“稳定”和“开放”两者之间取得良好的平衡,才能保证一个开源项目能长长久久。因此,章亦春也在尝试对领导项目的重心和方式做出调整,希望自己既是维系社区精神和愿景的守护者,也是鼓励更多人参与协作的促进者。
基于这样的反思,也为了能一改社区过去相对沉寂的状态,社区做了一些改变和尝试。比如最近社区建立了一个 slack workspace(https://openresty.com/en/community/),以提供一个集中、实时的平台来方便 OpenResty 的用户、开发者进行技术讨论和交流。
此外还引入了很多新兴的管理开源社区的方式和工具,以期实现社区管理的“跳跃式发展”。其中一个是 roadmap items voting system on Canny,任何人(包括管理者)都可以到 Canny Board 提出和上调投票具体的需求,项目的产品路线图也就应运而生。从此,社区开发者在 Canny Board 上就能挑选并报名自己感兴趣且需求度高的项目进行开发,至少在方向上错不了。
另一个引入的管理工具叫“Aviyel”,它是一个 Web 3.0 概念的开源社区奖励和认可平台。贡献者跨平台的代码和非代码(QA、项目宣传、设计等等)贡献可兑换成徽章,并将它们作为灵魂绑定代币。徽章的数量代表了每个贡献者(包括管理者)在开源社区的影响力,随着社区本身价值的提高,这些徽章未来还能被“货币化”。通过上述这些平台,企业可以提出需求,独立贡献者可以放心地提交被需要的功能,这样一来社区才能吸引更多不同的声音参与到社区建设和项目发展上。
同时社区也会组织更多的 meetup,邀请更多企业来分享他们的 OpenResty 用例,参与和影响项目未来的发展。
章亦春希望未来能有更多人共同参与维护和开发开源项目,也希望能有更多的企业来驱动项目的发展和创新,使 OpenResty 开发不再是由少数开发者主导,不再是“一言堂”。
“现阶段应该更高调一些”
OpenResty Inc. 成立五年来,团队一直聚焦在“机器编程”这个方向展开工作。据章亦春介绍,团队目前已经完成了极其重要的理论和技术积累,蓄势待发。不过由于他之前的“低调”,这些多不为人所知。
到了现在这个阶段,他坦言自己确实应该更“高调”一些,把团队的成果更多地分享出去,让更多的工程师和企业从团队的产品中受益。
现阶段 OpenResty Inc. 最主要的目标是通过机器编程技术,帮助广大的企业用户大幅提升线上各种软件系统的效能,同时提供更丰富的 OpenResty 外围软件生态圈和周边库。进一步地,帮助广大企业用户“透视”基于各种开源软件构建的业务系统,清晰地看到其内部运行状况,并提供人类专家和机器专家关于性能、异常和安全问题的改进和优化建议。
基于此目标,团队开发了 OpenResty XRay 产品,可以对大规模的分布式互联网系统进行各种有趣的性能分析和 Bug 追踪,而无需应用系统的任何配合,也不用下线或重启任何在线服务。这就像给在线软件系统拍活体 X 光片或者核磁共振片,可以随时随地看到从操作系统内核到应用软件的脚本语言代码的方方面面,把整个软件栈作为一个随时间动态变化的整体来看待。
章亦春透露,过去五年,公司的大部分精力都放在了创造全新的技术上,以从较根本的层面上去解决计算机世界一些最痛的问题。如今终于基本实现了最初的技术愿景,取得了一定技术成果。但由于团队规模还比较小,时间和资源也较为有限,所以把重点放在技术创新的同时,在社区方面的投入就少了。一直到今年,才有资源投入到社区中。同样,早前商业化方面的投入也非常不足,团队直到去年底都是清一色的工程师,没有商业方面的人才。目前已有的几十家来自世界不同国家的商业客户都是主动找过来的。虽然章亦春非常庆幸也非常感谢这些客户的信任与支持,但这肯定不是一条可持续的路。
章亦春坦言,过去五年公司在开源商业化上摸索,其实走了不少弯路,但也因此获得了非常宝贵的经验教训。其中很关键的一点就是,商业化的产品和开源产品不能在同一个或者类似的赛道上,尤其是在开源产品已经很强大的情况下。在他看来,开源本身不是一种商业模式,而是一种协作关系,开源项目取得了很大的成功,并不能保证开源商业化的成功,甚至从某种程度上来说还可能成为一种阻碍。开源商业化要取得成功,关键就是要提供与开源项目互补(而不是替代之)的价值,让市场愿意为这个价值买单。
另外,也不能低估用户除了产品性能之外的商业考量因素,包括迁移成本、内部产品整合等等。章亦春表示,在开发具体的商业产品时,要尽可能详尽地了解开源需求,以大量用户数据、竞品信息来驱动产品决策。即便在资源有限的情况下,也不能一心做研发,而忽略宣传和知识分享。
截至 2022 年 5 月 30 日,OpenResty 在全球范围内拥有 40,785,783 域名用户,占总市场份额 14.91%。其中域名市场份额排名第一和第二的分别是 Nginx(27.42%)和 Apache(22.93%),Cloudflare 位列第四(8.40%)。在所有竞品当中, OpenResty 是唯一一个在没有任何主动商业宣传前提下还能在过去五年保持持续增长状态的解决方案。
去年底,章亦春找到了一位很欣赏的商业合伙人,今年公司已经开始全面构建商业团队,会在商业化方面做出更多尝试和努力。
“我觉得 OpenResty 终于到了一个可以再一次厚积薄发的发展阶段。同时我们新创造的技术和方法也早已不再局限于开源 OpenResty 的范围,而是可以延伸到所有的开源项目和用户社区。”
对话章亦春:如何应对云原生时代的可观测性挑战?
在即将召开的 QCon 全球软件开发大会(北京站) 2022,章亦春将在“云原生架构变革”专场带来题为“穿透 K8s 容器的应用分析——使用动态追踪分析应用的世界前沿技术”的演讲分享,章亦春老师将结合其超前的技术视野和超过 15 年的开源经验,来讲述在云原生时代如何攻克可观测性最大挑战:既对容器内应用进行穿透性观测,以及保证观测结果的准确性、完整性和可操作性的最佳方案。感兴趣的同学可点击链接了解 100 议题。围绕云原生时代的可观测性挑战这一主题,我们也与章亦春聊了聊,访谈实录如下。
InfoQ:您这次在 QCon 上分享的主题与云原生时代的可观测性有关,根据您的观察,当前 Kubernetes 应用的可观测性面临哪些困境和挑战?
章亦春:其实对于非容器化的软件应用的可观测性,如果真的能够快速发现和定位绝大多数的线上问题,包括那些很深的诡异问题,在技术上也是一件挑战很大的事情。容器化和 Kubernetes 环境又在此基础上增加了不少新的技术复杂度,主要是容器的虚拟化和隔离这些方面。在一切都正常工作的情况下,容器化的方法论让应用布署和运维变得简单,但它客观上大大增加了整个软件栈本身的复杂度。虽然这些复杂度对于大多数用户而言被封装和隐藏了起来,但它们无法被消灭,仍然会产生更多的问题,并让调试变得更困难。
举一个最突出的例子,容器在大小上面一般都故意做了最小化处理,因为大家需要尽量降低容器镜像的大小,这就导致容器内部其实缺少很多常用的系统工具,在调试问题时会非常麻烦。另一方面,容器为了最大化安全性,一般也是用最小集合的权限来运行的,这更加剧了像 strace 或 gdb 这样的工具无法在容器内使用的问题。进一步地,宿主操作系统和容器内的操作系统经常也是很不相同的,所以使用宿主系统的工具去调试容器内的应用,既易受到容器的命名空间隔离的限制,又易受到工具链兼容性的制约。
InfoQ:针对前面提到的这些可观测性挑战,目前业内有哪些常见的应对方法?
章亦春:业内目前最常见的应用方法只是打日志或者在应用里埋点吐更多的指标数据到容器外,这需要应用本身的配合,经常也需要对应用本身做修改。我也看到有基于 eBPF 或 SystemTap 这些更高级的动态追踪技术的分析工具,但这些技术的开源实现还很原始,有非常大的局限性。针对这些问题,我们研发了全新一代的动态追踪技术来实现 OpenResty XRay 这个产品,完全不需要修改容器或应用本身,也不会向用户的应用内注入代码或加装模块,同时克服了开源技术的诸多问题和局限,可以快速和精确地发现和定位任意的问题,包括那些很诡异、隐藏很深的问题。
InfoQ:对于可观测性方向未来的技术趋势,您有怎样的预测和判断?
章亦春:我相信类似动态追踪这样的技术会发挥越来越大的力量,机器最终可以自动诊断和修复很多人类专家都搞不定的线上应用的各种问题。另一方面,机器编程这样的技术也可以让更传统的应用内埋点吐日志和指标的方式变得更容易更动态,或许在动态性上也可以更接近动态追踪这样的技术。
InfoQ:您最近还在关注哪些前沿技术方向?能否跟开发者们分享一下,您是如何培养和保持自己对技术的前瞻性的?
章亦春:我最近一个时期主要关注下面这些技术方向,当然可能并不一定都符合大家对“前沿”的定义:
- Linux 内核中的 eBPF 相关的技术
- Linux 基于容器和命名空间的虚拟化技术
- 基于机器学习等方法、针对优化编译后的二进制程序的深度分析
我比较喜欢研究各种技术和问题的本质,并发挥想象力去寻找最根本的解法,毕竟具体的技术和方法一直都在快速变化中,也总是在解决了老问题的同时,不小心引入新的问题。和开源社区、和公司客户保持沟通和交流可以了解到很多有趣的东西,另外像 Hacker News 和 InfoQ 这样的媒体上面也可以经常看到好玩的新事物。