4 月 16 日,Apache 软件基金会(Apache Software Foundation,ASF)宣布 Apache ShardingSphere 毕业并成为 Apache 顶级项目(Top Level Project,TLP)。这也是目前 ASF 首个分布式数据库中间件项目。

80% 的代码曾由一人提交, Apache ShardingSphere 何以从 ASF 毕业并晋升 TLP                                            顶-冯金伟博客园

  ASF 是全球最大的开源软件基金会,是专门为支持开源软件项目而办的一个非盈利性组织,提供组织、法律和财务等方面的支持,其支持的 Apache 项目与子项目中,所发行的软件产品都遵循 Apache 许可证(Apache License)。据其 2019 年 8 月的财报显示,ASF 彼时拥有 332 个顶级项目,47 个孵化项目。孵化项目毕业之后有机会成为顶级项目。

  这次 Apache ShardingSphere 从成为孵化器项目,到毕业成为顶级项目用时 17 个月。期间,完成了产品从分库分表中间件转变为了分布式数据库生态平台的升级。社区运营方面,从孵化前的 30+ 贡献者,到现在有超过 120 个贡献者。

  不过,在进入孵化器之前, Apache ShardingSphere 也经历了社区活跃度不够,代码几乎由一人提交的阶段。为此,Apache ShardingSphere 团队也做了不少努力才成为 ASF 孵化器项目,之后在导师的帮助下,不断完善社区发展。

  作为 2020 年首个成为 ASF 顶级项目的中国团队项目,Apache ShardingSphere 的发展及其孵化经历或可为更多项目提供经验。所以开源中国邀请 Apache ShardingSphere 项目 VP 张亮,请其分享相关情况。

  摸着石头过河

  “现在回想起来,2015 年是数据库思潮百家争鸣的爆发前期。”

  张亮记得,当时以 Hadoop 为主的大数据解决方案、以及以 NoSQL 为主的关系型数据库替代方案在好评不断之后开始逐渐降温。

  同时,容器和微服务是最热门的话题,Docker 越来越受到广泛的认可,现在一统天下的 Kubernetes 也在当年发布了 1.0 版本。Google 在几年前发布的 Spanner 和 F1 等分布式数据库相关的论文,在经过了一段时间的沉淀和发酵后,受到越来越多人的关注。很多人开始探索服务化之后的事情,也就是数据应该如何以分布式和云原生的方式存储,“在那个革新的年代,更多的人愿意把精力投入在服务化的云原生之上。”

  80% 的代码曾由一人提交, Apache ShardingSphere 何以从 ASF 毕业并晋升 TLP                                            顶-冯金伟博客园

  分布式数据库 NewSQL 应运而生,但新的解决方案还没那么快成熟。直到 2016 年 6 月,Andrew Pavlo 与 Matthew Aslett 发表论文《What’s Really New with NewSQL》,将 NewSQL 划分为 3 个大类:新架构(New Architecture)、透明化分片中间件(Transparent Sharding Middleware)和云数据库(Database-as-a-Service)。NewSQL 的发展路径才开始更为清晰。

  而在 2015 年,张亮和他的团队在决定采用在 Java 的 JDBC 层织入代码,来达到开发成本最小化,自研开源的分布式数据库中间项目——也就是 Sharding-JDBC( Apache ShardingSphere 前身)的时候,并未意识到,分库分表的中间件其实也是 NewSQL 一种形态。

  发布之后, Sharding-JDBC 也在随着市场的需求不断更新,完成到 ShardingSphere,再到 Apache ShardingSphere 的转变,产品本身已从分库分表的 Java 开发框架演化为了分布式数据库生态体系。(后文统一将项目名简称为 ShardingSphere)

  此外,从开始就走开源路线是基于大量调研的选择。张亮团队调研发现,当时已有的项目虽然能够出色地解决某一领域的问题,但确实还未出现一个足够成熟的产品。更让他们担忧的是项目的可持续发展可能性。在调研的项目中,无一例外的在经过一段时间之后停止更新,或极大的放缓了更新步伐,“这些项目并未产生足以引起开发者共鸣的活跃社区来驱动项目的长期发展。”

  张亮认为,互联网公司往往是忙碌的,需求层出不穷,故 ShardingSphere 项目发展规划也是根据需求在不断调整,螺旋上升。而开源项目可以接收到各方各面的需求,远不是公司内部项目可以比拟的。这些公司外的需求可以不断完善 ShardingSphere,如即将发布的 5.0 版本便是起意于多样化的需求。

  张亮:

多样化的需求,使得 ShardingSphere 渐渐的确立了项目核心理念——可插拔平台,它将在即将发布的 5.0 版本正式登场。

可插拔平台的上线,意味着 ShardingSphere 从解决方案提供者演化为可自由扩展的平台级应用。在它的核心设计中,可插拔组件将划分为技术组件和功能组件。

技术组件包括:SQL 方言、事务类型、注册中心类型等;相对于易于理解的技术组件可插拔,功能组件可插拔则更加令人激动。它意为着 ShardingSphere 的所有功能,如:分片、脱敏、分布式事务、读写分离、分布式治理、弹性调度等能力,将能够以插件的方式从平台中添加或删除。功能之间完全独立,多个功能同时使用,则由可插拔平台负责能力的叠加。

可插拔平台甚至可以不添加任何功能,以空白骨架运行,为工程师提供开发新插件的基础设施。

我非常看好可插拔平台能让贡献者更加方便的融入社区,并为 ShardingSphere 提供更加多元化的能力,如:多副本、SQL 审计、多模异构数据、HTAP 等。

80% 的代码曾由一人提交, Apache ShardingSphere 何以从 ASF 毕业并晋升 TLP                                            顶-冯金伟博客园

  (可插拔平台设计)

  当然,多样的需求会加大工作的难度。张亮透露,如何明确公司之外需求的优先级,对于在京东数科开发 ShardingSphere 的同学来说,是难以决策的。比如:使用 XA 还是使用柔性事务作为 ShardingSphere 的事务处理引擎;是否提供公司需求之外的界面;如何处理公司暂时不使用的影子表压测等社区需求等……

  “蹲守”ASF 国外导师

  踏上了开源之路,除了内部人员会面临选择和难题,如何调动社区,让项目持久发展,也是亟待解决的问题。

  ShardingSphere 2016 年 1 月 17 日初次开源。之后的两年,张亮一人提交了项目 80% 以上的代码,这支撑了项目最初的发展,却也“限制”着一个开源项目的社区壮大。

  “如果 ShardingSphere 始终是我个人的开源项目,或者是隶属于某家公司的开源项目,那么参与贡献的工程师难免会有顾虑。他们有理由担心自己的付出也许会由于我个人喜好或公司商业计划的变迁而付诸东流。”在张亮看来,国内始终不缺乏优秀且富有理想的工程师,而是缺乏为之付出的靶心。

  如果项目可进入 ASF,那么项目精神属性的改变会高于代码本身的改变。项目参与者的所有贡献将永久的留存在 ASF 的贡献列表中,并公开展现给世界上的每一个程序员,也不必担心 ASF 突然将项目宣布闭源。“我希望加入 ASF 之后的 ShardingSphere,能够打破用户的心理戒备,并激发贡献者的共鸣。基金会的存在,是对项目开放和可持续发展的最有力保证。”

  2018 年 11 月 10 日,ShardingSphere 进入 ASF 孵化器。而早在 2018 年 5 月,张亮团队就已经在为进入 ASF 孵化器做准备了。

  除了基本的提供英文文档,将 Issue 由中文转变为英文,任务尽量由 Issue 驱动等准备。张亮团队还面临两个挑战:一是需要增添项目社区驱动力属性,使其更贴合 Apache Way。二是要“蹲守”ASF 的国外导师,争取面对面交流机会,以期获得导师帮助进入孵化器。

  按照 ASF 规定,进入其孵化器,至少需要一位导师(mentor)的推荐,一般进入孵化器的项目都至少有 3 名导师的帮助。同时,社区本身也有面向 Apache Way 发展的意愿。

  Apache Way 被认为没有“单一模式”,它可以看做是项目管理委员会需要遵循的基本原则。Apache 项目及其社区专注于项目生命周期中特定阶段所需要的活动,包括培育社区、开发优秀代码、建立意识。ASF 坚持“社区优于代码”,坚定认为,强大的社区总是可以纠正代码中的问题,反之,不健康的社区可能难以持续维护代码库。

  但彼时,ShardingSphere 社区参与度并不高,用张亮的话来说就是:“项目本身并不是由社区驱动,一个独行侠掌控的项目显然不符合 Apache Way。”于是,ShardingSphere 开始鼓励社区贡献者多多参与。在具备了基本的 Apache Way 要素之后,寻找导师的路才逐渐变得通畅。

  张亮认为,在导师方面,面对面交流对比邮件更容易建立信任。而 2018 年,拥有 ASF 导师身份的国人非常少,因此,寻找国外的导师非常重要,也相对困难,“我们采取长时间收集和跟踪国外导师来中国的行程的策略,争取多和导师建立面对面交流的机会。”

  ShardingSphere 进入 Apache 孵化器时,有三位导师和一位 Champion,其中一位外国导师和外国 Champion 是张亮在参加会议时结识的。

  张亮:

在参加 HDC 会议的时候,我认识了当时还是 ASF 秘书长的 Craig L Russell,他愿意成为 ShardingSphere 项目的导师;同时也认识了 ASF 的资深大神 Roman Shaposhnik,他愿意成为项目的 Champion。

其余的两位导师来自于国内,他们分别是 Apache ServiceComb 社区的资深 Apache 成员姜宁和 Apache RocketMQ 社区的冯嘉。就这样,在三位导师和一位 Champion 的帮助下,我们成功的进入了 Apache 孵化器。

80% 的代码曾由一人提交, Apache ShardingSphere 何以从 ASF 毕业并晋升 TLP                                            顶-冯金伟博客园

  (2018 年 12 月,时任 Apache 基金会主席,导师 Craig 访问京东数科的小伙伴)

  导师是项目可以进入孵化器的关键人物,其主要任务是让项目的 PPMC 理解 Apache 的规则,PPMC 主要职责是版本发布和提交者选举。张亮对这个模式做了进一步解释:“导师的指导仅限于让孵化项目践行 Apache Way,而不是项目本身的技术和产品发展路径。项目的 Roadmap,是由 PPMC 和提交者共同决定的。

  张亮:

Apache 的开源理念认为凡是符合 Apache Way 的项目最终将会得到很好的发展,因此,导师、PPMC 和提交者各司其职即可。

项目的贡献不仅在于代码,它是多元化的,还包括邮件讨论、决议、文档、回答问题、分享、运营等等,任何贡献都是被认可的。除了社区的组建,法务合规也是至关重要的。导师将指导 PPMC 完成项目的许可证、品牌、知识产权的合规性。

导师是 Apache Way 的专家,并非项目的技术专家。

在孵化过程中,导师们为 ShardingSphere 社区提供了很多帮助和指导。包括 Apache Way 的指导,社区拓展的方针,邮件列表、孵化报告、whimsy、JIRA 等基础设施的使用,Apache 版本发布的流程以及 License 的梳理,贡献者和 PPMC 的选举投票等等。

社区优于代码这一理念也随着社区的发展,越来越真正被大家认可。

  和导师的沟融也是社区运营的关键一环。“邮件列表的活跃度是社区的重要度量指标。”张亮说,作为 PPMC,他和国外导师沟通是通过邮件;和国内导师沟通时,简单的问题咨询以微信为主,讨论和决议类事件,则不区分国别,统一使用 dev@shardingsphere.apache.org 邮件列表完成沟通。

80% 的代码曾由一人提交, Apache ShardingSphere 何以从 ASF 毕业并晋升 TLP                                            顶-冯金伟博客园

  (ShardingSphere 邮件列表截选)

  张亮透露,在孵化器这一年多的发展中,Apache ShardingSphere 社区没有一次是采用投票的方式达成最终一致的,“协商是最有效的解决分歧的方案。”

  社区运营不好,就别想毕业

  打造具有粘性的活跃社区,被张亮当成在 Apache 孵化器的首要任务和最大预期。

  从结果来看,进入孵化器之前,ShardingSphere 的贡献者是 30 多人,目前项目贡献者已达到 120 人以上。

  此外,随着贡献者数量的激增,Issue 数量、PR 数量、代码提交数量、甚至 star 数量都呈爆发式增长。张亮表示,随着越来越多高质量贡献者的加入,ShardingSphere 社区也遵循 Apache 社区的理念,投票选举了十几名拥有 Apache 账户的官方提交者,“创建了活跃且多元化的社区,是 ShardingSphere 在 Apache 孵化阶段的最重要收获。“

80% 的代码曾由一人提交, Apache ShardingSphere 何以从 ASF 毕业并晋升 TLP                                            顶-冯金伟博客园

  (2019 年 12 月,举办 meetup,和社区提交者见面)

  在张亮看来,Apache 孵化器最大的优点有两个:一是能够吸引更多贡献者参与;二是能够给用户提供更加放心的服务。

  吸引贡献者参与方面。ShardingSphere 在进入 Apache 孵化器之初,基本都是由京东数科的工程师主导开发的,外部力量很难真正的参与进来。在进入孵化器之后,中国电信翼支付、DaoCloud 和一些个人贡献者相继参与其中,为 ShradingSphere 贡献了项目的 logo、UI 界面、影子表压测功能和弹性迁移雏形等。

  “一个中立于公司的基金会,能够打破技术爱好者在商业层面的边界,亲密无间的合作。”张亮评价道。

  对于使用者来说,由于 Apache 基金会的项目必须完全符合 Apache license,项目本身以及项目所有的依赖都必须与 Apache 协议兼容。而 Apache 协议是对商用友好的,所以使用和依赖 Apache 基金会的项目,完全不需要担心 GPL 等开源传播协议对公司商业行为带来的风险。并且随着项目归属于基金会,用户无需在担心项目社区由个人掌控所带来的停止更新的可能,降低技术选型风险。同时,张亮表示,项目完全符合 Apache license 也是 Apache Release 的难点所在。

  张亮例举了他认为在孵化器过程中最重要的一点——如何鼓励贡献者持续参与社区。

  张亮:

ShardingSphere 是一个入门门槛较高的项目,其数据分片、SQL 解析、基于 NIO 的数据库协议等核心模块,很难直接面向大众开发者,吸纳新的贡献者成为提交者的难度比较陡峭。

因此我们特意开放了新手任务来吸引更多的贡献者,并且将 ShardingSphere 的产品定位从分库分表中间件转换为分布式数据库平台,用于吸纳更多的社区贡献,并使其有机的组合在一起。

除此之外,在社区发展的初级阶段,我们降低了提交者的选举难度。在投票时,PPMC 更加看重有潜质和热情的贡献者。随着目前社区成熟度的增加,提交者的选举难度也将随之增长。

  社区运营结果也直接影响到项目能否顺利毕业。Apache 有固定的项目成熟度评估模型,来评估项目项目是否可以达成毕业条件。该模型由代码、版权、发布、质量、社区、一致性决议和依赖 7 个大的项目组成,每个大的项目中有2-7 个小的评估项不等。

  评估报告参见:https://github.com/apache/shardingsphere/blob/master/MATURITY.md

  从 ASF 毕业之后,项目要么独立成为顶级项目,要么成为其他顶级项目的子项目。去年,中国团队主导的 Apache SkyWalking 从 ASF 孵化器毕业,成为顶级项目。目前,包括 ShardingSphere 在内,从 ASF 毕业的中国团队项目已达 10 个,还包括:Apache CarbonData、Apache Dubbo、Apache Eagle、Apache Griffin、Apache HAWQ 、Apache Kylin、Apache RocketMQ、Apache ServiceComb。

  而 ShardingSphere 成功毕业并晋升顶级项目的关键成果是:活跃社区组建、项目成度的评估以及品牌的法务合规。此外熟练掌握项目发布和提交者选举则也是孵化阶段最重要的两个任务。

  对于毕业孵化的周期,张亮介绍,这取决于项目和社区自身所处的状态,并没有横向可比性。有的项目可在 8 个月内毕业,有些则几年都未毕业。孵化过程中,项目可以使用 Apache 基金会提供的基础设施,但没有完全被基金会所认同,是可以随时通过协商退出基金会的。

  就 ShardingSphere 项目孵化周期而言,张亮认为 17 个月完成毕业孵化已经超出他的预期,这其中,导师和社区成员发挥了关键作用,“值得一提的是,在项目孵化过程中,一些导师和 PPMC 的身份发生了变化。Craig L Russell 在这期间当选了 Apache 基金会的主席;PPMC 吴晟则由于他主导的另一个项目 Apache SkyWalking 的活跃和毕业,具备导师的资格。这使得  ShardingSphere 的孵化过程更加顺畅。”

  “从我个人角度来看,产品完成度还不足 50%”

  “项目从 Apache 孵化器毕业,只代表项目的社区运作方式得到了 ASF 的认可。”张亮表示,对于产品本身来说,Apache ShardingSphere 距最终的目标还有很大差距。“从我个人角度来看,产品的完成度应该还不足 50%。”

  在孵化器一年半的时间里,Apache ShardingSphere 进行了产品迭代,从分库分表中间件转变为分布式数据库生态平台,先后发布 5 个版本,分别是 4.0.0-RC1,4.0.0-RC2,4.0.0-RC3,4.0.0 和 4.0.1。

  张亮:

前 3 个版本都是 4.0.0 稳定版之前的发布候选版本。在孵化器阶段主要的发力点是发布了 4.0.0 稳定版。主要功能包括了 SQL92 方言、PostgreSQL 的代理端、XA 和柔性事务的支持以及对 Seata 等事务框架的整合、数据脱敏、SkyWalking 插件、UI 等功能。

80% 的代码曾由一人提交, Apache ShardingSphere 何以从 ASF 毕业并晋升 TLP                                            顶-冯金伟博客园

  (Apache ShardingSphere 核心功能图)

  但在张亮及其团队的规划中,Apache ShardingSphere 还有许多事情要做:

  • 项目的短期目标是打造一个通过可插拔方式对支持的组件和功能进行管理的平台,可目前插拔平台已经在开发中,其完整版本将会在 Apache ShardingSphere 的 5.x 版本中与大家见面。
  • 不远的将来, Apache ShardingSphere 要进入数据库内核领域探索,打造一个全面的分布式数据库体系。去年公布的 JDTX 设计思路,是项目在分布式事务方面的探索。未来在不断完善 JDTX 的同时,项目也会进行查询优化器的探索,并计划在存储端提供 KV 等更加多元化的方案选择。
  • 此外,项目团队还希望打造一个分布式数据库的治理和调度体系。数据库在 Apache ShardingSphere 的体系中负责底层存储,而由可插拔平台完全接管分布式场景下的分片、计算、事务、治理和调度等能力。
  • 最终的目标,则是希望 Apache ShardingSphere 能够像 Kubernetes 管理容器一样,以云原生的方式管理所有纳入体系的数据存储端。
  • 公司层面,Apache ShardingSphere 更宏观目标是承载京东数科 T1 平台数据库的全部能力。 目前,Apache ShardingSphere 是 T1 金融数字化解决方案技术中台分布式数据库核心中间件产品。基于此产品和团队,京东数科正在打造一个可插拔自主可控的金融级分布式关系数据库。

80% 的代码曾由一人提交, Apache ShardingSphere 何以从 ASF 毕业并晋升 TLP                                            顶-冯金伟博客园

  (TI:金融数字化解决方案全景图)

  也正因为如此,Apache ShardingSphere 项目方长期开放招聘数据研发工程师,希望更多的有理想和开源愿景的技术牛人加入,将工作与兴趣结合在一起,打造更好的开源社区。

  最后,张亮也介绍了目前 Apache ShardingSphere 的使用情况,正式登记注册使用的公司超过 130 家,“实际采用的公司我们暂无从统计,但从微信群解答问题的情况来看,未登记的采用公司数量十分可观。”可以参见:https://shardingsphere.apache.org/community/cn/powered-by/

  随着项目从 Apache 孵化器毕业,张亮也希望能在海外市场做更多推广,“虽然项目还没有国外公司采用,但是在 GitHub 的 Issue 和 PR 已经出现了不少外国贡献者的身影。”在张亮看来,国产项目走向国际化市场,除了必要的宣传和推广外,还要做到能够融入当今主流的开源体系。大而全的项目反而不易在海外市场获得认可。专注项目自身领域,与其他开源项目合作解决问题是能否让海外市场获得认可的关键。

  现在,ShardingSphere 已经从孵化器毕业,Apache 不再是 ShardingSphere 的帮助提供方,而是 ShardingSphere 即是 Apache 的一部分——完全归属于 Apache 基金会,成为其正式项目,“身份的转变,将会吸引更多的优秀开源贡献者参与到其中。”张亮说道。

  嘉宾简介

  张亮,京东数科数字技术中心架构专家,Apache ShardingSphere 项目 VP & 创始人。

  热爱开源,擅长以 Java 为主分布式架构,推崇优雅代码。目前主要精力投入在将分布式数据库中间件 Apache ShardingSphere 打造为业界一流的金融级数据解决方案之上。

  曾出版书籍《未来架构——从服务化到云原生》。

  个人 GitHub:https://github.com/terrymanu

  Apache ShardingSphere:

  • https://github.com/apache/shardingsphere
  • https://gitee.com/Sharding-Sphere/sharding-sphere