Apache畢業賀禮—Apache ShardingSphere跌宕起伏的開源之路

ShardingSphere發表於2020-04-24

作者介紹

潘娟,京東數科高階DBA,Apache ShardingSphere PMC

張亮,京東數科資料研發負責人,Apache ShardingSphere VP,Apache Dubbo PMC,人氣開源專案Elastic-Job作者

前序

從Sharding-JDBC到Apache ShardingSphere;
從輕量級的分庫分表中介軟體到完整閉環的分散式資料庫中介軟體平臺;
從2016年1月的第一行程式碼到現今的300K+行程式碼;
從寥寥無幾的關注到GitHub 10K+的star;
從無人問津的社群到100+位貢獻者;
從公司內部的應用類庫到100+的採用公司列表;
從尋找mentor到順利成為Apache頂級專案。
……

Apache ShardingSphere團隊核心初創人員將講述這其中的跌宕起伏,並以時間軸為線索為你呈現它開源之路背後的故事。

專案介紹

Apache ShardingSphere是一套開源的分散式資料庫中介軟體解決方案組成的生態圈,它由3款相互獨立,卻又能夠混合部署配合使用的產品組成。它們均提供標準化的資料分片、分散式事務和資料庫治理功能,可適用於如Java同構、異構語言、雲原生等各種多樣化的應用場景,核心功能如1-1所示。

image.png
1-1 ShardingSphere核心功能架構圖

Apache ShardingSphere由三個子專案組成,形成一個完整的資料庫解決方案,合稱 J.P.S. 生態系統。

ShardingSphere-JDBC:定位為輕量級Java框架,在Java的JDBC層提供額外服務。 它使用客戶端直連資料庫,以jar包形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動,完全相容JDBC和各種ORM框架。

ShardingSphere-Proxy:定位為透明化的資料庫代理端,提供封裝了資料庫二進位制協議的服務端版本,用於完成對異構語言的支援。 目前提供MySQL/PostgreSQL版本,它可以使用任何相容MySQL/PostgreSQL協議的訪問客戶端運算元據,對DBA更加友好。

ShardingSphere-Sidecar(TODO):定位為Kubernetes的雲原生資料庫代理,以Sidecar的形式代理所有對資料庫的訪問。 通過無中心、零侵入的方案提供與資料庫互動的的齧合層,即Database Mesh,又可稱資料網格。

Apache ShardingSphere的亮點主要包括:

  1. 完整的分散式資料庫解決方案:提供資料分片、分散式事務、資料彈性遷移、資料庫和資料治理等核心能力。
  2. 獨立的SQL解析引擎:支援多SQL方言的完全獨立化SQL解析引擎,能夠脫離ShardingSphere獨立使用。
  3. 可插拔微核心:所有的SQL方言、資料庫協議和功能都能夠通過SPI的可插拔方式載入或解除安裝,微核心甚至在未來可以執行於無任何功能的空白環境中。

為Apache做準備

找尋mentor是進入Apache基金的最初且最重要的一步。在瞭解了Apache基金會的運作方式後,我們便踏上了找尋mentor之旅。參加各種與開源相關的分享會或meetup,藉此來認識Apache的member。但是,事情卻並不順利。多次的嘗試,多次的接觸換來的只是口頭的認可。這段時間我們確實倍感壓力和焦慮,甚至打算以後再說,一切隨緣。

後來一個契機,我們認識了吳晟和華為的姜寧。吳晟是Apache SkyWalking專案的VP,在開源領域有豐富的經驗。他和ShardingSphere的前身Sharding-JDBC很有淵源,Sharding-JDBC專案原型也有他參與設計,因此,他最終作為ShardingSphere的PPMC一同建設社群。在參與ShardingSphere社群建設的這一年多的時間裡,他又陸續擔任了多個Apache孵化專案的Mentor,並在今年被選舉為Apache Member;而姜寧同樣是一位熱心又有經驗的老手,是國內最資深的Apache Member之一,在與他交流的過程中,終於讓我們看到一些希望,他也最終成為了我們的mentor。再後來,團隊VP張亮又前去上海參加HDC大會,認識了我們的另一位mentor—Craig L Russell,Craig當時是Apache的祕書長,所有的SGA、ICLA等法務檔案均由他負責簽署。在ShardingSphere孵化的過程中,Craig當選了Apache軟體基金會的主席。他友善而和氣,給予了我們很多有關社群規範的實用建議,也願意助我們一臂之力;第三位mentor則是由Apache RocketMQ的核心成員馮嘉擔任;最後由Roman Shaposhnik擔任專案的Champion,為專案尋找導師之旅畫上完美句號。

至今還記得我們當時的欣喜和激動。之前的無助、徘徊、失落在這一瞬間柳暗花明。每個進入Apache基金會的專案,一定都有自己的故事。尤其對於中國的專案來說,語言與地域的障礙讓我們雪上加霜。好在有越來越多的來自於中國的專案進入了Apache基金會,也能看到越來越多的華人活躍在Apache的郵件列表裡,還有ALC Beijing的建立讓參與門檻不斷降低,這對想要參與的國內朋友來說,確實是個good news!

進入Apache孵化器

為了正式進入Apache孵化器,專案程式碼、社群、文件等都需要進行一系列的規範和整理。這確實是個瑣碎但很重要的事情。

程式碼層面,合規操作是首要原則。我們梳理第三方依賴的許可協議, 確保滿足Apache軟體許可協議(ASL)合規的要求;社群方面,我們開始由中文轉變成英文;文件方面則需要我們準備英文文件,並準備相關的proposal。由於專案最開始的目標就是進入Apache基金會,所以在專案初期,依賴就儘可能地簡單,社群相對規範,文件在不斷翻譯。不打無準備之仗,這些提前的準備讓這部分工作進展順利,而專案獲得Apache域名的那一刻,大家才真切感受到所有付出得到了最有價值的回報。

除了學習寫規範程式碼,團隊成員也開始學習Apache的規範、運作方式、英文溝通渠道等細節。我們開始瞭解到如何關注社群,什麼是consensus decision,如何用非同步方式進行郵件溝通。特別是郵件列表的學習非常重要,你可以在其中找到歷史問題記錄、合規的解決方案、優秀的案例等。

Apache way的探索

很多人認為只要程式碼開放,就叫做開源。但其實,這僅僅只是開源旅程的第一步。如何構建一個活躍的社群,如何理解Apache way,是一個更為重要的話題。ShardingSphere在進入Apache孵化器初期並未能完全理解Apache way,並且由於過度注重程式碼風格,以至於參與門檻較高、社群活躍度平平。起初,我們並不知道問題出在哪裡,迷茫了很長一段時間,直到在跟Apache的member不斷交流的過程中才漸漸意識到問題所在,因此社群發起了有關committer bar的討論,見圖1-2。這是社群建設之路的轉折點,因為從此community over code的理念開始逐漸滲入人心,並指導我們的行動。

image.png
1-2 Committer bar討論郵件

仔細閱讀Apache way的關注點:Earned Authority, Community of Peers, Open Communications, Consensus Decision Making, Responsible Oversight。你會發現它一直在強調合規、開放、平等、協作,為的就是建立合規且活躍的專案社群,儘可能地做到讓更多的人蔘與,平等溝通,推動專案發展,促進個人成長。

秉持這個理念,ShardingSphere開始在多維度進行調整,

  • 程式碼:規整程式碼結構,劃分模組功能,提供專案可插拔能力,從而允許使用者區域性參與某一模組的同時,儘量不破壞整體程式碼結構。
  • 心態:開放的心態,編制社群任務,鼓勵社群朋友參與,相關PPMC或Committer積極提供指導和幫助。
  • 規範:梳理文件和程式碼規範,並提供詳細的訂閱、參與指南,大範圍促進使用者自主進行社群貢獻。
  • 交流:鼓勵社群儘可能使用郵件和Issue進行討論從而公開討論內容,同時針對較為細節的討論則放在微信群裡進行。此外,官方公眾號還會介紹社群的進展、Release、刊登技術文章等。
  • 合作:與其他Apache社群建立聯絡、增加溝通,從合作交流中進行學習和發展。

在孵化期間,Apache ShardingSphere先後與Apache SkyWalking、Apache ServiceComb進行專案的合作與整合,不僅彼此的產品功能更加完善,還增加了社群成員之間的交流。此外,還與Apache DolphinScheduler(Incubating)和Apache IoTDB(Incubating)舉辦了co-meetup,詳見圖1-3。還與Apach pulsar和Apache APISIX(Incubating)的核心成員們進行了多次交流和探討。

image.png
1-3 co-meetup

經過時間的積累,社群已有了質的變化。從社群的郵件討論、GitHub的資料展示中,你會發現ShardingSphere的社群開始真正變得活躍與多元化。圖1-4展示了ShardingSphere在Apache孵化器一年多的社群資料變化。

image.png
1-4 社群資料變化

社群與貢獻者之間的依賴和互贏也在整個過程中體現的淋漓盡致。對於貢獻者來說,他們會在這個開源社群中與其他人交流、協作。而這個持續的過程,將帶來以下成果,

  • 擴大人際交友圈
  • 不斷學習與成長
  • 提高自己的技術影響力
  • 拓寬職業渠道
  • 結合興趣,享受過程

而對於社群來說,這個相互幫助和溝通的過程則會,

  • 擴充專案的功能
  • 收穫活躍多元化的生態圈
  • 增加專案知名度
  • 獲得社群的可持續發展

從這個角度來看,不斷探索Apache way不也是希望出現這樣一種共贏而互助的局面嗎?Please remember community over code。

從孵化器畢業

所有孵化器的專案最終都希望能走向TLP(Top Level Project)。在mentor的指導、PPMC的探索、committer和contributor的支援與付出下,ShardingSphere開始籌備Apache孵化器畢業。依據Apache的成熟度評估模型圖1-5,在以下幾個方面評估社群和專案是否成熟。其實在Apache專案社群的初建階段,我們建議大家就在這幾個方面發力,因為這是官方給予的畢業標準及指導方針。以此為方向,探索屬於各自專案的獨特社群運作方式,也可謂是百花齊放。

image.png
1-5 Apache專案成熟度評估模型

經歷Release、社群建設、Apache member的指導、meetup舉辦等一系列事件,ShardingSphere終於在社群發起了畢業討論,開始接受Apache member及所有Apache成員的指導和評估。雖然最終以10 +1 binding votes,6 +1 non-binding votes和 no -1 or +/-0 votes通過畢業投票,但過程也是一波三折。

即便是經過1年多的社群建設,專案基本成熟,但面對畢業還是有很多工作要合乎畢業規範。例如確認商標是否可使用、完成專案官網有關Apache brand和trademark的陳述、網站符合Apache way等。在這個投票期間,由於官網存在fork me on github的slogan,而這一問題一直頻繁出現並且沒有結論,所以其他Apache成員藉此單獨開闢了thread來討論這一問題,檢視Email List瞭解詳情。雖說這一舉讓ShardingSphere被成功推到前臺,間接提高了專案的曝光,卻也能看出Apache對於第三方獨立、禁止參與商業行為的重視和嚴苛。可喜可賀的是,2020年4月16日,Apache ShardingSphere最終通過基金會董事會決議,加入了TLP行業!

未來的路

從Apache孵化器畢業成為TLP,對ShardingSphere來說,並不是一個結束,而是另一個開始。在產品功能上,ShardingSphere將繼續在分散式資料庫中介軟體平臺上深耕,打磨出以“分散式”為核心的資料庫中介軟體生態圈,從而提供完整的解決方案,如圖1-6所示。從社群角度講,ShardingSphere仍將繼續活躍社群,鼓勵更多朋友成為社群的committer和contributor。所以,我們歡迎大家關注ShardingSphere,並加入到社群來,與更多知己結伴前行。

image.png
1-6 Apache ShardingSphere生態圈

未來之路不可預測,但立足當下,眺望未來,初心未改,即便亦步亦趨,也願一葦以航!

Apache ShardingSphere committer列表

Mentor

Craig L Russell
馮嘉,阿里巴巴
姜寧,華為

PMC

張亮,京東數科
潘娟,京東數科
趙俊,京東數科
張永倫,京東數科
陳清陽,翼支付
曹昊,海南新軟
馬曉光
杜紅軍,領創智信
楊翊,京東數科
吳晟,tetrate.io
高洪濤,tetrate.io

Committer

李亞,九個小海豹
顏志一,DaoCloud
董宗磊,京東零售
孫海生,瓜子
王奇,京東零售
歐陽文,一卡易
蔣曉峰,阿里巴巴
王光遠
秦金衛,京東數科
嶽令
趙亞楠

官網:https://shardingsphere.apache.org/

相關文章