談話中,魯直反問的“你為什麼不開源?”這句話讓我印象深刻。-- 老王
二月初春,在西子湖畔的細雨中,我拜訪了螞蟻金服中間件團隊,和 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 中國曾經開發過一個用于
測算開源項目活躍度的一個模型[1],我們認為從過去感性地看一個開源項目是不是活躍,已經開始逐漸進步到通過理性資料評估了,但是這需要排除一些資料作弊的情況,就像之前很多人會用項目的星标數來評估項目的活躍度,這當然很粗糙。我們今年還會繼續配合 2019 年度的開源年報,而提供資料支援,到時候我們肯定會給 SOFA 相關的項目做一個考察。希望可以切實地反映出來 SOFA 在開源方面的工作。
從之前的脈絡上看,到了 SOFA5,還會繼續沿襲開放核心的模式,即:核心部分開源,與本地業務強關聯,但是跟核心不是強關聯的部分不開源。
從螞蟻金服自身的實踐來看,他們已經切實地踐行了開源核心模式。
而對于開源核心模式,有人唱衰,也有人說好,各種觀點都有。但從螞蟻金服自身的實踐來看,他們已經切實地踐行了開源核心模式,這是我在國内第一個深入了解過的真實落地的開源核心模式項目。
說到開源模式,魯直表示:“做開源,我覺得首先肯定要做一個心理準備,就是說你要有一個核心部分,再在這個基礎上做擴充,在維護的成本上肯定有一定的上升,但是你要接受這樣的成本——我覺得這種成本是可以接受的。……項目本身要設計好,具備一定分拆的可能性。如果不具備分拆可能性,那沒法做了。像微核心這樣的設計方式就會比較适合——就是開源一個核心子產品,然後再去擴充,各種子產品是可插拔的。”
而對于開源工作是如何做的,魯直說:“我們沒有專門做開源的人,也沒有專門做内部代碼的人,我們是把這兩部分放在一起,既做開源又做内部代碼,因為這樣一個好處是,既熟悉外部的代碼,又熟悉内部的代碼,這個邊界自己可以把握比較好。我們更多是制定一些規則。比如說跟業務層強相關的部分,你開源出去也沒人用;如果說跟業務不相關的,你為什麼不開源?因為你開源的這個産品想要做得更好,這些能力開源出去其實沒有太大問題,是以一般我們的标準就是看是不是跟内部系統相關,是不是跟業務強相關,如果不相關就可以開源。”
談話中,魯直反問的“你為什麼不開源?”這句話讓我印象深刻。
談話中,魯直反問的“你為什麼不開源?”這句話讓我印象深刻,這其實代表了他們開源的初心,但是從商業者從公司的角度來說,開源有沒有給公司帶來真正的好處?這不僅僅是情懷的問題,我相信每一個熱愛開源的人,其實存在開源情懷或者是更理想化的想法,但是從另一方面來說,無論是從公司的機制上,還是公司的業績上,開源還是要有實實在在的收益,能夠推動公司業務發展才行。作為一個開源項目的負責人,他是怎麼感受到開源的好處呢?
對這個問題,顯然他有過成熟的思考:
“最直接的好處就是更長效。從眼前看,你的名聲出去了招聘是不是也容易找到更合适的人?這是最短期的收益。長期的好處,開源社群裡面大家分享了非常多的觀點,從實踐來看,也是這樣。比如說你在一家公司裡面去做的話,公司的業務場景是有限的,雖然說螞蟻金服覆寫了各種各樣的業務,金融方面的基本上全覆寫了。但是其他的行業不一定都有,他們遇到這個問題,我們可能并不會遇到,但這些問題可能是未來能夠遇到的,如果把一個項目以開源的方式運作,就意味着說,更大的用例場景更容易發現 bug,用的人越多,越有可能會觸發這個bug,那對于就是有了進一步完善的可能。
另外,有了這樣的一個社群化的發展,有更多人參與進來之後,這個項目可以更快往前發展,而不是隻有你自己在。在一家公司裡邊,團隊的人員數量肯定是有限的,而有這麼多人來參與,那對于這個項目的往前演進來說有非常大的好處,反過來對公司也會帶來更多好處——無論是潛在的還是直接的。
最後,如果你的産品有商業化的支援,比如說其他系統的支撐,也能夠更好提供商業化的支援。”
SOFA 開源以來,就我目前了解到的情況,大概已經有 30 家左右的企業使用者在使用這套開源架構——就是直接拿開源的部分去用了。當然這主要是國内的使用者,那麼在國外影響力沒有像國内這麼大的原因在哪兒呢?是因為我們的項目不夠國際化呢,還是知道這個架構的人不夠多呢?
魯直說:“我覺得可能是兩方面的原因。一方面,我們的确在國際化方面做的并不是很多,在今年我們會去嘗試做更多的國際化工作。另外一方面,更多的是文化方面的差異,大家的思維方式可能不太一樣。當然我們會嘗試走一下國際化的路線,因為開源本來就是不分國界的。”
進一步,SOFA 在社群治理這方面,“我們希望能夠采用和參考 Apache 基金會的方式,這是一個很完善的治理模式,我們會嘗試采用這樣的方式去社群治理。這對于國際化産品是有很多好處的,它更多強調的是一種治理模式,是不是以社群的方式在運作,是不是在尊重整個社群等等。”魯直表示,“我們會考慮跟 Apache 基金會、CNCF 進行直接接觸,如果合适的話,我們會捐獻項目給基金會。如果隻是一家商業公司而沒有基金會的支援,大家也會有更多的顧慮。把項目捐獻給基金會,給大家更多的信心,通過基金會的托管,讓更多一些參與方參與,而不隻是有螞蟻金服,大家也會有更大的信心參與進來。”
最後,魯直希望緻語開源社群,“其實螞蟻金服開源的東西,也不隻是 SOFA 中間件架構,未來會開源更多的東西,包括 AI 方面的一些技術,也希望整個社群能夠多關注螞蟻金服在開源上面未來的舉措。”