引言
最近,我聽到了一個訊息,螞蟻金服將會開源 SOFA最核心的兩個元件——分散式事務框架和服務註冊中心。
熟悉中介軟體的朋友們都知道,這兩個元件都是針對當前最火的微服務架構。其中,分散式事物框架是解決資料一致性問題的關鍵。服務註冊中心則是服務治理的基礎。在這兩塊開源後,SOFA 將成為一套真正完備的分散式解決方案。
作為開源人士,我對此訊息深感興趣,因此聯絡到了螞蟻金服中介軟體團隊的楊冰總監,就此訊息向他求證。機緣湊巧之下,楊冰花費了寶貴的時間,和我深入講述了 SOFA 開源的思考,以及近期的規劃。
透過這次交談,也讓我看到了一個成功的商業公司是如何擁抱開源、並將開源作為其根本戰略來撬動技術紅利,支援其急速發展的業務需求的。
以下是正文,我將它分享出來以饗讀者。
如今,開源已經成為主流,可以說,整個資訊產業已經從過去的閉源樣式轉換為現今的開源樣式。各種開源公司紛紛創新不同的開源樣式,其中以 RedHat、Google、Facebook 等公司所取得的成績最為耀眼。
2018 年的時候,我曾經參與“開源社”主持的《2018 中國開源年度報告》的撰寫工作,並建立了一個數學分析模型,以此來對中國的網際網路公司的開源專案分析其活躍度和健康度。讓我既感意外,也不意外的是,阿裡系的開源專案佔據了活躍度排行榜前五的第一、第二和第四;甚至在前五十個專案中,阿裡系的開源專案佔據了超過一半的份額!我不意外的是,業界一直對阿裡在開源方面的動作和力度頗有感受;意外的是,這種力度還是超乎了我的想象。這其中包括阿裡巴巴集團和螞蟻金服等都貢獻了相當可觀的開源專案。
因此,這次遇到楊冰時,我就開源方面和他深入聊了幾句,想瞭解一下螞蟻金服是如何思考開源和踐行開源的,是如何將開源與公司的商業價值有機地結合起來的。
緣何開源
作為一家商業公司,宣稱自己開源,甚至也形式上開源一些程式碼,其實已經是很常見的事情了。但是,真正能將開源與公司的技術演進相融合,並能有效地助推公司業務發展的,卻並不太多。這件事其實並沒有那麼簡單——遠非只是上傳到 GitHub 那麼簡單。
根據業界的經驗,在公司的技術產品開源方面,要將現有場景的程式碼開源,至少需要在已經執行穩定、結構清晰的現有程式碼基礎上多付出 30% 的技術投入,對程式碼進行梳理、完善和通用化,才能做到初步的程式碼開源;而進一步要將這些開原始碼維護下去,乃至於和公司業務線上的產品程式碼保持同步發展,多付出的技術成本還遠遠不止這些。作為一個網際網路技術老兵,我對此深以為然。
那麼,螞蟻金服是如何說服公司決策層在尚未看到開源回報的前景下,同意付出這麼多的額外代價來支援開源的呢?推動開源的力量是因何而來的?
“首先,開源是個共贏的樣式,對於螞蟻金服來說,開源可以擴大技術服務場景,為支付、金融等更多的客戶提供服務,提升合作伙伴的效率。”楊冰說,“雖然,螞蟻金服已經有很多的業務場景,也在很多場景下取得了超大規模的實踐經驗,但是,依然存在沒有改寫到的金融服務場景。而將技術開源出來,可以供更多的客戶應用到其自身的場景下——這些場景有效的補充了螞蟻金服的技術應用面,也為更完善的技術框架奠定了基礎。因此,我們選擇將 SOFA 中介軟體框架逐步開源出來,在貢獻給社群的同時,也期待社群、合作伙伴甚至客戶,都能夠一起參與共建,形成行業標準和最佳實踐。”
“其次,對金融服務來說,監管和自主可控的要求更多,”楊冰接著談到,“客戶也希望可以對其所採用的技術有更多的掌控。”開源是一種可以使客戶和上下游產業共同參與和發展的可行樣式。
“所以,其實並不是技術部門去說服公司決策層去開源,而是業務發展的自然選擇,這也是一種合理的發展方向。”他總結道。這樣的結果,其實是和當前流行的開源商業樣式所暗合的。
“另外,如你所說,確實在開源時,我們做了很大的改造。以可擴充套件化的方式來層層構建 SOFA 框架的能力,保證 SOFA 的內部版本和開源的版本採用的是同一個核心。在開源時,剝離了特定業務的邏輯,而保持了公司內部的業務線上的程式碼和開原始碼的核心是一致的。這樣,只要公司的業務在持續發展,開源的程式碼就會一直維護和演進下去。所以 SOFA 的內部版本就是在開源版本之上擴充套件了內部邏輯和歷史版本的相容邏輯。開源版本的核心邏輯,內外是一致的,併在螞蟻金服的生產環境中被廣泛使用,同時會隨著螞蟻金服自身業務訴求的驅動不斷的演進。”楊冰補充道,“但這是值得的,在為開原始碼做改進時,也是為公司自己的業務做改進,這是雙贏且可持續發展的。”
很多公司在初涉開源時,常常有疑慮,將核心技術開放出去,會不會導致競爭對手的技術提升,會不會造成更大的技術競爭壓力?
“事實上,我們在最初準備開源時,也有討論過這個方面。技術要被更多人用、更多場景用,才會有發展。而開放的技術才能帶來團隊的發展,因為技術是動態發展的,作為開源的一方,事實上在技術上是相對領先的。開源和掌握是兩碼事,掌握和用好又是兩碼事,所以,因開源而帶來的競爭,其實是助推整個開源體系的發展的,是良性的、有益的。”楊冰說,“而從社群和行業現狀看,大家都在開放,封閉的技術體系會逐漸落後。只有開放才能求同存異,共同發展。”
花絮
我問螞蟻金服的朋友,在你們開源中有什麼有趣的“段子”嗎?可以講來聽聽。
我朋友過了幾天后,給我發來了這樣一段文字:
“參與雙十一的中介軟體團隊的常態是什麼呢?
當晚,團隊的常態大概就是喝著茶等零點高峰,高峰期過了之後,當然就是參與買買買啦。
我們很多的一些事情的初始的想法都是來自於雙十一當天的夜聊,似乎在經歷了緊張的零點高峰之後,腦細胞特別活躍。
對於基礎設施團隊來說,雙十一算是一次大考的結束,考完成績出來了,我們就想琢磨一些有挑戰的事情,於是我們會天馬行空地聊一聊對於下一年在技術上需要去做的事情。而在 2017 年的雙十一當天,SOFA 的幾個同學就圍在一起聊了 SOFA 能不能開源?為什麼要開源?開源和商業化之間的關係?開源後要做哪些事情等等,這個算是 SOFA 開源的第一次內部討論。
從這次內部討論之後,經過了大約半年的準備時間,我們在 2018 年 4 月份正式宣佈開源並一直在逐步開源的行程中。”
他說,這就是他們憋了半天想出來的“段子”,哈哈哈,這群可愛的技術人啊。
SOFA 的演進和開源之路
SOFA 中介軟體框架是螞蟻金服自主研發的金融級分散式中介軟體,包含了構建金融級雲原生架構所需的各個元件,是一套分散式架構的完整的解決方案,也是在金融場景裡錘煉出來的最佳實踐。
SOFA開源全景圖,涵蓋了微服務領域的各個方面,同時也積極和業界流行的開源元件結合,包括阿裡巴巴集團開源的Nacos、Sentinel等,為使用者提供更加廣泛地選擇。
SOFA 作為一個演進了幾年的框架,也一定程度上代表了螞蟻金服的技術體系的演變,並且現在形成了開源核心、開放式(元件式)開源的樣式。SOFA 從 2018 年開始開源,但是我比較好奇 SOFA 開源之前的發展旅程是怎樣的。
楊冰說,“最早的時候,在螞蟻金服還沒有從淘寶分拆出來時,公司內使用過一個名為 Webx 的框架,但是隨著業務的發展和技術的演講,這套框架已經不太適應淘寶的需求。那個時候胡喜(現螞蟻金服副 CTO)就重新建立了一個新的框架——SOFA 中介軟體框架。”
SOFA 中介軟體在螞蟻內部經歷了十年的發展和五代架構的演進,被廣泛應用在包括支付、借貸、信用、基金、保險等全金融場景,支撐著螞蟻平穩度過歷次雙十一、雙十二、新春紅包等大考,創造了 25.6 萬筆每秒的交易記錄,並還在不斷掃清這個記錄。
“SOFA 的版本迭代和公司的架構發展是密切相關的。比如說我們從 SOFA1 剛剛開始的時候,會做模組化的事情。到了 SOFA2 開始引入整個微服務的體系。到 SOFA3 我們希望能夠在微服務體系下,能夠把一些服務聚合在一起,組成一個鏈路出來,這就是我們說的合併部署。”
“隨著每年的交易量的不斷上升,讓我們必須從單體架構轉到服務化架構,然後演進到單元化架構、彈性架構。SOFA 大部分的功能升級都是伴隨著整個公司的技術架構標的上的更大挑戰進行的。”楊冰說,“我個人是經歷了 SOFA1 到 SOFA2 開發過程,從 SOFA1 整體完成落地,到 SOFA2 引入了服務的架構。到了 SOFA3 我們把 Tomcat JBoss 那層替換掉,變成自研的應用伺服器,解決了我們內部系統做類隔離、模組隔離以及合併部署的問題。”
SOFA4:邁入開源
正如前面所談到的,開源既有的程式碼是需要做許多繁重的工作的,所以, SOFA 直到發展到第四代才為開源做好了準備,並將開源作為 SOFA4 的核心標的。
“SOFA 發展了這麼多年,是有非常重的歷史包袱的,這也是我們為開源準備了非常長時間的原因。在從 SOFA3 到 SOFA4 的整個過程當中,在把整個 SOFA 做輕量化的過程當中,其實就是在為開源做準備。有一些公用的能力(和螞蟻金服的整個架構或業務沒有強相關的部分)我們都希望可以開源出來。我們做開源這件事情不會把我們程式碼分為完全兩套東西,然後兩個分別演進,我們覺得這不是開源的正確做法。”楊冰說,“另外,開源對我們整個團隊的消耗是非常大的,我們希望用同一套程式碼來實現內部的相容和外部的開源,我們會在開源的程式碼當中留一些比較好的擴充套件點,這也是對我們本身程式碼架構可擴充套件性的挑戰,目前我們做到的程度就是這樣的。”
SOFA 從 2018 年 4 月開始對外開源,得益於社群和開發者的認同,在經歷了半年多的時間,SOFA 所有相關的開原始碼,獲得了累計 10000+ 的 Star和 80 多個程式碼貢獻者。
線上上社群方面,SOFA 開源的站點(https://www.sofastack.tech/)也是在不斷沉澱相關的文章和檔案。
楊冰說,“原先我們覺得開源就是最好的,然而在 SOFA 演進的過程中,我們發現我們的場景足以構建出來比開源軟體複雜度更高、能力更強的體系。我自己也在參與這個的過程當中收穫了很多。這件事情也是從一個側面反映了螞蟻金服技術演進的歷程。我們從最早的 IOE 架構,到部分採用開源軟體,再到逐步開始全套自研。在自研過程當中,擁抱部分開源軟體,並且去做深度的創造,做一些自己的創新。整個過程其實是一條非常艱難的路。”
楊冰說,“我認為整個基礎設施是應該走開源化道路的,因為從 Linux 到 Kubernetes,已經被一次又一次地證明。越底層的基礎程式碼,包括 SOFA 中介軟體這樣的東西,看起來邏輯沒有業務系統那麼複雜,然而其實它考慮的一些細節、設計的優雅性、架構的健壯性其實是非常強的。而且,它一旦要去支撐那麼多業務系統,整個工程的複雜度也是非常高的,很難用一家公司的程式員去搞定整個技術棧。SOFA 也是一樣的,我們越來越發現這方面的一些趨勢。我們靠一己之力去做是很難的,再加上我們既要對內支撐又要對外支援。現在明白了這樣一個趨勢,因此我覺得應該回饋社群,和社群共建才是比較好的一條路。以 Linux 為代表的瘋狂發展,以及伴隨著而來的商業化生態的繁榮,是一次又一次向世界證明,開源和商業化的結合是可以非常完美的。”
SOFA5:擁抱 Service Mesh
從多年前的 SOA 架構,到現在的容器化、微服務的技術演變,我們可以看到雖然技術在逐步變化,但是其主體指導思想還是一脈相承的。螞蟻金服在微服務方面已經走到了探索的前沿,那麼,當前的 Service Mesh 技術在 SOFA 的發展過程中會起到什麼作用?
“這兩年我們在積極擁抱、佈局 Mesh,在演進方向上,我個人比較關註 Mesh 這個方向,因為我個人認為這是把基礎設施沉澱到我們整個技術平臺當中非常關鍵的一環。這也是我們 SOFA5 的主要標的。”楊冰說,“隨著容器技術的興起,可以將以往的中介軟體元件拆分的更細、更靈動,而資源利用率和運維效率也得到了進一步的改善。”
近年來,隨著 Kubernetes 確立了其在容器領域的統治地位,以及Serverless 樣式等不可變基礎設施的架構進一步成熟,可以將服務在上層進一步進行抽象,為現在大規模的容器化、微服務化奠定了堅實的基礎。
也有一些業界的意見認為,Service Mesh 將會取代中介軟體。
楊冰認為,“螞蟻金服已經在中介軟體方面探索的比較深遠,規模也相當的大,為拿到業務紅利做了很多最佳化,這些能力還是會存在,只是透過換了一種跟應用整合的方式,讓 SDK 變得更輕。隨著基礎技術平臺逐步走向雲化,我們認為 ServiceMesh 將會是連線現在這個時代和雲原生時代的橋梁,而且無論中介軟體還是很多基礎技術元件都將走向 Serverless。Serverless 對開發者而言將是一種全新程式設計模型,對運維人員而言則是顛覆性的運維樣式,甚至是一種 Opsless,我相信廣義的 Serverless 樣式會成為雲原生時代的主角。”
Service Mesh 這個新興領域是很大的一個熱點。螞蟻金服和社群一起共同發起了http://www.servicemesher.com/這樣一個針對中國的Service Mesh 領域開發者的社群,有很多的志願者,螞蟻金服是其中之一。
在螞蟻金服的Service Mesh領域,涉及兩個開源專案SOFAMesh和SOFAMosn。這兩個專案的定位是這樣:
-
SOFAMesh 專案:是螞蟻金服 Service Mesh 的控制平面,分支自 Istio 專案。在Istio體系和框架內進行了功能補充、擴充套件、增強和改進,立足於探索並解決 Istio 生產落地,尤其是大規模落地中遇到的實際問題,在充分驗證之後貢獻回 Istio 上游。
-
SOFAMosn 專案:螞蟻金服新型的基礎設施和中介軟體的底層網路通用解決方案,可以有多種產品形態。在螞蟻金服 Service Mesh 中承擔資料平面的角色,和 SOFAMesh 專案配合使用,相容 Istio 體系。此外 SOFAMosn 還將用於 Ingress / API Gateway / Serverless Function Gateway 等場景。
目前螞蟻金服開發團隊已經和 Istio 開發團隊建立聯絡,在 Istio 大規模落地方面進行合作和探索,相關實踐和創新會在生產驗證/程式碼穩定之後會貢獻出來。
Service Mesh 是一個非常新的技術,Istio 也是一個新興的專案,在生產落地上存在很多需要瞭解的細節和可能遇到的各種問題。而且有些需求是有共性的,如 RPC 協議的支援,舊有非微服務應用的支援, 現有應用升級 Istio 的平滑遷移等。
“我們開源 SOFAMesh 和 SOFAMosn,一方面是希望可以將我們在 Service Mesh 和 Istio 落地的知識和經驗分享出去看,另一方面希望透過開源共建的方式一起來將這個兩個專案做的更完善。”楊冰說,“我們雖然現在開源出來的版本還不多,但是未來我們會把整個金融分散式雲原生架構的領域補齊,一方面會把內部同領域產品更完整的開放出來,另一方面和每一個領域的社群實現都做到相容和可互相整合。”
NEXT:分散式事務以及服務註冊中心開源
螞蟻在 2007 年就開始在核心的業務中去使用自研的分散式事務框架去解決服務化以及資料庫拆分後的資料一致性問題,經過 10 多年的演進,SOFA 的分散式事務框架得到了螞蟻內部業務廣泛地使用與鍛煉,包括螞蟻金服最核心的交易、支付、賬務系統等,在期間,SOFA 分散式事務框架也演化出了針對不用的業務場景的使用樣式,兼顧研發效率與效能。而阿裡巴巴前幾個月也開源了其分散式事務框架 Fescar,螞蟻金服和阿裡巴巴將在分散式事務這個領域上強強聯手,SOFA 的分散式事務框架將與 Fescar 合併,為業界提供更加優秀,更加全面的開源分散式事務解決方案。
服務註冊中心是微服務領域的重要組成部分,SOFA 的服務註冊中心最早源自於淘寶的初版 ConfigServer,在支付寶/螞蟻金服的業務發展驅動下,近十年間已經演進至第五代,具備無限水平擴充套件,高效的推送以及基於 AP 架構高可用能力,同時結合 SOFARPC 具備異地多活單元化架構支撐能力,SOFA 服務註冊中心的開源將會極大豐富整個 SOFA 開源的生態體系,也為微服務領域帶來一個全新的服務發現解決方案。
總結
縱觀螞蟻金服的 SOFA 中介軟體開源的歷程,我們看到了一個大型的商業公司是如何將開源核心樣式和其商業樣式緊密結合的;其走過的從採用專有軟體、應用部分開源軟體、演化自身的自研軟體,到開源核心軟體、全面擁抱開源世界的路徑值得很多技術企業學習和思考。
大家可以點選“閱讀原文”進入 SOFA 的網站瞭解更多。
“穿山甲專訪”欄目是 Linux 中國社群推出的面向開源界、網際網路技術圈的重要領軍人物的系列採訪,將為大家介紹中國開源領域中一些積極推動開源,諳熟開源思想的技術人,並辨析其思考、挖掘其動因,揭示其背後所發生的事情,為關註開源、有志於開源的企業和技術人標出一條路徑。
取名為“穿山甲”寓意有二:取穿山甲挖掘、深入之意來象徵技術進步和表徵技術領袖的作用;穿山甲是珍稀保護動物,宣傳公益。