
【CSDN 編者按】幾天前,當 GitHub 全球產(chǎn)品技術生態(tài)總經(jīng)理 Michael Francisco 談到中國開發(fā)者已經(jīng)成為 GitHub 上最活躍的群體時,有開發(fā)者提出數(shù)量之后質量也要跟上。的確,過去十數(shù)年間,中國開源一直呈現(xiàn)企業(yè)熱使用熱社區(qū)冷開發(fā)冷的景象,不過現(xiàn)在正在顯著發(fā)生變化,從 Apache ShardingSphere 的成長歷程就可以一窺。
歷經(jīng) 4 年,從第一行代碼到今天,ShardingSphere 正式成為 Apache 頂級開源項目,GitHub 開發(fā)者關系主管 Martin Woodward 如此評價道:“我們很高興看到這個社區(qū)在過去兩年里發(fā)展得非常好,現(xiàn)在有 120 多個直接貢獻者?!痹诒疚闹?,其核心初創(chuàng)人員為我們分享了它的開源之路,相信會對所有熱愛開源希望有所建樹的開發(fā)者們大有裨益。
前言
從 Sharding-JDBC 到 Apache ShardingSphere;
從輕量級的分庫分表中間件到完整閉環(huán)的分布式數(shù)據(jù)庫中間件平臺;
從 2016 年 1 月的第一行代碼到現(xiàn)今的 300K+行代碼;
從寥寥無幾的關注到 GitHub 10K+ 的 star;
從無人問津的社區(qū)到 100+ 位貢獻者;
從公司內(nèi)部的應用類庫到 100+ 的采用公司列表;
從尋找 mentor 到順利成為 Apache 頂級項目。
……
Apache ShardingSphere 團隊核心初創(chuàng)人員將講述這其中的跌宕起伏,并以時間軸為線索為你呈現(xiàn)它開源之路背后的故事。
項目介紹
Apache ShardingSphere 是一套開源的分布式數(shù)據(jù)庫中間件解決方案組成的生態(tài)圈,它由 3 款相互獨立,卻又能夠混合部署配合使用的產(chǎn)品組成。它們均提供標準化的數(shù)據(jù)分片、分布式事務和數(shù)據(jù)庫治理功能,可適用于如 Java 同構、異構語言、云原生等各種多樣化的應用場景,核心功能如 1-1 所示。
Apache ShardingSphere 由三個子項目組成,形成一個完整的數(shù)據(jù)庫解決方案,合稱 J.P.S. 生態(tài)系統(tǒng)。
ShardingSphere-JDBC:定位為輕量級 Java 框架,在 Java 的 JDBC 層提供額外服務。它使用客戶端直連數(shù)據(jù)庫,以 jar 包形式提供服務,無需額外部署和依賴,可理解為增強版的 JDBC 驅動,完全兼容 JDBC 和各種 ORM 框架。?
ShardingSphere-Proxy:定位為透明化的數(shù)據(jù)庫代理端,提供封裝了數(shù)據(jù)庫二進制協(xié)議的服務端版本,用于完成對異構語言的支持。目前提供 MySQL/PostgreSQL 版本,它可以使用任何兼容 MySQL/PostgreSQL 協(xié)議的訪問客戶端操作數(shù)據(jù),對 DBA 更加友好。
ShardingSphere-Sidecar(TODO):定位為 Kubernetes 的云原生數(shù)據(jù)庫代理,以 Sidecar 的形式代理所有對數(shù)據(jù)庫的訪問。通過無中心、零侵入的方案提供與數(shù)據(jù)庫交互的的嚙合層,即 Database Mesh,又可稱數(shù)據(jù)網(wǎng)格。
Apache ShardingSphere 的亮點主要包括:
完整的分布式數(shù)據(jù)庫解決方案:提供數(shù)據(jù)分片、分布式事務、數(shù)據(jù)彈性遷移、數(shù)據(jù)庫和數(shù)據(jù)治理等核心能力。
獨立的 SQL 解析引擎:支持多 SQL 方言的完全獨立化 SQL 解析引擎,能夠脫離 ShardingSphere 獨立使用。
可插拔微內(nèi)核:所有的 SQL 方言、數(shù)據(jù)庫協(xié)議和功能都能夠通過 SPI 的可插拔方式加載或卸載,微內(nèi)核甚至在未來可以運行于無任何功能的空白環(huán)境中。
Apache 基金會
The most popular open source software is Apache.
這是對 Apache 開源軟件基金最好的描述和肯定。它旨在為全世界提供優(yōu)質的開源軟件,同時歡迎全世界的朋友加入 Apache 社區(qū)貢獻力量,并在這個過程中不斷成長、得到肯定、共建開源社區(qū)。無論是否從事軟件開發(fā)工作,大家多少都知道它的存在及其提供的優(yōu)質開源項目,可見其影響之大、之深遠。
此外,參與 Apache 開源社區(qū),并在自己的努力下成為 Apache Committer,更是大多數(shù)軟件開發(fā)工程師心之所向。
ShardingSphere 在開源之初,就有進入 Apache 開源組織基金會的計劃。其原因有以下幾點:
Apache 基金會獨特的 Apache way 和社區(qū)建設思想會讓一個開源項目更規(guī)范、更有生命力;
Apache 基金會的導師制度會為一個開源社區(qū)帶來優(yōu)秀的指導和幫助;
Apache 基金會會為其下的開源項目帶來版權和商標上的法律保護;
Apache 基金會在全世界范圍內(nèi)的影響不言而喻,若是能進入 Apache 基金會,則會擴大項目的影響力,使其進入世界范圍的開源領域。
Apache 基金會內(nèi)的項目會更有機會登上世界舞臺,并與其他開源項目建立友好交流,也能吸引更多貢獻者加入社區(qū)。
但同樣,進入 Apache 開源基金會的門檻可并不簡單,特別對于國內(nèi)的項目來說,語言和地域的障礙無疑雪上加霜。
如何為 Apache 做準備?
找尋 mentor 是進入 Apache 基金的最初且最重要的一步。
在了解了 Apache 基金會的運作方式后,我們便踏上了找尋 mentor 之旅。參加各種與開源相關的分享會或 meetup,借此來認識 Apache 的 member。但是,事情卻并不順利。多次的嘗試、接觸換來的只是口頭的認可。這段時間我們確實倍感壓力和焦慮,甚至打算以后再說,一切隨緣。
后來一個契機,我們認識了吳晟和華為的姜寧。吳晟是 Apache SkyWalking 項目的 VP,在開源領域有豐富的經(jīng)驗。他和 ShardingSphere 的前身 Sharding-JDBC 很有淵源,Sharding-JDBC 項目原型也有他參與設計,因此,他最終作為 ShardingSphere 的 PPMC 一同建設社區(qū)。在參與 ShardingSphere 社區(qū)建設的這一年多的時間里,他又陸續(xù)擔任了多個 Apache 孵化項目的 Mentor,并在今年被選舉為 Apache Member。
而姜寧同樣是一位熱心又有經(jīng)驗的老手,是國內(nèi)最資深的 Apache Member 之一,在與他交流的過程中,終于讓我們看到一些希望,他也最終成為了我們的 mentor。
再后來,團隊 VP 張亮又前去上海參加 HDC 大會,認識了我們的另一位 mentor—— Craig L Russell,Craig 當時是 Apache 的秘書長,所有的 SGA、ICLA 等法務文件均由他負責簽署。在 ShardingSphere 孵化的過程中,Craig 當選了 Apache 軟件基金會的主席。他友善而和氣,給予了我們很多有關社區(qū)規(guī)范的實用建議,也愿意助我們一臂之力。
第三位 mentor 則是由 Apache RocketMQ 的核心成員馮嘉擔任;最后由 Roman Shaposhnik 擔任項目的 Champion,為項目尋找導師之旅畫上完美句號。至今還記得我們當時的欣喜和激動。之前的無助、徘徊、失落在這一瞬間柳暗花明。
每個進入 Apache 基金會的項目,一定都有自己的故事。尤其對于中國的項目來說,語言與地域的障礙會讓我們更加艱難。好在有越來越多的來自于中國的項目進入了 Apache 基金會,也能看到越來越多的華人活躍在 Apache 的郵件列表里,還有 ALC Beijing 的建立讓參與門檻不斷降低,這對想要參與的國內(nèi)朋友來說,確實是個 good news!
進入 Apache 孵化器
為了正式進入 Apache 孵化器,項目代碼、社區(qū)、文檔等都需要進行一系列的規(guī)范和整理。這確實是個瑣碎但很重要的事情。
代碼層面,合規(guī)操作是首要原則。我們梳理第三方依賴的許可協(xié)議,確保滿足 Apache 軟件許可協(xié)議(ASL)合規(guī)的要求;
社區(qū)方面,我們開始由中文轉變成英文;
文檔方面則需要我們準備英文文檔,并準備相關的 proposal。
由于項目最開始的目標就是進入 Apache 基金會,所以在項目初期,依賴就盡可能地簡單,社區(qū)相對規(guī)范,文檔在不斷翻譯。不打無準備之仗,這些提前的準備讓這部分工作進展順利,而項目獲得 Apache 域名的那一刻,大家才真切感受到所有付出得到了最有價值的回報。
除了學習寫規(guī)范代碼,團隊成員也開始學習 Apache 的規(guī)范、運作方式、英文溝通渠道等細節(jié)。我們開始了解到如何關注社區(qū),什么是 consensus decision,如何用異步方式進行郵件溝通。特別是郵件列表的學習非常重要,你可以在其中找到歷史問題記錄、合規(guī)的解決方案、優(yōu)秀的案例等。
Apache way 的探索
很多人認為只要代碼開放,就叫做開源。但其實,這僅僅只是開源旅程的第一步。
如何構建一個活躍的社區(qū),如何理解 Apache way,是一個更為重要的話題。ShardingSphere 在進入 Apache 孵化器初期并未能完全理解 Apache way,并且由于過度注重代碼風格,以至于參與門檻較高、社區(qū)活躍度平平。
起初,我們并不知道問題出在哪里,迷茫了很長一段時間,直到在跟 Apache 的 member 不斷交流的過程中才漸漸意識到問題所在,因此社區(qū)發(fā)起了有關 committer bar 的討論,見圖 1-2。這是社區(qū)建設之路的轉折點,因為從此 community over code 的理念開始逐漸滲入人心,并指導我們的行動。

仔細閱讀 Apache way 的關注點:
Earned Authority, Community of Peers, Open Communications, Consensus Decision Making, Responsible Oversight
你會發(fā)現(xiàn)它一直在強調合規(guī)、開放、平等、協(xié)作,為的就是建立合規(guī)且活躍的項目社區(qū),盡可能地做到讓更多的人參與,平等溝通,推動項目發(fā)展,促進個人成長。秉持這個理念,ShardingSphere 開始在多維度進行調整:
代碼:規(guī)整代碼結構,劃分模塊功能,提供項目可插拔能力,從而允許用戶局部參與某一模塊的同時,盡量不破壞整體代碼結構;
心態(tài):開放的心態(tài),編制社區(qū)任務,鼓勵社區(qū)朋友參與,相關 PPMC 或 Committer 積極提供指導和幫助;
規(guī)范:梳理文檔和代碼規(guī)范,并提供詳細的訂閱、參與指南,大范圍促進用戶自主進行社區(qū)貢獻;
交流:鼓勵社區(qū)盡可能使用郵件和 Issue 進行討論從而公開討論內(nèi)容,同時針對較為細節(jié)的討論則放在微信群里進行。此外,官方公眾號還會介紹社區(qū)的進展、Release、刊登技術文章等;
合作:與其他 Apache 社區(qū)建立聯(lián)系、增加溝通,從合作交流中進行學習和發(fā)展。
在孵化期間,Apache ShardingSphere 先后與 Apache SkyWalking、Apache ServiceComb 進行項目的合作與集成,不僅彼此的產(chǎn)品功能更加完善,還增加了社區(qū)成員之間的交流。此外,還與 Apache DolphinScheduler(Incubating)和 Apache IoTDB(Incubating)舉辦了 co-meetup,詳見圖 1-3。還與 Apach pulsar 和 Apache APISIX(Incubating)的核心成員們進行了多次交流和探討。
經(jīng)過時間的積累,社區(qū)已有了質的變化。從社區(qū)的郵件討論、GitHub 的數(shù)據(jù)展示中,你會發(fā)現(xiàn) ShardingSphere 的社區(qū)開始真正變得活躍與多元化。圖 1-4 展示了 ShardingSphere 在 Apache 孵化器一年多的社區(qū)數(shù)據(jù)變化。
社區(qū)與貢獻者之間的依賴和互贏也在整個過程中體現(xiàn)的淋漓盡致。對于貢獻者來說,他們會在這個開源社區(qū)中與其他人交流、協(xié)作。而這個持續(xù)的過程,將帶來以下成果:
擴大人際交友圈
不斷學習與成長
提高自己的技術影響力
拓寬職業(yè)渠道
結合興趣,享受過程
對于社區(qū)來說,這個相互幫助和溝通的過程則會:
拓展項目的功能
收獲活躍多元化的生態(tài)圈
增加項目知名度
獲得社區(qū)的可持續(xù)發(fā)展
從這個角度來看,不斷探索 Apache way 不也是希望出現(xiàn)這樣一種共贏而互助的局面嗎?Please remember community over code。
從孵化器畢業(yè)
所有孵化器的項目最終都希望能走向 TLP(Top Level Project)。在 mentor 的指導、PPMC 的探索、committer 和 contributor 的支持與付出下,ShardingSphere 開始籌備 Apache 孵化器畢業(yè)。
依據(jù) Apache 的成熟度評估模型圖 1-5,在以下幾個方面評估社區(qū)和項目是否成熟。其實在 Apache 項目社區(qū)的初建階段,我們建議大家就在這幾個方面發(fā)力,因為這是官方給予的畢業(yè)標準及指導方針。以此為方向,探索屬于各自項目的獨特社區(qū)運作方式,也可謂是百花齊放。
經(jīng)歷 Release、社區(qū)建設、Apache member 的指導、meetup 舉辦等一系列事件,ShardingSphere 終于在社區(qū)發(fā)起了畢業(yè)討論,開始接受 Apache member 及所有 Apache 成員的指導和評估。雖然最終以 10 +1 binding votes,6 +1 non-binding votes 和 no -1 or +/-0 votes 通過畢業(yè)投票,但過程也是一波三折。
即便是經(jīng)過 1 年多的社區(qū)建設,項目基本成熟,但面對畢業(yè)還是有很多工作要合乎畢業(yè)規(guī)范。例如確認商標是否可使用、完成項目官網(wǎng)有關 Apache brand 和 trademark 的陳述、網(wǎng)站符合 Apache way 等。在這個投票期間,由于官網(wǎng)存在 fork me on github 的 slogan,而這一問題一直頻繁出現(xiàn)并且沒有結論,所以其他 Apache 成員借此單獨開辟了 thread 來討論這一問題,查看 Email List 了解詳情。雖說這一舉讓 ShardingSphere 被成功推到前臺,間接提高了項目的曝光,卻也能看出 Apache 對于第三方獨立、禁止參與商業(yè)行為的重視和嚴苛。
可喜可賀的是,2020 年 4 月 16 日,Apache ShardingSphere 最終通過基金會董事會決議,加入了 TLP 行業(yè)!
未來的路
回首這一路,收獲與付出兼存。這篇文章旨在用故事為大家?guī)砀鼮樯鷦?、全面的闡述和論據(jù)支撐,而在文章結尾,我們也特別想對開發(fā)者朋友說:
愿這篇文章能為你打開新的思路,它像一扇窗,為有心的人呈現(xiàn)另一種職業(yè)風景,帶來新的思潮。
希望文章有關”參與開源社區(qū)意義“的部分能為你解答有關開源價值的問題。
每一個 Apache 開源項目都有自己獨特的社區(qū)發(fā)展方向和價值觀。參與其中,選擇與你氣味相投的社區(qū),是一件很有價值且很有意思的事情。
有張有弛,有進有退;不妄自菲薄,也不目空一切;在開源的領域,更確切說在 Apache 開源社區(qū),更多的是遵守規(guī)范、開放包容、平等交流、互相學習。?
低頭工作,便全力以赴;耳聞窗外,便接收新潮,更新大腦。
從 Apache 孵化器畢業(yè)成為 TLP,對 ShardingSphere 來說,并不是一個結束,而是另一個開始。在產(chǎn)品功能上,ShardingSphere 將繼續(xù)在分布式數(shù)據(jù)庫中間件平臺上深耕,打磨出以“分布式”為核心的數(shù)據(jù)庫中間件生態(tài)圈,從而提供完整的解決方案,如圖 1-6 所示。從社區(qū)角度講,ShardingSphere 仍將繼續(xù)活躍社區(qū),鼓勵更多朋友成為社區(qū)的 committer 和 contributor。所以,我們歡迎大家關注 ShardingSphere,并加入到社區(qū)來,與更多知己結伴前行。未來之路不可預測,但立足當下,眺望未來,初心未改,即便亦步亦趨,也愿一葦以航!
Apache ShardingSphere Committer 列表
Mentor
Craig L Russell
馮嘉,阿里巴巴
姜寧,華為
PMC
張亮,京東數(shù)科
潘娟,京東數(shù)科
趙俊,京東數(shù)科
張永倫,京東數(shù)科
陳清陽,翼支付
曹昊,海南新軟
馬曉光
杜紅軍,領創(chuàng)智信
楊翊,京東數(shù)科
吳晟,tetrate.io
高洪濤,tetrate.io
Committer
李亞,九個小海豹
顏志一,DaoCloud
董宗磊,京東零售
孫海生,瓜子
王奇,京東零售
歐陽文,一卡易
蔣曉峰,阿里巴巴
王光遠
秦金衛(wèi),京東數(shù)科
岳令
趙亞楠
Apache ShardingSphere 官網(wǎng):
https://shardingsphere.apache.org/
GitHub 地址:
https://github.com/apache/shardingsphere
作者簡介:
潘娟,京東數(shù)科高級 DBA,Apache ShardingSphere PMC。
張亮,京東數(shù)科數(shù)據(jù)研發(fā)負責人,Apache ShardingSphere VP,Apache Dubbo PMC,人氣開源項目 Elastic-Job 作者。
開源社線上直播?“源”來如此?報名方式
掃描下方二維碼通過活動行報名填寫信息,添加小編微信號:chatbot-yuan,回復OS,進入“源”來如此粉絲群。相信你可以在這里和志同道合的伙伴們愉快交流!
8月9日14:00-16:00,我們不見不散!