+++
title = "Apache ShardingSphere社区的探索与拓展"
weight = 5
chapter = true
+++

## Apache ShardingSphere社区的探索与拓展 ##


Apache ShardingSphere社区受邀参与了11月9日在清华大学举办的《Apache Event——走进Apache开源软件社区》的分享活动。在活动中Apache ShardingSphere社区的PPMC张亮分享了《Apache ShardingSphere社区的探索与拓展》这个话题，下面呈现分享的主要内容。

### 01 为什么要做开源 ###

做开源对于个人来讲，能获得两方面的收益：更好的职业生涯和享受乐趣。  

![](https://shardingsphere.apache.org/blog/img/commu1.jpg)

\-1- 更好的职业生涯

1\. 职位需求多。企业对于开源岗位有很强的招聘需求。开源能够给公司带来很多价值，如：通过开源项目搭建云服务平台并提供增值服务、让开源项目本身的质量得以提升、提升公司的是技术影响力等。开源的职位往往与技术和社区本身关联性高、不受地域限制，属于一个比较自由的职位。

2\. 自身技能提升。包括技术能力和软技能的提升。通过参与顶级的开源项目，技术的提升自不必说，其他的软技能也会得到相应的提升，如英语、协作能力、运营推广能力等。如果是打造全新的开源项目，从零到一的开创能力也会得到极大的提升。

3\. 人际关系拓展。开源参与者的职业生涯将不再仅关注薪水、KPI等与工作本身强相关的事情。纯粹的技术交流、各种会议的分享、写作邀请、甚至资本注入等各种与行业相关的连接会被逐渐扩展，参与国际的开源项目还会认识更多的国际友人。正所谓低头做技术，抬头看世界。参与开源，认识更多的人，为今后职业生涯的发展提供更多可能性。

4\. 个人品牌打造。开源的工作，其过程和成果都是公开的，这就意味着参与者的所有努力都可以被任何人在任何时间看得到，是永久留存的记录。而公司内部的私有项目风险比开源项目相对来说要大很多，私有项目的评断标准取决于项目负责人的认可，如果项目责任人不认可，那么参与者的价值就趋近于零。开源项目则不同，正是因为参与者的价值能够在一个公开的平台去展现，价值的评断不取决于一个相对狭小的范围。

\-2- 享受乐趣

1\. 成长的乐趣。真正喜欢去做一件事情的人，会在成长中体会到乐趣。软件开发行业是要需要从业者发挥自驱力的行业，遵从内心的喜欢编程，是在这个行业中取得成功的捷径。喜欢编程的人，自然能够体会自身成长所带来的乐趣。

2\. 成就感。行业的认同，会在成长的同时获得成就感。无论是个人自身的成就感，还是项目提升带来的成就感，都是职业生涯中快乐的源泉。当你所做的东西，被同好者广泛认可的时候，成就感会油然而生。

### 02 Apache软件基金会项目简介 ###

Apache软件基金会是一个非盈利组织。从1999年至今的20年时间里，产出了无数影响软件行业的项目。在几百个Apache软件基金会项目中，我们可以浏览一下几个非常著名的项目：Apache Tomcat、Apache Commons、Apache Maven、Apache Hadoop、Apache Kafka、Apache Spark、Apache Zookeeper等等。Apache软件基金会的项目成为了开发者日常工作的基石。毫不夸张的说，如果以上项目，您一个都没听说过的话，那么可能很难拿到任何一家公司的Java后端或大数据类Offer。

近年来，来自中国的Apache项目也越来越多了，截止到目前为止，已经有19个来自中国的项目进入了Apache软件基金会，其中有9个项目已经毕业成为顶级项目，还有10个项目正在孵化中。对于没有在西方社会工作过的人来说，参与一个国际化的开源项目的门槛有点高，因此，来自中国的Apache软件基金会项目对于想参与开源的国内同学是一个巨大的福音。这些项目能够提供一个有效的缓冲带，让一些初入社区且找不到门路的同学能够以熟悉的母语快速的进入国际化的开源社区。来自中国的Apache软件基金会项目，与来自西方的Apache软件基金会项目在流程、规范、法务等方面并无不同，唯一的区别是能在社区中找到可以说汉语的人，拉进沟通交流的举例，并进一步的了解Apache社区的运作模式，为以后参与其他国际化项目打好基础。

### 03 Apache ShardingSphere 简介 ###

Apache ShardingSphere是19个来自中国的Apache软件基金会项目之一，目前正在孵化器中。Apache ShardingSphere是一个微内核且可高度扩展的数据库中间件。它的内核微小而稳定，但却提供可无限扩展的平台，因此它非常适合与开放的社区一起成长，并近乎于无限的拓展其功能范围。

Apache ShardingSphere开源将近4年了，它的外部使用相当广泛，目前有100+公司明确的声明正在使用中，并未声明的公司不计其数，无法准确的统计。已经记录在册的公司涵盖了各行各业，有互联网、互联网金融、在线教育、企业服务，甚至还包括政府机关。Apache ShardingSphere和纯粹从社区兴起的项目略有不同，它是由公司捐助到Apache软件基金会的，在公司内部已经被十分广泛的使用，涵盖京东白条、超级账户、城市计算、秒级监控、京东金融云、京东大数据、京东海外商城等很多系统。相对于自由发展的社区，Apache ShardingSphere也需要承载的稳定性的枷锁。


### 04 Apache ShardingSphere 社区数据统计 ###

对于一个开源项目来说，项目本身和社区是同样重要的，因此，项目+社区才是组成的Apache ShardingSphere的全部。Apache ShardingSphere是在2018年11月10号正式进入Apache软件基金会孵化器的，至今为止正好一年。这一年来，社区活跃度的社区数据变化还是很明显的。

\-1- 邮件列表数据变化

这里只统计dev@shardingsphere.apache.org邮箱，dev邮箱是社区交流问题的主要途径。2019年5月有邮件53封；主题20个；参与人数14人。而且这些数据的统计是包含了GitBox从GitHub转发的15封邮件，那么实际的邮件数量是38封。在2019年9月的统计数据则有了明显的提升，其中邮件148封；主题34个，参与人37人，并且我们已经将GitBox转发的邮件从dev邮件组摘除，而是转移到了notification@shardingsphere.apache.org邮箱。

\-2- GitHub数据变化

从项目开源之初，到2018年6月左右的时间，项目整体的提交波峰波谷数据，和我个人的提交数据是几乎吻合的。这说明，在没有进入Apache软件基金会之前，ShardingSphere项目是个人色彩浓重的项目，它的成功与失败，是绑定在个人之上，项目的风险完全集中在一个或几个人身上。对比下近一个月（2019年10月-2019年11月）的GitHub数据，可以看到项目有33个人参与；合并了100个pull requests；关闭了167个issues；新建了36个issues；总共修改了591个文件；其中新增代码12021行；删除代码6577行。可以看到，Apache ShardingSphere已经从个人项目转变为一个社区项目，由社区所掌控的项目风险更小、进展更迅速。GitHub的stars数量在近一年中增长了4000以上，从进入Apache基金会之前的5000+增长到了现在的9000+。

\-3- 社区数据变化

在进入Apache孵化器时，ShardingSphere的项目管理委员会成员一共有11人，除了项目管理委员会成员，社区中并未有官方提交者。经过了一年的进展，目前项目管理委员会成员增加了2人，达到了13人；并且新提升了7个官方提交者。一年来，参与项目的贡献者也从37人增长到了88人。参与的人数还在不断的增长中，未来ShardingSphere社区会从这些贡献者中提升更多的官方提交者，也会从官方提交者中提升更多的项目管理委员会成员。

### 05 Apache ShardingSphere社区的核心思路  ###

1\. 社区优于代码。这是Apache社区的每一个项目所反复强调的事情。我们所关注的不仅仅是代码，再好的代码也是由人搭建的。我们更加希望构建一个活跃的社区，由活跃的社区一起去构建活跃的代码库。活跃的社区会使整个代码功能和质量渐进前进。  

2\. 尊重和相信合作者。我们相信，主动参与开源社区的人，是因为他愿意去做，并且愿意去做好的，是有充分热情的。所以我们会尊重每一个合作者，珍惜每个合作者的贡献。同时，我们也相信每一个合作者，并授予他们最大的权限。这里需要特别说明一下，合作者和初级贡献者是不同的，合作者需要通过较为长期参与来获得其他合作者的认同。识别值得依赖的合作者，是开源社区的重要工作之一。

3\. 自动化测试。随着项目的贡献者越来越多，代码提交也会越来越频繁，靠人力去把控最终质量则会愈加不确定。出错与否不一定取决于个人意志，ShardingSphere社区更加看重能通过自动化的方式降低出错的概率。自动化测试框架能够保证贡献者不在提心吊胆的情况下提交代码，只要自动化测试是正确的，那么代码的正确性就可以保证。自动化测试可以让参与者更加愉悦的享受代码贡献的过程。

4\. 创建自助渠道。随着项目被越来越多的用户所使用，各种问题也会层出不穷，即有可能是项目的bug，也有可能是用户自身的问题，还有可能是文档不清晰导致。因此，创建一个可以用用户自助的渠道就尤为重要。通过文档和FAQ，让用户能够以自助的方式解决大部分问题。在出现无法解决的问题时，通过邮件、GitHub、甚至微信群都可以找到社区的核心开发者，进一步的沟通和交流问题。

5\. 公开和远程的工作模式。只有在邮件列表或GitHub进行公开讨论问题，才会被视为已经发生的问题。社区不会处理私下的沟通和承诺，社区希望所有的问题和决议都是公开可查的。远程协作则表示合作者没有必要在地理上集中在一起，这就意味着工作是异步的。非交互式沟通，则进一步要求信息来往要交代清楚上下文，并尽可能多的通过一次信息描述更多的问题，从而进一步的促进沟通者的思考。

Apache软件基金会提供了一个社区成熟度的评估模型，从代码、著作权、发布、质量、社区、一致决议、产品独立性这7个方面对社区的成熟度进行评估。目前Apache ShardingSphere已经完成了评估，已经通过了其全部34个子项目的评估。

### 06 提升Apache ShardingSphere社区的活跃度 ###

1\. 项目架构调整。Apache ShardingSphere在技术结构层面是由数据库协议层、SQL层、分布式事务层和存储层组成的，在功能层面则是由分片、高可用治理、数据脱敏、读写分离等很多功能组成。目前的ShardingSphere架构正在调整为完全SPI化的架构，扩展任一技术或实现任一功能都不会影响其他功能。举例说明：Apache ShardingSphere对SQL的支持会根据数据库的方言完全分离，改动了MySQL的解析部分，不会对其他数据库有任何影响。因此，ShardingSphere可以支持很多贡献者同时贡献代码而相互不冲突。

2\. 项目指南。Apache ShardingSphere为贡献者提供了很多指南，可以让潜在的贡献者通过指南了解如何参与Apache ShardingSphere的社区，这些指南包括邮件订阅指南、贡献者指南、提交者指南、发布指南以及文档指南，基本涵盖了所有的参与社区的要素。社区也正在着手处理技术模块相关的贡献指南，目前的测试框架以及SQL解析指南正在进行中。

3\. 规范。规范化的代码可以使项目更加具有仪式感，当有代码开始腐坏时，是整个项目开始失控的开始。因此，代码规范也是Apache ShardingSphere项目的重要组成，社区提供了代码规范文档的同时，也提供了checkstyle等代码检查工具，不符合规范的代码通不过持续集成工具的检查，也无从合并至开发主干。

4\. 需求边界划分。Apache ShardingSphere本身是一个活跃社区的同时，也是京东的基础数据库中间件，支撑了大量的在线应用。因此Apache ShardingSphere将项目拆分为公司使用的场景和社区场景。在公司使用的场景需求下，功能会尽量维持稳定、优先级更高、并且有Deadline作为项目提交的最终日期限制；在社区的场景下，功能会维持持续开放的心态、优先级适中、一般会采用里程碑的方式作为功能的最终日期。作为京东的Apache ShardingSphere的团队，我们也是社区的一部分，在参与社区的同时，会将稳定版本的Apache ShardingSphere赋能公司内部应用。

5\. 多元化沟通渠道。除了邮件和GitHub的issue，社区也提供了微信群进行交流。特别说明一下，邮件和GitHub永远是核心开发者用于处理问题的依据。微信沟通虽然方便，但不便于归档和二次查询，因此只用于进一步沟通使用，如果用户没有通过邮件或GitHub创建问题，核心开发者可能并不会通过微信直接反馈。

贡献社区的方式有很多，包括但不限于分享（演讲、文章）、回答问题、参与讨论、调查issue、网站设计、文档更新、文章文档翻译、代码提交、社区运营&推广等。代码提交只是众多贡献方式的一种，热烈欢迎愿意参与社区的同学以多元化的方式贡献社区，提升自身的价值。

愿Apache ShardingSphere社区成为您参与的候选之一。

![](https://shardingsphere.apache.org/blog/img/commu2.jpg)

* * *

官网网址：https://shardingsphere.apache.org

官网网址（中文）：https://shardingsphere.apache.org/index\_zh.html

GitHub：https://github.com/apache/incubator-shardingsphere

订阅邮箱：dev-subscribe@shardingsphere.apache.org
