Linux中國

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

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

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

余淮(左)和老王(右)在 KubeCon 2019

SOFA 與開源

2018 年,SOFAStack 開始開源之後,處於關注,我曾向螞蟻金服中間件負責人楊冰了解過為什麼要將 SOFA 開源的背後思考,以及 SOFA 發展迭代的歷程

目前,SOFA 的架構已經發展到 SOFA 5 階段,前任的 SOFA 開源負責人魯直也向我介紹過 SOFA 5 中重點推進的方向,主要包括 Service Mesh 和 Serverless,以及分散式事務 Seata 的落地等。而在今年上半年他們又開源了分散式事務框架 Seata 和服務註冊中心 SOFARegistry。

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

以 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 團隊在內部也構建了一套非常完善的集成框架,專門用來測試已有邏輯的兼容性及正確性。

基於開源核心這套思想建設 SOFAStack 以後,其實對開發人員的工作量來不會變少,反而可能是增多的。這是因為在寫代碼的同時,需要更多的考慮內部外部的使用情況,對代碼質量也提出了更高的要求,開發流程會變得更加複雜。

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

雖然開發人員工作變多了,但是這樣的話可以讓 SOFAStack 的核心代碼被更多的開發者評審,在更多的系統中運行,在更多的場景下進行驗證,對 SOFAStack 的品質保證有非常大的幫助。

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

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

所以對於 SOFAStack 來說,並不只有自己開源的產品,而更多關注的是,和整個社區里所有開源優秀的產品一起,打造一套快速構建金融級分散式架構的套件。

開源項目的管理

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

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

同時,螞蟻金服的工程師也普遍地擁抱開源,開源能夠幫助項目產生更多、更好的想法,同時也可以吸收來自社區的貢獻,讓項目本身能夠做的更好,這是大家所喜聞樂見的。

SOFA 的社區治理

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

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

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

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

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

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

在社區建設方面,除了在 Github 上、釘釘微信群的一些交流外,SOFAStack 社區還會有豐富的線上線下的活動。每周類似周報形式的 SOFA Weekly,幫助大家了解社區的最新資訊和項目進展;社區共建的 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 開源方面的經驗給廣大的開源社區和開源企業。

穿山甲專訪」欄目是 Linux 中國社區推出的面向開源界、互聯網技術圈的重要領軍人物的系列採訪,將為大家介紹中國開源領域中一些積極推動開源,諳熟開源思想的技術人,並辨析其思考、挖掘其動因,揭示其背後所發生的事情,為關注開源、有志於開源的企業和技術人標出一條路徑。

取名為「穿山甲」寓意有二:取穿山甲挖掘、深入之意來象徵技術進步和表徵技術領袖的作用;穿山甲是珍稀保護動物,宣傳公益。


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國