以下文章来源于OSC开源社区 ,作者一君
一位收藏家遇到件特别喜爱但又买不起的藏品,如果他有机会偷到,那么,他会动手吗?
答案是不会。
因为收藏家的快乐来源于将其收藏品展示给世人,如果是偷来的,他便不能光明正大炫耀自己有这么一件藏品,藏品对收藏家来说便失去了价值。
张亮讲述了上面这个小故事,来描绘他最早开源自己写下的代码时的动力——“作为一个工程师,我认为我的代码还是比较优雅的,希望更多人看到,这就是我最原始的诉求。”同时,通过开源的方式,他的代码可以被所有人看到和点评,也会有许多人给出反馈,帮助他不断提升技能。
合抱之木,生于毫末,开源的伟大之处也正是通过这种协作共享的模式让许多个人作者开发的软件得以成长为庞大的、世界级的通用软件。而在开源的浪潮中,张亮是千万为之着迷的工程师之一,更是开源世界的反哺者。
21 世纪初,上大学的张亮在教科书上看到 Apache Tomcat。彼时,Apache 软件基金会刚成立不久,Tomcat 作为 Apache 服务器的扩展,是应用最为广泛的 Web 服务器之一,也是 Apache 软件基金会的顶级项目。这给张亮留下非常深刻的印象:“Apache 软件基金会中有非常好的软件,成功到教科书中都在用。”
一颗关于“开源”的种子自此埋下,他希望自己日后也能写出被选入教科书的、在全世界流行的软件。十多年后的现在,他身边有了近 40 人,正在一起朝着这个目标前行。
年初,张亮作为创始人,与潘娟联合创办了 SphereEx 公司,以开源项目 Apache ShardingSphere(后文简称 ShardingSphere)为基础,提供商业解决方案。ShardingSphere 最初是张亮在 2016 年 1 月创立并开源的项目,前两年,张亮个人提交了 80% 以上的代码,支撑项目最初的发展。2018 年,为了能够打破用户的心理戒备,激发贡献者共鸣,张亮为 ShardingSphere 找到一个强有力的支撑—— 将项目捐赠给 Apache 软件基金会,“基金会的存在,是对项目开放和可持续发展的最有力保证。”很快,2020 年 4 月,ShardingSphere 经过基金会的孵化,晋升成为顶级项目,社区贡献者从孵化前的不到 30 人扩展到超过 120 人,这一数字现在已突破 300。
ShardingSphere 刚刚毕业晋升之时,张亮接受 OSCHINA 采访并表示,项目从 Apache 孵化器毕业,代表项目的社区运作方式得到了 Apache 软件基金会的认可,但对于他个人来说,ShardingSphere 距最终的目标还有很大差距,产品完成度尚不足 50%。
此后一年,ShardingSphere 开始 5.0 版本的筹备发布,目前已经发布了 5.0.0-beta,实现了可插拔等能力。然而,张亮心中产品完成度的百分比并未发生变化,依旧是 50%,“产品进展其实还挺大的,但是很多新的想法又出来了,肯定要多投入研发资源,分子和分母都是在增加。”因此,整体的完成度变化不大。
所以,ShardingSphere 需要一个杠杆打破平衡——创业。以一家公司的力量专注开发一个软件,自然要比零散、自发的社区更加高效集中。就这样,专属于 SphereEx 的故事开始了。
延伸 ShardingSphere
SphereEx,取用 ShardingSphere 中的“Sphere”一词,后缀意为扩展、探索、延伸的“Ex”,“具体是什么意思,留一些空间给大家想象”。
张亮认为,ShardingSphere 模块数量接近 200 个,可以称得上是一个广度型的开源项目,因此有围绕其打造生态的基础,足以成为一个公司的底座,承载公司业务发展。反过来,ShardingSphere 可能需要二三百人才能将其能力完全爆发,那么也只有一家专门的 infra 公司(IT 基础设施公司),才能承载 ShardingSphere 的发展需求,二者相互成就。
选择在 ShardingSphere 发展五年半的时间点创办公司,是 ShardingSphere 的发展路径所致,也是张亮仔细思考后的结果。起初,张亮在做 ShardingSphere 时,仅将其做为一个分库分表的 Java 开发框架,后期,接纳社区建议后,ShardingSphere 功能逐渐叠加,慢慢演进成现在的可插拔增量数据库。
“举个例子,比如原本 ShardingSphere 只能做分库分表一件事,社区的人可能会说,ShardingSphere 也能做数据加密,但如果我们的目标是做最好的分库分表中间件,那么加密可能就不会做了。但其实社区更好的方式应该是面向‘如何吸纳社区贡献者’,也就是说,社区要善于接受大家的馈赠,将馈赠引导为正向的,而不是以拒绝大家的馈赠为前提,只吸纳我们觉得有用的,这是思路上的转变。”
在这个前提下,ShardingSphere 要做可插拔架构,也是由于社区的馈赠越来越多,如果研发团队照单全收,那么 ShardingSphere 的代码将会很混乱,架构不成体系,最终难以达到好的效果,但如果是可插拔的内核,便可将社区所有馈赠构建在可插拔基础之上,“所以 ShardingSphere 的可插拔架构完全是基于社区的需求衍生出来的,如果仅仅是做数据分片,其实并不需要可插拔架构。”
就在 ShardingSphere 的可插拔架构成型之时,国内开源与 infra 创业东风渐起,“这是非常好的契机,ShardingSphere 也刚好度过最艰难的那段时间。”回看 ShardingSphere 五年半的发展历程,刚刚诞生之时,在当当和京东经过双十一等大量互联网场景的打磨,从 Apache 软件基金会孵化毕业之后,又建立起一定规模的社区,有相当数量的外部贡献者。
未来,张亮计划通过 ShardingSphere 的迭代,实现在开发者社区中更彻底的开放。ShardingSphere 5.0 主攻可插拔架构,未来 5.0 稳定版中这一功能将会稳定,接着,6.0 的定位则是“To developer”,让 ShardingSphere 更加灵活可控,开发者可以根据 ShardingSphere 的教程,去开发自己想要的功能,从而实现完全地开放。
数据库行业还需要什么
成立公司之后,如何能基于 ShardingSphere 创造更大的价值,也是 SphereEx 需要思考的。
张亮团队基于 ShardingSphere 创业的前提也有他们对于数据库行业现状的分析——行业是碎片化的,未来不会出现大一统的数据库,无论这个数据库做得有多好,只能负责它最适合的一种或几种场景,“我们希望能在数据库之上构建一层,把数据库当成它的存储节点。”
因此,SphereEx 的产品形态为 Database Plus,即,在数据库之上提供一层增量的服务,定位是希望建立数据库上层标准和生态、提供精准化和差异化的能力。
首先,SphereEx 的基座——ShardingSphere 所有功能都是可插拔的。ShardingSphere 提供了一个标准化的 DistSQL,通过 DistSQL 控制所有功能,包括创建分片规则、修改读写分离规则等等,这种方式更容易迈向标准化。
在精准化和差异化能力方面,SphereEx 在产品上可以做到精细化分片,实现用户自由定制,对于无需自由定制的用户,ShardingSphere 也可以通过标准方式实现分片,其关注点在于对各项能力的精准化和差异化。
定位之下,SphereEx 产品有三大能力作为支撑。张亮将其概括为连接、增量、可插拔。
连接方面,SphereEx 的产品并非数据库,不仅向用户提供数据相关的服务,更是通过连接的方式,方便用户把应用和数据快速建立关联,简化开发。
增量方面,张亮认为,仅有连接是没有价值的,在连接的基础上提供增量才能最终创造价值。当然,增加何种能力由用户说了算。
可插拔方面,用户所需要的增量功能通过可插拔的能力接入。SphereEx 本身有功能层,功能层中包括数据分片、读写分离、弹性深度等功能,根据不同功能可组成一个产品族,如数据分片+读写分离+弹性伸缩+分指数=分布式数据库的产品组,数据脱敏+数据加密+数据权限管控=数据安全的产品组等等。这些功能均可通过下层可插拔平台接入。同时,对于用户和开发者来说,他们都可以像访问数据库一样访问SphereEx,非常便捷。
落实到具体产品上,在其团队的规划中,SphereEx 会提供两个产品:SphereEx Enterprise 和云上版本 SphereEx Mesh。
SphereEx Enterprise 以标品形式售卖,是 SphereEx 的第一曲线产品,可做私有化部署。
SphereEx Mesh 则为订阅制,是 SaaS 服务。目前,张亮对其的构思为:先用 Go 做开发,提供一个原型版本,再用 Rust 将其精炼到性能最大化和资源消耗最小化。通过 Sidecar 可以接管应用到数据库的流量访问,进行流量的治理,并降低云原生数据库上云的难度。还可以针对计算节点和存储节点打标签,将标签规则和 SQL 语义相匹配,将访问质量相似的请求发送至类似的计算/存储节点,达到 QoS 的稳定。
值得注意的是,SphereEx Enterprise 和 SphereEx Mesh 产品背后的多个能力是以开源的形式提供。举个例子,ShardingSphere 是一个可插拔架构,在其架构中,许多能力可被替换,如分布式锁可以保证用户在修改数据库时的强一致性,这是个非常精准的商业化诉求,基本金融级的企业才会使用,那么分布式锁的能力便不会在开源版本中提供,“开源部分可以让用户自由使用,闭源部分则是在极致的场景下,去为企业级的用户提供精准服务。”
瞄准云环境中订阅业务的开源原生商业公司
早在 3 年前,张亮对于软件、开源和云的关系就已形成自己的认知。2018 年结束之时,张亮作为第一作者的《未来架构:从服务化到云原生》一书创作完成,开篇便提出“软件改变世界、开源改变软件、云吞噬开源”。
张亮解释,云吞噬开源一句中的“吞噬”可以作为形容词理解,它表示的是云与开源最终融汇的效果。这种“吞噬”分为两部分,第一是指最终的开源软件都会上云,甚至于所有基础设施软件也会上云,这便是所谓的云吞噬软件;第二是指在上云的浪潮中,开源可能是最先拥抱云的部分,闭源软件由其主导公司决定是否上云,而开源软件由于代码开放,有需求的人便可以将其搬到云上,提供云上版本。SphereEx 便是早早计划要拥抱云的开源企业之一。
然而,近年来开源与云厂商之间的矛盾愈演愈烈,由于许多开源许可证允许将软件做商业化使用,如果云厂商将其集成在商业服务中去售卖,同时不回馈开源软件社区,那么不仅无益于开源软件的成长,还会侵占其市场份额。因此,多家开源厂商更改许可证,宣告和云厂商“划清界限”。
对于开源与云的对立,张亮认为,这种困境在做的较薄的开源产品上更容易出现,相对来说,厚重的开源产品不容易被“薅羊毛”。SphereEx 做云上功能是也是跨云模式,这种模式也使得 ShardingSphere 本身是中立的。在 SphereEx 的商业规划中,其产品可根据不同的云平台做相应适配开发,组成客户所需的产品组,如 AWS,Google Cloud 等产品组。对于 SphereEx 来说,别人拿 ShardingSphere 做商业化会分流部分基于 ShardingSphere 的营收,但也能扩大 ShardingSphere 的社区,提高 ShardingSphere 的市场知名度,“这时候就是比谁把 ShardingSphere 做的更专业。”
此外,一家 infra 公司更好的商业模式是云上开源的订阅制模式,可以实现非线性增长。如果仅仅只是标品的售卖,加上售卖时提供的服务,那么随着客户量的增加,其技术支撑团队就会越来越大,企业营收各成本成正比,整体是线性模式增长。但在使用订阅制的情况下,用户更多是自助式服务,在扩大营收的时候,无需相应大规模提升成本。
事实上,云环境中的订阅业务模式已经有许多企业在做。2013 年,面向大数据处理的统一分析引擎 Apache Spark 的初始成员创立大数据公司 Databricks,2014 年推出第一款产品 Databricks Cloud——通过将流程置于云端来简化大数据处理云平台。之后,Databricks 先后与 Microsoft Azure、Cloud Ace 等云厂商达成合作。今年 9 月,Databricks 宣布结束 16 亿美元的 H 轮融资,三个大型云厂商——AWS、微软、CapitalG 参投,Databricks 公司估值已高达 280 亿美元。
在张亮看来,做开源与实现公司营收实际上应该是相辅相成的关系,开源软件的发展可以更好地为商业赋能。反之,商业成功后,公司也能为开源软件做更多的贡献。
“SphereEx 定位是开源原生商业公司,基于开源项目组建公司,公司成立后逐渐引导用户转向商业版的使用。”张亮介绍,开源公司的漏斗模型中,最上层为用户;往下是有价值的用户,可能会给到项目一些反馈;再往下是更有价值的用户,会为项目提交代码,测试等等;再下层是付费用户;最深层则为订阅制付费用户;“所以我们首先要将开源越做越好,打造漏斗模型,并且将漏斗最上层扩的非常大。”
目前,SphereEx 的研发力量主要投入在 ShardingSphere 的开发中,“因为我们知道 ShardingSphere 本身有哪些功能,有哪些还没有完善;然后商业化产品部分都是真正对企业有用的,已经规划的差不多了。我们希望在 B 轮融资之前,ShardingSphere 的产品完成度提升到我们满意的状况,然后再去做营收。”
而对张亮本身来说,参与开源近 10 年,他最有成就感的事情便是看到越来越多的事情和目光集中到 ShardingSphere 上,“让开源项目能够源远流长地往前走,无论是互联网公司使用,还是更多开发者去参与贡献甚或是用其创建公司,最终都是在让 ShardingSphere 往前走,汇聚来自开发者、资本、合作伙伴、客户等各方的力量,这些可能就是最开心的事情。”