談話中,魯直反問的“你為什麼不開源?”這句話讓我印象深刻。-- 老王
二月初春,在西子湖畔的細雨中,我拜訪了螞蟻金服中介軟體團隊,和 SOFA 技術負責人魯直做了一次深入交談,更妙的是,魯直也是負責 SOFA 開源事務推進的人,而這樣一個切實踐行開放核心模式的開源專案,也正是我非常感興趣的。
兩個技術人的談話,自然是樸實而直白的,話題主要圍繞著 SOFA 和開源主題展開,希望也能一樣引起同是技術人的你的共鳴。
人物介紹
受訪者:魯直,螞蟻金服 SOFA 開源負責人。
採訪者:老王,開源佈道人,有 20 年網際網路從業經歷的技術老兵。
雖然我和魯直在微信上已經聯絡很久了,但這還是第一次見面。交談中,我瞭解到魯直是 2009 年加入阿里巴巴工作,已經有十年了。剛開始是在 1688.COM 做業務系統,對中介軟體技術非常感興趣,也會經常研究各種中介軟體的實現和功能。後來在 2013年時,為了更深入地學習研究中介軟體框架,轉到了螞蟻金服中介軟體團隊,從那個時候開始就一直在做 SOFA。
目前魯直在 SOFA 的團隊主要負責的工作包括幾個部分。其中一個主要部分就是 SOFA 開源相關的工作。SOFA 的產品體系非常廣,包括已經對外開源的部分、內部整個微服務體系,以及 SOFA 框架等等——而這些開源相關的工作主要是由魯直負責推動的。
當然,作為技術負責人,魯直既要帶技術團隊也要做技術工作。談及這一點,魯直說:
“我覺得做技術管理,跟普通的管理不太一樣,因為技術管理最重要的一個點是除了管理之外,還要保持一定的技術判斷力和敏銳度。對一些新技術,包括團隊中遇到一些重大的技術問題,你都要有一些方向性的判斷。雖然最後不一定是你具體解決的,但是在整個團隊的技術攻堅和技術選型上,要一起確立方向。”
我以前也做過十餘年的技術管理,我很能夠感受這種情況,重大問題技術負責人更要迎難而上。
SOFA 5 落子 Service Mesh
就我瞭解的情況,現在 SOFA 已經發展到了 SOFA5 了。在 SOFA4 階段,主要的任務是將開源體系捋清楚了,然後開始按步驟地開源;到現在發展到了 SOFA5。我想知道從 SOFA4 發展到 SOFA5,是什麼讓螞蟻金服中介軟體團隊判斷 SOFA4 的階段性目標已經達成,可以邁進到新的 SOFA5 階段了呢?
“從整個業界趨勢上來講,SOFA4 的架構相對來說還是偏傳統一些,更多是對我們之前的技術框架的整理和梳理。在這個階段,SOFA 的程式碼經過了非常多的優化和重構,才達到了對外開源的要求,從而 SOFA 走上了開源核心的模式,逐步分階段的將各個部分進行了開源。”魯直講到,“但是,從我們對業界的整體判斷上來說,未來無疑是雲的時代,所以說要考慮怎麼讓所有的業務系統能夠提供雲的能力,比如說 Serverless。”
接著這個話題,魯直講了他對雲端計算的理解:“一方面雲端計算肯定要為整個業務的發展提供更加方便的基礎資源,可以不用去關心底層的基礎設施。Serverless 字面的意思就是說‘無伺服器’——我不用關心伺服器怎麼來的,不用關心基礎設施,只要關心業務程式碼就可以了。那反過來對於雲服務商來說,經過了這一層抽象,其資源利用率會更高,可以有更多的利潤空間,這是一個雙贏的局面。對於使用者來講,這種好處是實實在在的,可以更少關注基礎設施,只關心程式碼就可以了。”
“我們希望在 SOFA5 的方向上,在這個新的迭代中,去讓業務——包括讓未來我們開源出來各種功能、各樣服務模式——都更多地去關心自己的業務程式碼,而不用再過多地關心基礎設施。”魯直說。
在 SOFA5 中,一個重要的方向就是 Service Mesh 這個方向,這將是 SOFA5 中非常重要的特性。魯直強調了其對 Service Mesh 技術的看好:“我認為 Service Mesh 是邁向未來往前走的非常關鍵的一步,讓業務不用再關心基礎設施。通過 Service Mesh,我們可以將很多技術能力直接放到基礎設施裡面,而業務可以不用感知到這一層。原來可能需要花幾個小時或者更多的時間解決的基礎設施問題,現在可以通過 Service Mesh 解決掉。”
“目前我們我們已經在生產環境中應用了 Service Mesh。我們在這方面有非常大的決心,我們希望能夠在今年,在更大的範圍中去落地 Service Mesh。當前這個階段更聚焦在這種技術的內部落地上,希望用好了,再給社群做更多的貢獻。”
Service Mesh 這個詞最早是由開發 Linkerd 的 Buoyant 公司於 2016 年提出的,隨著 Linkerd 的傳入,Service Mesh 也進入國內技術社群的視野。Service Mesh 也被翻譯為“服務網格”。Linkerd 則是業界第一個 Service Mesh。
Service Mesh 是一個基礎設施層,用於處理服務間通訊,負責實現請求的可靠傳遞。在實踐中,服務網格通常實現為輕量級網路代理,通常與應用程式部署在一起,但是對應用程式透明。
Service Mesh 的部署模型,有兩種情況:
◈ 對於一個簡單請求,作為請求發起者的客戶端應用例項,會首先用簡單方式將請求傳送到本地的 Service Mesh 例項。這是兩個獨立程式,它們之間是遠端呼叫。Service Mesh 會完成完整的服務間呼叫流程,如服務發現負載均衡,最後將請求傳送給目標服務。這就是 Sidecar,它在原有的客戶端和服務端之間加多了一個代理。◈ 多個服務呼叫的情況,Service Mesh 出現在所有的服務的下面,這一層被稱之為服務間通訊專用基礎設施層。Service Mesh 會接管整個網路,把所有的請求在服務之間做轉發。在這種情況下,上面的服務不再負責傳遞請求的具體邏輯,只負責完成業務處理。服務間通訊的環節就從應用裡面剝離出來,呈現出一個抽象層。
如果有大量的服務,Sidecar 之間的連線就會形成一個網路,這個就是服務網格名字的由來。
“我們將以 Service Mesh 為跳板再往前走。”魯直表示,“Serverless 更多的還是應該聚焦在其字面本身,其含義就是‘無伺服器’,後面的技術都是為了讓無伺服器承載具體的業務。”
Serverless 這個概念雖然提出來已經有幾年了,目前 AWS 在 Serverless 和 FaaS 方面處於比較前沿的位置,但是在國內,Serverless、FaaS 這些技術的發展還是相對比較滯後。
魯直指出,“我覺得 Serverless 想要成功,還是要從覆蓋業務的整個廣度上開啟,否則可能還是停留在 FaaS 上,那場景就比較受限。”
Service Mesh 將是微服務的下一個時代,關於它還在持續進行理論研究和實踐探索。
魯直說:“坦白來講,我覺得 istio 的理念非常好,但是在整個工程設計上,如果放到螞蟻金服這樣體量較大的環境裡面,可能跑起來還需要做一些工作。我們希望今年 Service Mesh 在螞蟻金服有了更大規模落地之後,可以把我們在 Service Mesh 方面的一些實踐經驗用到產品環境的工程中去實踐,然後貢獻出去。目前更多的一些工作,是將整個體系上進一步完善,鋪到更多業務上,然後將這些經驗反哺到整個 Service Mesh 的設計上,讓它走的更遠。”
也就是說,螞蟻金服在 Service Mesh 上跟 istio 的技術路線是一致的,但是會從工程的角度更多地推動它的發展。
我們希望能夠在我們進行了生產驗證之後,再慎重地推送給開源社群。這也是螞蟻做開源貢獻的一貫理念。
魯直:“我們希望能夠在我們進行了生產驗證之後,再慎重地推送給開源社群。這也是螞蟻做開源貢獻的一貫理念——我們希望一個東西經過了內部一段時間的成熟之後,再去開源。經過了大規模的內部驗證之後,它的穩定性上有了一定的保障,就貢獻給外部社群使用,再去擴充更多一些使用場景,包括完善和解決一些之前沒有遇到一些問題。”
合力 Seata 分散式事務框架
2007 開始,螞蟻金服自主研發了分散式事務中介軟體 XTS,在內部廣泛應用並解決金融核心場景下的跨資料庫、跨服務資料一致性問題,最終以 DTX 的雲產品化展現並對外開放。而與此同時,阿里巴巴中介軟體團隊釋出 TXC,為集團內應用提供分散式事務服務,經過多年的技術沉澱,於 2016 年產品化改造為 GTS,通過阿里雲解決方案在眾多外部客戶中落地實施。
2019 年 1 月,基於技術積累,阿里巴巴中介軟體團隊發起了開源專案 Fescar,螞蟻金服也開源了自己的分散式事務框架,並與 Fescar 合併一起共建分散式事務解決方案。這個發展既在情理之中,也在意料之外,我確實好奇這期間發生了什麼,是如何和 SOFA 中介軟體團隊的發展結合的,他們下一步會有什麼計劃?
魯直說:“分散式事務是螞蟻金服在 2007 年做的創新,是基於 TCC 原理,我們在內部實現了這個模式。TCC 理論相對還是比較簡單的,但是它要落地,需要花費比較長的工程實現上的打磨才行。分散式事務這個技術在螞蟻金服已經走過了 12 年的時間了。在螞蟻金服最核心一些業務上,包括支付、交易、賬務等等系統都在使用這套分散式事務框架解決和孵化的。”
在分散式事務這一塊領域上,在業界來看目前相對來說比較空白,還沒有非常好的分散式事務框架。說起來合併的初衷,魯直表示,“既然阿里巴巴和螞蟻金服都在這個方向做了一些開源的工作,所以我們把這兩個部分的努力結合起來,取長補短,以適用於更多的分散式事務業務場景,螞蟻金服加入 Seata 社群共建,在 Seata 0.4.0 版本中加入了 TCC 模式,為大家提供一個更加寬泛的分散式事務的解決方案。”
具體來說,“阿里巴巴的 Seata 提供是 AT 模式,對業務來說,不用有太多感知,但是它覆蓋的場景有限,如果可以接受這樣的情況,用 AT 模式更好。而螞蟻金服因為有更強的金融方面的要求,就需要採用 TCC 模式,業務接入成本更高,但是它能做到非常好的分散式執行。未來還會提供像 XA 這樣的模式,去適應更寬泛業務場景,這在這一塊上,螞蟻金服和阿里巴巴會結合在一起提供一個融合的框架。”
Seata 為解決微服務架構下的分散式事務問題交出了一份與眾不同的答卷。而 Seata 的願景是讓分散式事務的使用像本地事務的使用一樣簡單和高效,希望可以讓 Seata 適用於所有的分散式事務場景。
如何做開源
作為開源核心模式的專案,我希望瞭解螞蟻金服中介軟體的開源一般會做哪些工作,是否有比較完善的流程和規則?
“首先,最基礎的肯定是程式碼,並提供對應的示例,然後我們會提供貢獻者指南這樣的指引文件,因為本質上我們希望打造成一個開源社群,社群的參與度對我們來說是非常重要的東西,有人會上來提 issue,也有人來解答,有人提功能需求,有人提 PR 等等”,魯直說。
Linux 中國曾經開發過一個用於測算開源專案活躍度的一個模型,我們認為從過去感性地看一個開源專案是不是活躍,已經開始逐漸進步到通過理性資料評估了,但是這需要排除一些資料作弊的情況,就像之前很多人會用專案的星標數來評估專案的活躍度,這當然很粗糙。我們今年還會繼續配合 2019 年度的開源年報,而提供資料支援,到時候我們肯定會給 SOFA 相關的專案做一個考察。希望可以切實地反映出來 SOFA 在開源方面的工作。
從之前的脈絡上看,到了 SOFA5,還會繼續沿襲開放核心的模式,即:核心部分開源,與本地業務強關聯,但是跟核心不是強關聯的部分不開源。
從螞蟻金服自身的實踐來看,他們已經切實地踐行了開源核心模式。
而對於開源核心模式,有人唱衰,也有人說好,各種觀點都有。但從螞蟻金服自身的實踐來看,他們已經切實地踐行了開源核心模式,這是我在國內第一個深入瞭解過的真實落地的開源核心模式專案。
說到開源模式,魯直表示:“做開源,我覺得首先肯定要做一個心理準備,就是說你要有一個核心部分,再在這個基礎上做擴充套件,在維護的成本上肯定有一定的上升,但是你要接受這樣的成本——我覺得這種成本是可以接受的。……專案本身要設計好,具備一定分拆的可能性。如果不具備分拆可能性,那沒法做了。像微核心這樣的設計方式就會比較適合——就是開源一個核心模組,然後再去擴充套件,各種模組是可插拔的。”
而對於開源工作是如何做的,魯直說:“我們沒有專門做開源的人,也沒有專門做內部程式碼的人,我們是把這兩部分放在一起,既做開源又做內部程式碼,因為這樣一個好處是,既熟悉外部的程式碼,又熟悉內部的程式碼,這個邊界自己可以把握比較好。我們更多是制定一些規則。比如說跟業務層強相關的部分,你開源出去也沒人用;如果說跟業務不相關的,你為什麼不開源?因為你開源的這個產品想要做得更好,這些能力開源出去其實沒有太大問題,所以一般我們的標準就是看是不是跟內部系統相關,是不是跟業務強相關,如果不相關就可以開源。”
談話中,魯直反問的“你為什麼不開源?”這句話讓我印象深刻。
談話中,魯直反問的“你為什麼不開源?”這句話讓我印象深刻,這其實代表了他們開源的初心,但是從商業者從公司的角度來說,開源有沒有給公司帶來真正的好處?這不僅僅是情懷的問題,我相信每一個熱愛開源的人,其實存在開源情懷或者是更理想化的想法,但是從另一方面來說,無論是從公司的機制上,還是公司的業績上,開源還是要有實實在在的收益,能夠推動公司業務發展才行。作為一個開源專案的負責人,他是怎麼感受到開源的好處呢?
對這個問題,顯然他有過成熟的思考:
“最直接的好處就是更長效。從眼前看,你的名聲出去了招聘是不是也容易找到更合適的人?這是最短期的收益。長期的好處,開源社群裡面大家分享了非常多的觀點,從實踐來看,也是這樣。比如說你在一家公司裡面去做的話,公司的業務場景是有限的,雖然說螞蟻金服覆蓋了各種各樣的業務,金融方面的基本上全覆蓋了。但是其他的行業不一定都有,他們遇到這個問題,我們可能並不會遇到,但這些問題可能是未來能夠遇到的,如果把一個專案以開源的方式運作,就意味著說,更大的用例場景更容易發現 bug,用的人越多,越有可能會觸發這個bug,那對於就是有了進一步完善的可能。
另外,有了這樣的一個社群化的發展,有更多人蔘與進來之後,這個專案可以更快往前發展,而不是隻有你自己在。在一家公司裡邊,團隊的人員數量肯定是有限的,而有這麼多人來參與,那對於這個專案的往前演進來說有非常大的好處,反過來對公司也會帶來更多好處——無論是潛在的還是直接的。
最後,如果你的產品有商業化的支援,比如說其他系統的支撐,也能夠更好提供商業化的支援。”
SOFA 開源以來,就我目前瞭解到的情況,大概已經有 30 家左右的企業使用者在使用這套開源框架——就是直接拿開源的部分去用了。當然這主要是國內的使用者,那麼在國外影響力沒有像國內這麼大的原因在哪兒呢?是因為我們的專案不夠國際化呢,還是知道這個框架的人不夠多呢?
魯直說:“我覺得可能是兩方面的原因。一方面,我們的確在國際化方面做的並不是很多,在今年我們會去嘗試做更多的國際化工作。另外一方面,更多的是文化方面的差異,大家的思維方式可能不太一樣。當然我們會嘗試走一下國際化的路線,因為開源本來就是不分國界的。”
進一步,SOFA 在社群治理這方面,“我們希望能夠採用和參考 Apache 基金會的方式,這是一個很完善的治理模式,我們會嘗試採用這樣的方式去社群治理。這對於國際化產品是有很多好處的,它更多強調的是一種治理模式,是不是以社群的方式在運作,是不是在尊重整個社群等等。”魯直表示,“我們會考慮跟 Apache 基金會、CNCF 進行直接接觸,如果合適的話,我們會捐獻專案給基金會。如果只是一家商業公司而沒有基金會的支援,大家也會有更多的顧慮。把專案捐獻給基金會,給大家更多的信心,通過基金會的託管,讓更多一些參與方參與,而不只是有螞蟻金服,大家也會有更大的信心參與進來。”
最後,魯直希望致語開源社群,“其實螞蟻金服開源的東西,也不只是 SOFA 中介軟體框架,未來會開源更多的東西,包括 AI 方面的一些技術,也希望整個社群能夠多關注螞蟻金服在開源上面未來的舉措。”
公眾號:金融級分散式架構(Antfin_SOFA)