大公司開源怎麼作?SOFAStack給出了一個很好的例子

螞蟻金服的 SOFAStack 做爲一個成功地將企業私有項目轉化爲開源核心模式的知名案例,咱們以前對背後的思考和推進力作過專題分析,可是具體這件事是如何在螞蟻金服內部發生的、是如何實操的,有不少讀者向咱們表示很是感興趣,而我以爲這也是其它技術公司所正在探索和思考的方向。安全

所以,上個月底,老王在參加上海舉辦的 KubeCon 2019 時,遇到了螞蟻金服 SOFA 團隊的餘淮,他目前在螞蟻金服中間件團隊服務與框架組具體負責開發框架與 SOFAStack 的開源工做。因而,參會之餘,我和餘淮就 SOFA 開源的實操方面進行了深刻的溝通,現將談話所得整理給你們。微信

SOFA與開源

繼去年開始開源 SOFAStack 以來,今年上半年他們又開源了分佈式事務框架 Seata 和服務註冊中心 SOFARegistry,以前我曾經向螞蟻金服中間件負責人楊冰了解過爲何要將SOFA 開源的背後思考,以及 SOFA 發展迭代的歷程,詳情能夠看以前的文章《螞蟻金服技術總監楊冰:金融科技公司爲何要擁抱開源? 》進行了解。架構

目前,SOFA 的架構已經發展到 SOFA 5 階段,在今年 2 月,前任 SOFA 開源負責人魯直還向我分享了 SOFA 5 中重點推動的方向,主要包括 Service Mesh 和 Serverless,以及分佈式事務 Seata 的落地,具體內容見文章《螞蟻金服SOFA開源負責人魯直:不僅是中間件 ,將來會開源更多》。框架

做爲一個成功的開源核心模式的項目,我很是關注 SOFA 開源的實操是如何進行的,是如何進行開源治理的,做爲 SOFA 團隊的老朋友,咱們話題就直接從 SOFA 的開源治理聊起。less

以SOFA爲例:公司內部軟件的開源流程

餘淮說,從 2015 年開始,螞蟻金服開啓了金融科技對外輸出的戰略,SOFAStack 也走出了螞蟻金服,甚至跨越了國界,被更多金融機構與合做夥伴所使用,如天弘基金、信美互信、南京銀行、PayTM、DANA 錢包等。分佈式

在與合做夥伴以及客戶的溝通、合做過程當中,他們發現了 SOFAStack 的理念和能力也正是不少金融行業的企業所須要的。在螞蟻金融科技對外輸出的過程當中,內部已經對SOFAStack 進行了必定程度的代碼重構,例如歷史兼容邏輯的剝離等,可是並未能達到直接開源的標準。工具

關於開源,內部一直有開源的討論,到 2017 年雙十一結束後正式決定開源。通過了一系列的準備,2018 年 4 月,完成了對 SOFA項目的知足了開源改造的標準後,SOFAStack 立刻宣佈正式開源框架中部分重要組件。單元測試

SOFA團隊採用的開源策略叫「Open Core」,顧名思義就是要將接口層以及核心實現都開源,以可擴展化的方式來層層構建 SOFAStack 的能力,保證 SOFAStack 的內部版本和開源的版本採用的是同一個內核。爲此SOFAStack 作了大量的改造和重構工做。學習

在開源的具體考量上,餘淮表示,SOFAStack的開源改造基本上有三條原則,分別是高可擴展性、對內兼容歷史版本、對外兼容業界標準。區塊鏈

以 SOFARPC 重構爲例,大概經歷了這樣的過程:

1.首先須要將 SOFARPC 進行了一次核心接口和模型抽象,而後增長了擴展點機制和事件總線機制,全部的對內對外實現都基於這些核心接口和模型去擴展,而且保證這些擴展能力都是平等的、可選的;

2.接着將核心的處理邏輯實現遷移到這套接口和模型上來,保證 RPC 能力完整可用;

3.而後須要將 RPC 裏一些對接內部系統的、兼容歷史邏輯的代碼作成內部擴展,並進行全量測試驗證,確保和已有線上的歷史方案的兼容,發佈上線;

4.最後會調研業界的一些開源標準方案和實現,並對其進行兼容,例如 SOFARPC 不只對接本身的 SOFARegistry 的實現,還兼容了 Zookeeper、Etcd、Nacos等業界優秀的註冊中心方案。

雖然上面重構過程聽上去沒那麼複雜,可是在實際過程當中仍是很是考驗團隊的技術能力的,特別是在抽象核心接口和模型的時候,爲了作到既兼容內部又兼容外部,這須要進行大量的調研工做,才能作好這層較爲通用抽象。其次在對內邏輯兼容的時候,因爲內部的歷史負擔仍是比較重的,爲了能讓重構的代碼安全上線,團隊也作了不少事情。

仍是舉 SOFARPC 的例子,螞蟻內部的服務路由過程比開源是要複雜不少的,特別是配合螞蟻特有的單元化部署以及異地多活的能力,有時候須要多層路由才能找到目標地址。爲了驗證重構後邏輯的正確性,除了在開源代碼裏有單元測試用例外,SOFA團隊在內部也構建了一套很是完善的集成框架,專門用來測試已有邏輯的兼容性及正確性。

基於 Open Core 這套思想建設 SOFAStack 之後,其實對開發同窗的工做量來不會變少,反而多是增多的。這是由於在寫代碼的同時,須要更多的考慮內部外部的使用狀況,對代碼質量也提出了更高的要求,開發流程會變得更加複雜。

例如,內部新增一個特性,在之前可能直接修改代碼通過測試就發佈上線了,但如今的話會去思考這其中哪些能力是通用的,把這些能力抽象一下放到開源版本里去,而後開源版測試後發佈,這個時候內部版本在基於這個開源版進行擴展,再通過測試後發佈上線。

雖然開發同窗工做變多了,可是這樣的話可讓SOFAStack 的核心代碼被更多的開發者 Review,在更多的系統中運行,在更多的場景下進行驗證,對 SOFAStack 的品質保證有很是大的幫助。

此外在開源進度上,餘淮表示, SOFAStack並不追求開源所有內部的組件,而是會根據產品的特性和開源準備的狀況有選擇的開源。

例如 SOFAStack 下的分庫分表組件,由於產品特性和 OB 等內部結合緊密就暫時不會開源。金融級分佈式架構下未開源部分能力,SOFAStack會和與業界其它優秀的開源項目作集成,保證整個金融級分佈式架構功能的完整性和多樣性

因此對於 SOFAStack 來講,並不僅有本身開源的產品,而更多關注的是,和整個社區裏全部開源優秀的產品一塊兒,打造一套快速構建金融級分佈式架構的套件。

開源項目管理

開源一個項目,做爲背後推進的公司事實上要付出至關多的人力和資金成本,同時,也不可避免的會涉及到審批流程。隨着螞蟻金服愈來愈多領域的項目開源,包括SOFAStack,AI,區塊鏈等,螞蟻金服內部出臺了相應的嚴格的審覈機制,包括技術、合規、法務、安全等部門進行審覈,同時還會考察項目開源對公司的意義,以及是否對社區有價值,在審覈經過以後項目就會正式開源與你們見面了。

螞蟻金服對於開源文化是十分友好的,其內部的代碼也大多都是公開在內網的 GitLab 倉庫,常常會有業務團隊對 SOFAStack 提交一些合併請求(拉取請求)來幫助項目的發展。

同時,螞蟻金服的工程師也廣泛地擁抱開源,開源可以幫助項目產生更多、更好的想法,同時也能夠吸取來自社區的貢獻,讓項目自己可以作的更好,這是你們所喜聞樂見的。

SOFA的社區治理

開源項目並非開放源代碼就是終點,事實上,這只是開始,以後持續不斷的開源治理纔是開源之路。而如何將一個開源項目從最開始的由開源項目背後的公司主導轉變爲社區性項目,這是一個值得思考和探索的課題。

基於目前的開源模式和社區建設力度,SOFA 團隊也在儘量去吸引外部的貢獻者。不過 SOFAStack 項目因爲大量應用在螞蟻金服及很多企業線上環境,因此目前對於開發者技術能力以及代碼質量要求相對較高,所以,這項任務還須要較多的工做。

目前 SOFA 社區已經涌現了很多積極的開發者和貢獻者,解決了社區提出的一些重要需求。這其中一些功能組件的完成,貢獻者提供了至關重要的代碼基礎,而 SOFA 社區成員也積極參與到功能的完善和規範化工做中,甚至有的拉取請求要通過十幾個來回才能被合併入功能分支。

餘淮同時也談到,下一步會引入更友好的流程和工具,讓更多的開發者可以更容易地加入到 SOFAStack 社區的開發和貢獻當中,爲 SOFAStack 的共同發展作出包括貢獻代碼、文檔完善和推廣宣傳等各個方面的貢獻。

在社區團隊方面,SOFAStack 也設計了諸如貢獻者(Contributor)、提交者(Committer)、委員會成員(PMC)等多個層面的貢獻者認證機制,以讓各個層級熱情、精力不一樣的人可以加入到項目的貢獻中。

SOFAStack開源至今社區已經有120 多位 Contributor 共建社區,也有十來位外部 Committer經過其貢獻的代碼得到社區的承認,並進一步取得對社區發展的影響力。談及這一點,餘淮表示,爲了保證代碼質量,來自社區的代碼貢獻每每須要SOFAStack社區已有成員和貢獻者許屢次的往復修改和完善才能進入到代碼主幹,可是經過這些互動,才能真正遴選出來社區的中堅分子,也進一步將項目融入到社區中。

在社區建設方面,除了在Github 上、釘釘微信羣的一些交流外,SOFAStack 社區還會有豐富的線上線下的活動。每週相似週報形式的 SOFAWeekly,幫助你們瞭解社區的最新資訊和項目進展;社區共建的SOFALab 源碼解析實驗室,和社區同窗一塊兒學習和解析源碼,整理成冊,幫助你們更好的學習項目;每個月若干次的 SOFAChannel 直播,能夠在線和講師進行溝通交流。與此同時,SOFAStack也會按期在全國各地舉行線下的 SOFAMeetup 活動,你們一塊兒面對面交流,目前已經在全國五個城市舉辦了 7 場,共有一千多人到現場;也會舉辦 Workshop 和 CodeLab 等實踐類的活動,像本次的 KubeCon 就有一場 Workshop,手把手帶着你們一塊兒實踐 SOFAStack。

在社區合做方面,社區裏有不少優秀的開發者和開源項目,SOFA團隊也常常和社區互相學習、分享、交流技術,目前SOFAStack 已經和不少開源社羣創建了良好的關係,包括國內 ServiceMesher,K8S 中國,ShardingSephere,SkyWalking,Ant Design,EggJS 等,也包括國外的 light4j 等。

此外,餘淮還談到,SOFAStack 在今年還會結合實際業務方面和開源社區作更多的能力整合提高,他舉例說到 SOFAStack 今年會和作 Spring Cloud 更深刻的集成和加強,例如 Spring Cloud 仍是文件級別的配置更新,配合 SOFAStack能夠作到更細粒度的配置更新等。

總結

要說我對哪一個國內開源項目作的研究最深刻,那非SOFAStack 莫屬。自從 SOFAStack 開源以來,我前後和楊冰、魯直從 SOFA 開源的思想、戰略層面進行過深刻溝通,而此次,我但願能夠從戰術上,從實操層面分享他們在 SOFA 開源方面的經驗給廣大的開源社區和開源企業。

相關文章
相關標籤/搜索