1. 程式人生 > 程式設計 >SOFAStack的前世今生

SOFAStack的前世今生

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

十二年時間,幾代螞蟻技術人蔘與攻堅,SOFA走出了一條跟傳統金融行業不同的分散式架構之路。這條路,既要基於不可靠的硬體系統實現金融級的效能和可靠性,又要應對支付寶這樣的超大規模網際網路金融應用,很不容易,但螞蟻技術團隊做到了。今天,就讓我們聊聊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的內容,歡迎掃描下方二維碼,關注釋出會直播。