十二年前,為了解決支付寶第一代架構在迅猛發展的業務面前捉襟見肘的困境,螞蟻金服技術團隊開啟了一次前所未有的嘗試。創新都是被逼出來的,今天高速發展的SOFAStack同樣如此。

SOFA緣起
2006年,支付寶面臨的最大問題是業務變得越發複雜,工程師數量也越來越多,原來的單體系統逐漸無法裝載更多更複雜的業務邏輯,也不能讓大量工程師一起并行工作。當時的支付寶希望,系統可以做到成百上千個項目并行進行,并且每個工程師可以不受幹擾地工作,當業務邏輯增加的時候,系統的複雜度不至于指數級上升。技術團隊要做對未來的技術架構做一個選擇。
支付寶團隊做了一個決定,要走一條過去沒有人走過的路,啟動了支付寶技術系統的服務化之路,也是支付寶第二代架構的由來。2007年開始,支付寶啟動了對交易系統、商戶系統、會員系統、支付清算系統的改造。
當時擔任支付寶首席架構師的程立,給要做的這套分布式架構起了一個“SOFA”的名字,其背後有兩個含義:一是按照當時的技術趨勢,要做面向服務的架構,即Service Oriented Architecture,但加入了金融業務,是以是Service Oriented Fabric Architecture;二是希望能夠像沙發一樣,讓工程師可以非常爽地工作。
第一代的SOFA其實就解決兩個問題:一是當要把系統變成分布式的時候,怎麼有一個像“膠水”一樣的連接配接器機制,可以把分布式系統連接配接成一個整體;二是希望每一個服務本身是元件化的,是以當時第一代SOFA裡采用了OSGi(一套Java子產品化規範,允許應用程式使用精煉、可重用和可協作的元件建構),這樣每個工程師可以專注于各自的元件,最後又能夠把這些元件拼裝在一起成為“服務”,再把“服務”拼裝在一起成為整個大系統。這一整套架構,就是第一代SOFA架構。
2008年1月,SOFA項目上線,成為螞蟻金服延用12年之久并持續打磨至今且對外開源的一套技術架構。
SOFA技術演進
SOFA的版本疊代跟螞蟻金服的架構發展是密切相關的,作為一個演進了十多年的架構,它也一定程度上代表了螞蟻金服的技術體系演變。
從第一代到眼下的第五代,SOFA的演進過程其實是支付寶從最早的大型業務與IT交織在一起的單體系統,一邊拆金融業務系統(即後來的業務中台)、一邊拆底層IT系統(即後來的資料中台、計算中台)的過程,在拆分的過程中還要解決新出現的可擴充性、一緻性問題等各種問題,同時不斷應付每年都能擊穿系統極限的雙十一,還要把資料從原有系統一點一點“倒騰”到新系統裡、同時管理新增的海量資料。
螞蟻金服金融産品技術部總經理楊冰透露,“SOFA中間件在螞蟻内部經曆了十年的發展和五代架構的演進,被廣泛應用在包括支付、借貸、信用、基金、保險等全金融場景,支撐着螞蟻平穩度過曆次雙十一、雙十二、新春紅包等大考,創造了25.6萬筆每秒的交易紀錄,并還在不斷重新整理這個紀錄。”
早期的SOFA在項目推進的過程中既有研發平台又有研發上層的業務系統,相當于把很多風險都導在一個項目裡面一起做,SOFA第一代項目就是靠團隊齊心協力,每天都會遇到新問題、每天都要去解決各種問題,但大家背後有必勝信念而且非常擁抱變化,敢于在項目的中後期把前期架構決定全部推翻掉,再用一套新的架構替代
楊冰提到,随着每年的交易量的不斷上升,逼着技術團隊必須從單體架構轉到服務化架構,然後演進到單元化架構、彈性架構。SOFA 大部分的功能更新都是伴随着整個公司的技術架構目标上的更大挑戰進行的。
楊冰完整經曆了SOFA1到SOFA2的開發過程,從SOFA1整體完成落地,到SOFA2引入了服務的架構。到了SOFA3螞蟻團隊把Tomcat JBoss層替換為自研的應用伺服器,解決了内部系統做類隔離、子產品隔離以及合并部署的問題。
而現在,SOFA已經逐漸從解決分布式服務和分布式交易的問題,變成一個真正解決金融級系統建構的基礎架構問題。這也是SOFA改名的原因,從原來的Service Oriented Fabric Architecture改為Scalable Open Financial Architecture:
- Scalable代表着這個架構可以真正解決金融級系統的異地多活的容災和擴充問題,而且SOFA的可擴充能力不僅是處理更多的交易,還可容納更多的業務,能夠讓幾千位工程師甚至未來上萬個工程師一起協同工作;
- Open的意思是希望這個架構可以讓業務應用非常容易使用,又能與經典架構系統有機融合,SOFA架構未來不但可以編排螞蟻金服工程師自己寫的業務邏輯,而且可以編排合作夥伴的業務邏輯,成為一個完整的編排架構;
- Financial則意味着SOFA必須是具備金融級屬性,能真正實作金融級的一緻性、可用性和穩定性。
走向開源
開發者看開源,看到的可能是情懷。商業公司看開源,看到的可能是共赢。
對于螞蟻金服來說,開源可以擴大技術服務場景,為支付、金融等更多的客戶提供服務,提升合作夥伴的效率。雖然,螞蟻金服已經有很多的業務場景,也在很多場景下取得了超大規模的實踐經驗,但是,依然存在沒有覆寫到的金融服務場景。
是以,選擇将技術開源出來,可以供更多的客戶應用到其自身的場景下,這些場景有效地補充了螞蟻金服的技術應用面,也為更完善的技術架構奠定了基礎。是以,螞蟻選擇将SOFA中間件架構逐漸開源,在貢獻給社群的同時,也期望社群、合作夥伴、客戶一起參與共建,形成行業标準和最佳實踐。
對金融服務而言,監管和自主可控的要求更多,開源是一種可以使客戶和上下遊産業共同參與和發展的可行模式。SOFA走向開源并不是技術部門去說服公司決策層開源,而是業務發展的自然選擇,也是一種合理的發展方向。
開源并不是簡單地将代碼上傳到GitHub上,前期面臨很多繁重的工作,也正因如此,SOFA直到發展到第四代才做好了開源的準備。
楊冰表示,從 SOFA3 到 SOFA4 的發展過程當中,輕量化的動作其實就是在為開源做準備,一些公用能力都希望能開源出來。螞蟻技術團隊開源SOFA不會把它的代碼分為完全兩套東西,然後兩個分别演進,這不是開源的正确做法。除此以外,開源對整個團隊的消耗非常大,螞蟻也希望用同一套代碼來實作内部的相容和外部的開源,在開源的代碼中留一些比較好的擴充點,這對SOFA本身代碼架構的可擴充性也是一大挑戰。
“但這是值得的,在為開源代碼做改進時,也是為公司自己的業務做改進,這是雙赢且可持續發展的。”楊冰補充道。
擁抱Service Mesh
Service Mesh是近兩年來比較火的技術概念,進入SOFA 5時代,SOFA也全面擁抱了金融級雲原生,其中Service Mesh已經在内部大規模落地,并接受雙十一實戰檢驗。
螞蟻金服在中間件方面的探索比較深遠,規模也相當大。在楊冰看來,随着基礎技術平台逐漸走向雲化,ServiceMesh将會是連接配接現在這個時代和雲原生時代的橋梁,也是把基礎設施沉澱到螞蟻金服整個技術平台當中非常關鍵的一環。随着容器技術的興起,可以将以往的中間件組建拆分得更細、更靈動,并且資源使用率和運維效率也将得到進一步的改善。
螞蟻金融級雲原生架構已在内部大規模落地,Service Mesh是金融級雲原生的重要基礎設施之一。在2019年雙十一大促中,Service Mesh架構已經100%覆寫螞蟻金服核心支付鍊路,幾十萬容器,峰值千萬QPS,平均RT 0.2ms,是業界最大的 Service Mesh 叢集,成為金融級雲原生基礎設施。通過Service Mesh架構的資源分時複用技術,大規模統一資源排程,在同時支撐天貓雙11和經濟體使用者增長兩個大促的同時,實作了零IT成本增加。SOFAStack 雙模微服務平台也在近日正式釋出,提供了既支援 SOFA 架構又支援 Service Mesh 架構的微服務管理和治理能力。
SOFAStack,走向未來
回顧SOFAStack十多年來走過的那些艱辛困苦、高光時刻,背後默默耕耘的既有螞蟻金服技術團隊最初的架構師們、CTO們,也有一代代的基層工程師們。今天的SOFAStack,已經站在了技術的最前沿,用最先進的技術解決金融行業最艱難的問題,但故事,還在繼續。
未來的SOFA将持續擁抱開源,與社群、合作夥伴、客戶一起共建,并将經過内部實踐的開源改進回饋給開源社群。目前SOFA已經在網商銀行、中國人保健康、南京銀行等金融機構中落地,未來也将持續輸出給外部合作夥伴。SOFA已于9月份上線阿裡雲,通過全面整合金融科技與服務能力,持續為金融行業提供技術底座支撐。
未來,SOFA還繼續探索和實踐金融級雲原生,擁抱ServiceMesh、Serverless,以開源共建的方式促進雲原生技術的落地與疊代,并将螞蟻的技術經驗賦能給金融業界,真正讓SOFA這一金融級分布式架構,能夠幫助到萬千的金融領域技術從業者們。
11月19日 ,我們将在北京舉辦“螞蟻金服雙11背後的技術:巅峰洞見·聚焦金融新技術”釋出會。想要了解更多SOFAStack的内容,歡迎掃描下方二維碼,關注釋出會直播。