Apache ShardingSphere 社區的探索與拓展
- 2019 年 11 月 21 日
- 筆記
| 轉載自:ShardingSphere官微
| 編輯:Corrie
Apache ShardingSphere社區受邀參與了11月9日在清華大學舉辦的《Apache Event——走進Apache開源軟件社區》的分享活動。在活動中Apache ShardingSphere社區的PPMC張亮分享了《Apache ShardingSphere社區的探索與拓展》這個話題,下面呈現分享的主要內容。
1
為什麼要做開源
做開源對於個人來講,能獲得兩方面的收益:更好的職業生涯和享受樂趣。

更好的職業生涯
1. 職位需求多。企業對於開源崗位有很強的招聘需求。開源能夠給公司帶來很多價值,如:通過開源項目搭建雲服務平台並提供增值服務、讓開源項目本身的質量得以提升、提升公司的是技術影響力等。開源的職位往往與技術和社區本身關聯性高、不受地域限制,屬於一個比較自由的職位。
2.自身技能提升。包括技術能力和軟技能的提升。通過參與頂級的開源項目,技術的提升自不必說,其他的軟技能也會得到相應的提升,如英語、協作能力、運營推廣能力等。如果是打造全新的開源項目,從零到一的開創能力也會得到極大的提升。
3. 人際關係拓展。開源參與者的職業生涯將不再僅關注薪水、KPI等與工作本身強相關的事情。純粹的技術交流、各種會議的分享、寫作邀請、甚至資本注入等各種與行業相關的連接會被逐漸擴展,參與國際的開源項目還會認識更多的國際友人。正所謂低頭做技術,抬頭看世界。參與開源,認識更多的人,為今後職業生涯的發展提供更多可能性。
4. 個人品牌打造。開源的工作,其過程和成果都是公開的,這就意味着參與者的所有努力都可以被任何人在任何時間看得到,是永久留存的記錄。而公司內部的私有項目風險比開源項目相對來說要大很多,私有項目的評斷標準取決於項目負責人的認可,如果項目責任人不認可,那麼參與者的價值就趨近於零。開源項目則不同,正是因為參與者的價值能夠在一個公開的平台去展現,價值的評斷不取決於一個相對狹小的範圍。
享受樂趣
1. 成長的樂趣。真正喜歡去做一件事情的人,會在成長中體會到樂趣。軟件開發行業是要需要從業者發揮自驅力的行業,遵從內心的喜歡編程,是在這個行業中取得成功的捷徑。喜歡編程的人,自然能夠體會自身成長所帶來的樂趣。
2.成就感。行業的認同,會在成長的同時獲得成就感。無論是個人自身的成就感,還是項目提升帶來的成就感,都是職業生涯中快樂的源泉。當你所做的東西,被同好者廣泛認可的時候,成就感會油然而生。
2
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社區的運作模式,為以後參與其他國際化項目打好基礎。

3
Apache軟件基金會項目簡介
Apache ShardingSphere是19個來自中國的Apache軟件基金會項目之一,目前正在孵化器中。Apache ShardingSphere是一個微內核且可高度擴展的數據庫中間件。它的內核微小而穩定,但卻提供可無限擴展的平台,因此它非常適合與開放的社區一起成長,並近乎於無限的拓展其功能範圍。
Apache ShardingSphere開源將近4年了,它的外部使用相當廣泛,目前有100+公司明確的聲明正在使用中,並未聲明的公司不計其數,無法準確的統計。已經記錄在冊的公司涵蓋了各行各業,有互聯網、互聯網金融、在線教育、企業服務,甚至還包括政府機關。Apache ShardingSphere和純粹從社區興起的項目略有不同,它是由公司捐助到Apache軟件基金會的,在公司內部已經被十分廣泛的使用,涵蓋京東白條、超級賬戶、城市計算、秒級監控、京東金融雲、京東大數據、京東海外商城等很多系統。相對於自由發展的社區,Apache ShardingSphere也需要承載的穩定性的枷鎖。

4
Apache ShardingSphere
社區數據統計
對於一個開源項目來說,項目本身和社區是同樣重要的,因此,項目+社區才是組成的Apache ShardingSphere的全部。Apache ShardingSphere是在2018年11月10號正式進入Apache軟件基金會孵化器的,至今為止正好一年。這一年來,社區活躍度的社區數據變化還是很明顯的。
郵件列表數據變化
這裡只統計[email protected]郵箱,dev郵箱是社區交流問題的主要途徑。2019年5月有郵件53封;主題20個;參與人數14人。而且這些數據的統計是包含了GitBox從GitHub轉發的15封郵件,那麼實際的郵件數量是38封。在2019年9月的統計數據則有了明顯的提升,其中郵件148封;主題34個,參與人37人,並且我們已經將GitBox轉發的郵件從dev郵件組摘除,而是轉移到了[email protected]郵箱。
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+。
社區數據變化
在進入Apache孵化器時,ShardingSphere的項目管理委員會成員一共有11人,除了項目管理委員會成員,社區中並未有官方提交者。經過了一年的進展,目前項目管理委員會成員增加了2人,達到了13人;並且新提升了7個官方提交者。一年來,參與項目的貢獻者也從37人增長到了88人。參與的人數還在不斷的增長中,未來ShardingSphere社區會從這些貢獻者中提升更多的官方提交者,也會從官方提交者中提升更多的項目管理委員會成員。
5
Apache ShardingSphere
社區的核心思路
1. 社區優於代碼。這是Apache社區的每一個項目所反覆強調的事情。我們所關注的不僅僅是代碼,再好的代碼也是由人搭建的。我們更加希望構建一個活躍的社區,由活躍的社區一起去構建活躍的代碼庫。活躍的社區會使整個代碼功能和質量漸進前進。
2. 尊重和相信合作者。我們相信,主動參與開源社區的人,是因為他願意去做,並且願意去做好的,是有充分熱情的。所以我們會尊重每一個合作者,珍惜每個合作者的貢獻。同時,我們也相信每一個合作者,並授予他們最大的權限。這裡需要特別說明一下,合作者和初級貢獻者是不同的,合作者需要通過較為長期參與來獲得其他合作者的認同。識別值得依賴的合作者,是開源社區的重要工作之一。
3. 自動化測試。隨着項目的貢獻者越來越多,代碼提交也會越來越頻繁,靠人力去把控最終質量則會愈加不確定。出錯與否不一定取決於個人意志,ShardingSphere社區更加看重能通過自動化的方式降低出錯的概率。自動化測試框架能夠保證貢獻者不在提心弔膽的情況下提交代碼,只要自動化測試是正確的,那麼代碼的正確性就可以保證。自動化測試可以讓參與者更加愉悅的享受代碼貢獻的過程。
4. 創建自助渠道。隨着項目被越來越多的用戶所使用,各種問題也會層出不窮,即有可能是項目的bug,也有可能是用戶自身的問題,還有可能是文檔不清晰導致。因此,創建一個可以用用戶自助的渠道就尤為重要。通過文檔和FAQ,讓用戶能夠以自助的方式解決大部分問題。在出現無法解決的問題時,通過郵件、GitHub、甚至微信群都可以找到社區的核心開發者,進一步的溝通和交流問題。
5. 公開和遠程的工作模式。只有在郵件列表或GitHub進行公開討論問題,才會被視為已經發生的問題。社區不會處理私下的溝通和承諾,社區希望所有的問題和決議都是公開可查的。遠程協作則表示合作者沒有必要在地理上集中在一起,這就意味着工作是異步的。非交互式溝通,則進一步要求信息來往要交代清楚上下文,並儘可能多的通過一次信息描述更多的問題,從而進一步的促進溝通者的思考。
Apache軟件基金會提供了一個社區成熟度的評估模型
(https://community.apache.org/apache-way/apache-project-maturity-model.html),從代碼、著作權、發佈、質量、社區、一致決議、產品獨立性這7個方面對社區的成熟度進行評估。
目前Apache ShardingSphere已經完成了評估
(https://github.com/apache/incubator-shardingsphere/blob/dev/MATURITY.md),已經通過了全部其全部34個子項目的評估。
6
提升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
官網網址(中文):
https://shardingsphere.apache.org/index_zh.html
GitHub:
https://github.com/apache/incubator-shardingsphere
訂閱郵箱: