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