1. 程式人生 > >螞蟻金服十年自研分布式中間件,成就世界級新金融科技平臺

螞蟻金服十年自研分布式中間件,成就世界級新金融科技平臺

承諾 images 金字塔 題解 形象 付出 7月 區分 統架構

技術分享圖片
中間件,是與操作系統和數據庫並列的傳統基礎軟件三駕馬車之一,也是難度極高的軟件工程。傳統中間件的概念,誕生於上一個“分布式”計算的年代,也就是小規模局域網中的服務器/客戶端計算模式,在操作系統之上、應用軟件之下的“中間層”軟件。早期中間件的出現,是為了解決日益復雜的PC服務器、網絡甚至不同地理位置機房之間等異構硬件環境中,支撐應用軟件的挑戰。與操作系統和數據庫不同,中間件並沒有一個明確的定義,通常來說包括消息、數據、遠程過程調用、對象請求代理、事務、構件等幾個部分。

隨著互聯網的快速發展,特別是雲計算在近十年的蓬勃進展,企業的IT環境發生了深刻的變化:從過去基於局域網和城域網、單一城市地理範圍的分布式計算環境(傳統企業),向基於互聯網和光纖網絡、全國甚至全球地理範圍的超大規模分布式計算環境演進(互聯網企業)。在這個過程中,軟件也向大規模互聯網服務和雲服務演化,無論是操作系統還是數據庫都發生了深刻的變化,中間件也在這個過程不斷演進和擴大自己的邊界。

中間件的發展代表著技術架構的升級和變遷,而這與企業組織模型和業務實踐息息相關。理論上,中間件向下屏蔽異構的硬件、軟件、網絡等計算資源,向上提供應用開發、運行、維護等全生命周期的統一計算環境與管理,屬於承上啟上的中間連接層,對企業來說著重要的價值。根據康威定律,軟件和系統架構設計,和企業的組織結構、業務流程和溝通方式息息相關,因此,隨著企業業務規模的超大規模和快速叠代發展,中間件質量和能力的高低就直接決定了企業技術架構的命運。特別是隨著數字商業的興起,過去不能被業務感知、不能為最終用戶帶來直接價值的中間件,也成為了數字業務的一部分。

螞蟻金服是一家旨在為世界帶來平等金融服務的科技企業,作為原生的數字企業和數字商業代表,螞蟻金服從2004年成立支付寶開始,在過去十多年的時間裏走出了一條自研的、面向超大規模互聯網金融應用的、金融級中間件技術體系。特別是自2008年雙十一以來,在每年雙十一超大規模流量的沖擊上,螞蟻金服不斷突破現有技術的極限,在金融領域達到了前所未有的技術成就,特別是歷時十年自研的中間件技術可以滿足2017年雙十一25.6萬筆/秒的支付峰值、全天14.8億筆的支付,而2010年雙十一的支付峰值為2萬筆/分鐘、全天1280萬筆支付。在過去幾年內,螞蟻金服自研的中間件技術所支持的支付峰值翻了750倍、全天支付筆數翻了115倍、交易更覆蓋全球225個國家和地區。

極限業務場景催生了極限的IT體系。螞蟻金服的金融核心技術部負責人趙尊奎(花名:妙才)說,他經常接待外部的金融機構負責人來參觀和了解螞蟻金服的IT體系,“看過的都表示不敢想象”。今天,螞蟻金服的軟件工程成就,已經把雙十一極限挑戰變成了新常態,而這套支撐螞蟻分布式實踐的架構體系,稱之為SOFA(Scalable Open Financial Architecture,簡稱 SOFA)。
技術分享圖片
SOFA最近在不斷加大開放和開源的步伐。2018年6月,筆者走進螞蟻金服的技術團隊,與螞蟻金服CTO程立(花名:魯肅)、副CTO及首席技術架構師胡喜(花名:阿璽)、中間件團隊負責人楊冰(花名:楊延昭)、技術風險團隊負責人陳亮(花名:俊義)、金融核心團隊負責人趙尊奎(花名:妙才)等進行了深入訪談,了解了螞蟻金服技術架構並不廣為人知的十年研發故事。

面向全人類的金融科技平等

螞蟻金服的中間件架構及基礎體系SOFA經過了十多年的漫長發展,是一個極其復雜的過程、經過了無數次的拆分與合並、結合以支付寶為代表的互聯網金融業務需求與要求、多次超越了人與機器極限的龐大軟件工程。在講述SOFA的故事之前,有必要理解螞蟻金服CTO程立(魯肅)、副CTO及首席技術架構師胡喜(阿璽)在2017年總結及展望的面向全人類的未來數字金融願景。

為什麽說是面向全人類的數字金融新世界呢?截止至2018年3月31日,螞蟻金服旗下的支付寶和其合作方旗下的全球活躍用戶數已達到8.7億;隨著支付寶收錢碼的普及,遍布中國大街小巷的商戶逐步實現了收銀環節的數字化;與此同時,越來越多的人在支付寶的城市服務中辦理過包括社保、交通、民政等12大類的100多種服務,超過30個城市的公交、地鐵先後支持支付寶……

而根據艾瑞咨詢的數據,2017年中國的網上支付交易規模達2075.1萬億元,2018年第一季度支付寶與財付通兩大巨頭占據中國第三方移動支付交易規模市場份額的90.6%。而截止到2017年6月,已經有25個國家接入了支付寶,全球200多個國家用戶可使用支付寶。除了支付寶,互聯網支付、移動支付以及基於各種互聯網金融技術的金融業務已經遍地開花,傳統銀行等金融機構都在積極推進互聯網金融業務和數字金融體系,而阿裏等電子商務的全球化發展也把新金融和金融科技進一步推向全球。人工智能、區塊鏈、物聯網等新技術正在成為金融科技的基礎,一個屬於全人類的未來金融正在形成中。

螞蟻金服CTO程立認為,科技金融或現代金融最核心的變革就是數字化的變革,最核心的科技進步也是數字科技。所謂的科技金融,背後其實就是數字金融。而數字金融能夠帶來最大的改變,就是更加包容、更加可持續、更加綠色的金融,服務於實體經濟。隨著數字技術的發展,將會給全人類帶來數字社會、數字經濟和數字金融三位一體的演進。
技術分享圖片
(上圖為螞蟻金服CTO 程立)

在程立看來,螞蟻金服不是為了做技術本身而做技術,而希望用技術來解決社會當下和未來的問題。如果說用金字塔結構來描繪數字金融的社會價值,在塔頂的就是數字金融能在全球範圍內帶來更多平等的機會。

那麽這個“平等”到底怎麽理解?還要回看馬雲對整個阿裏巴巴集團的願景:辦102年的企業,讓天下沒有難做的生意。在阿裏巴巴集團18周年年會上,馬雲說:“我們希望為全世界解決1億的就業機會,我們希望能夠服務20億的消費者,我們更希望能夠為1000萬家中小企業創造盈利的平臺。”而具體到未來5到10年,“我們不是要超越誰,也不是要當世界前三,而是要為未來解決問題,要為中小企業、為年輕人、為我們當年‘讓天下沒有難做的生意’這個承諾去付諸於行動。”

作為大阿裏系的核心成員,螞蟻金服對更多平等的機會理解就是,讓全世界的年輕人能夠平等地獲得金融服務,支持其發展;讓全球消費者能夠平等地獲得金融服務,更便利的生活;讓全球的中小企業能夠平等地獲得金融服務,享受與大企業一樣的商業機會。

怎麽實現更多平等的機會?

這就需要“包容(Inclusive)”和“可持續(Sustainable)”。

“比如說去喜馬拉雅山的珠峰大本營,通了電以後,大家把二維碼貼上去,為什麽呢?因為之前沒有通電、沒有二維碼,大本營的小商戶都是現金交易,導致這些小商戶必須每過一段時間就要去最近的銀行兌錢或各種繳費,一趟就要半天的時間。有了電和支付寶以後,所有事情都可以數字化解決了。無論在上海、杭州還是高海拔的珠峰大本營,都可以獲得一樣的金融服務,這是一個平等的過程,所以包容、可持續發展的綠色數字金融是我們的核心技術理念。”胡喜補充說。
技術分享圖片
(上圖為螞蟻金服副總裁、副CTO 胡喜)

程立認為:要想建立一個包容、可持續發展的綠色數字金融,有三個很核心能力要建設——連接、風險和信用。

首先是連接。金融服務過去要能夠觸達到消費者和商家,成本和運營都很重,比如銀行要開很多的線下網點,有了數字技術之後就可以用很輕的方式觸達到上億的人,所以整個連接觸達方式,無論從廣度和深度上都發生了變化。銀行的線下網點覆蓋會越來越少,跑網點的商家與消費者也會越來越少,甚至未來IoT時代可以隨時隨地觸達。因此連接是一個非常重要的能力,不光是跟消費者連接、跟商家連接,也包括跟合作夥伴的連接,因為金融服務從生產到消費有很長、很多的產業鏈,連接能力能夠讓整個鏈條的協同更加高效、更低成本、更少摩擦,所以“連接”是未來數字金融的核心能力。

其次是風險控制。螞蟻金服要讓更多的人享受到平等的金融服務,如果想讓用戶的體驗簡單、高效、體驗好,背後的風險必然就提高了;如何在風險提高的同時,又能讓支付過程中用戶體驗更加順暢,更加少打擾用戶,核心背後還是技術能力的提升。

最後,最核心能力就是信用。如果未來真的建立一個全社會的人與人、機構與機構、人與機構之間新型的信任機制,整個金融服務的成本可以進一步大幅降低,也可以更好的控制。“所以我們認為這三個是未來要做數字金融要突破的三個核心能力。

能支撐住連接、風險和信用三大能力的是交互、決策、交易和協同四大業務技術能力。程立說,螞蟻金服現在系統做得這麽大,但每個系統剝開來看,一個個組件無外乎就是做了交互、決策、交易和協同這四件事情。第一,交互技術,包括怎麽與消費者、機構等交互,而像刷臉支付、人臉識別進地鐵等新交互技術,不但帶來了體驗上的變化,也帶來了商業流程的變化。第二,決策技術。無論是風險控制,還是建立信用,甚至一個營銷事件,背後都有一套決策引擎。比如經過一系列的用戶行為畫像,自動化地通過算法和模型給出決策。而決策技術的提升,可以帶來連接、風險和信用能力的提升。第三,用最低的成本處理交易。只有以更低的成本、甚至是遠低於銀行處理交易的成本,才有可能讓很多新業務形態發生、提高交易能力,像淘寶的雙十一大促隨著交易能力的提升,體驗和規模都增長得非常快。交易能力還體現在擴展能力,如何讓數字金融服務可以服務1億,甚至20億到30億的全球消費者,根本在於低成本的系統擴展能力。第四,協同技術。通過重構整個金融產業鏈條上的各個環節的連接,通過技術平臺連接銀行、金融機構等,從而讓連接的機制發生變化。

在四大業務技術能力之下的金字塔基,就是最根本的基礎技術BASIC,即區塊鏈、人工智能、安全、物聯網和計算。這五大技術基礎技術就是螞蟻金服技術戰略投入的方向,其中SOFA就是計算的核心之一。

程立強調,當前其實已經有機構看到了互聯網金融應用和數字金融的大方向,但是落實到企業或金融機構去解決具體問題時,又有兩個不同的路徑,一是金融機構開始用數字技術去解決過去解決不了的問題,二是像螞蟻金服這樣的互聯網企業從科技視角去提供金融服務,而且這二條路徑現在慢慢越來越走到同一個方向。當殊途同歸的同時,就出現了金融機構和互聯網企業之間協作的新方式,因為金融機構有核心能力、互聯網企業也有自己的核心能力,雙方正在形成一個新型的合作方式。

此外,科技金融或者金融科技還有“硬幣的另外一面”,這就是金融監管的科技化升級:一方面發展金融科技,一方面發展新型的監管科技,兩者結合的背後是真正對整個金融系統的風險洞察和理解。只有整個金融系統可持續發展,金融系統裏的每個單元才是可持續發展。

對於螞蟻金服來說,風險是永遠的底線。螞蟻金服有一支非常固定的風險團隊,這個團隊從來沒有人員縮減,永遠保證足夠的人力。關於業務創新、用戶體驗和監管,這相當於天平的動態平衡,一旦動了一個、另外兩個就會聯動,所以這三者是要一起解的局。對於螞蟻金服來說,每個新業務都會同時從幾個方面進行評估,也會與監管機構做非常深入的溝通,基於更全面的理解之後,在各方面都取得最優的形態和背後的技術實現,再推出新業務。

程立強調:“對螞蟻金服或者阿裏巴巴來說,首先我們是非常的理想主義和願景驅動,當確定可以給全世界帶來更多平等的機會時,這一定指引我們的方向。但是我們也是一個非常現實主義的公司,當遇到具體問題的時候,會看怎麽能夠很好的繞過當下的障礙,從而走到要走向的未來。在遇到具體的現實問題的時候,也不會采取非常僵硬的方式。具體問題肯定是要具體分析的,但是我們的願景不會變,也不會把所謂的價值觀變成教條。商業上的可持續發展,對我們來說非常重要,如果我們商業上都不能可持續發展,就走不到未來。”

SOFA的特性

在更包容、更可持續的綠色數字金融大願景之下,從2005年每秒處理1筆交易到2017年雙十一峰值25.6萬筆交易/秒的交易處理能力,從單一的支付到覆蓋微貸、理財、保險、信用等多種服務,通過十多年的探索與實踐,螞蟻金服形成了一套具備海量數據並發處理能力,滿足金融級一致性和高可用需求的分布式架構平臺,這套架構被稱之為SOFA,是一整套完整的金融級中間件產品技術和演進式架構轉型服務體系。

SOFA歷經了五代的發展。在第五代也就2017年,伴隨著螞蟻金服科技的整體對外開放,全稱正式演化成Scalable Open Financial Architecture。Scalable,以「異地多活」為目標,使系統能在多個數據中心內任意擴展,提供機房級容災能力,保證業務連續性;Open,整體設計秉承「開放」原則,使新興架構向下兼容,能與經典架構有機融合,同時開放技術標準,擁抱開源生態;F代表Financial,即這個架構是金融級,安全、穩定、可靠是其內在的屬性,具備「分布式事務」和「無損容災」能力,保證在分布式架構下承受高並發交易,在系統擴展、容災恢復、更新發布時確保數據無損,服務可用。

SOFA架構由支付寶自2007年開始自主研發的SOFA(Service Oriented Fabric Architecture)框架發展而來,旨在解決SOA架構下的服務模塊化編排協作(Fabric)問題。演化至今,已經是一套完善的金融級大規模交易處理架構,很好的解決了螞蟻業務高速發展中,對高並發交易處理能力、強一致性、業務連續性、秒級容災和彈性伸縮等方面的要求,相比傳統的金融IT架構和通用的分布式架構具有諸多優勢:

  • 高並發下的一致性:通過應用層、數據層、網絡層和機房層面消除了單點和瓶頸,整體架構支持無限伸縮,創造了25.6萬筆/秒峰值處理能力的世界紀錄。同時通過基於TCC(Try-Confirm-Cancel) 編程模型的微交易架構,在分布式架構下做到了數據的強一致,是全球目前唯一在超大規模金融級分布式架構上驗證過的分布式事務方案;
  • 異地多活+一致性容災能力保證極高的可用率:在數據層通過螞蟻金服自研的金融級分布式關系型數據庫OceanBase實現多庫多地多活和強一致切換,在機房層實現異地多活單元化架構,整體達到了 99.99% 的可用率;
  • 按需供給彈性伸縮:通過數據、應用、流量彈性伸縮和基於單元化的彈性混合雲架構,系統具備了按業務粒度進行資源調配的能力,連續兩年通過該技術實現雙十一、雙十二、新春紅包等高峰業務彈性伸縮,2016年雙十一50%業務在運營高峰期運行在雲上,結束後實現資源釋放,實現成本的極大優化。

楊冰作為現在螞蟻金服中間件團隊的負責人,強調SOFA為全自研的金融級分布式架構,理論上可以支持無限伸縮架構(雙十一已經是實際的極限情況,目前還沒有出現需要無限伸縮的實際業務場景),並且能夠通過極低成本實現。
技術分享圖片
(上圖為螞蟻金服中間件團隊負責人楊冰)

首先,SOFA的無限伸縮能力是具備“伸”和“縮”的能力,而且不僅是數據庫能無限伸縮,應用、網絡等都能做到無限伸縮,一套架構實現所有層面的無限伸縮。

第二,在一致性問題上,SOFA達到了一致性和性能上的平衡,實現了金融交易業務的分布式事務一致性,這屬於螞蟻金服的黑科技。

第三,做整體機房及秒級容災,現在配備螞蟻金服自研的OceanBase數據庫,能夠達到更好的效果。

第四,極低成本,SOFA架構具備演進能力,需要的時候可以做彈性伸縮。例如,單元化能力可以“切一個1%能力的支付寶”,再以這樣的單元維度去增加,從而達到無限水平擴展;還可以根據業務維度,把交易系統創建到雲上再收回來,比如新春紅包的時候,掃五福系統很忙,就可以把掃五福系統彈到雲上。

所以,SOFA的關鍵詞包括:無限伸縮能力、一致性、秒級容災和極低成本並且做到極致,從而定義了新的“金融級分布式架構”。

SOFA 的緣起

程立,花名魯肅,摩羯座,工號3896。2004年,支付寶剛剛有自己獨立的系統,基礎平臺還得靠外包團隊提供技術支持。而2004年2月,程立還在上海交大攻讀博士,一個偶然機會讓他接觸到阿裏巴巴,並以外包架構師的身份協助支付寶網站的建設。一年合作下來,程立決定放棄博士學位,並於2005年2月正式加入支付寶。程立以嚴謹務實、邏輯嚴密,被螞蟻技術團隊的同事視作“神一樣的存在”。

作為曾經的支付寶首席架構師、支付寶第一代架構設計者,以及支付寶史上最大危機——2008年1月1月停機發布17小時——的救火大隊長,可以說如果說沒有程立,就沒有現在的支付寶。在螞蟻金服入門手冊《拾念》中,記載了支付寶史上最驚心動魄的17小時:2008年元旦,支付寶宣布要停機8小時發布“財務三期”,但各種意外接連出現,當時“財務攜款潛逃”、“濕抹布導致服務器宕機”的傳言滿天飛、沒有包裹送的快遞小哥發帖跪求支付寶快點回來,程立在關鍵時刻敲了近兩個小時的代碼,最終結束了17小時的停機發布。

程立講述了SOFA的誕生歷史:最早的支付寶系統,是由還不太會大系統開發的人員實現的,像程立剛從學校出來就做支付寶第一代架構,因此第一代系統非常簡單——就是一個簡單的應用,裝在一臺應用服務器上,使用一個數據庫,服務一個大客戶淘寶。一個簡單的系統,支撐了支付寶從2004年到2006年早期的發展。支付寶早期的系統架構雖然簡單,但好處是特別快,產品經理希望怎麽改、馬上改一下代碼就能實現了,比如說支付寶紅包,從需求提出到上線就四天的時間,但是到後面,這樣一個簡單系統無法支撐更多的交易量,也不能支撐更加復雜的業務。

從2006年底開始醞釀,那時候支付寶面臨最大的一個問題是業務變得越來越復雜,而工程師數量越來越多,原來的系統被稱為monolithic——即龐大的單體系統的意思。這個系統慢慢變得無法裝載更多更復雜的業務邏輯,也不能讓那麽多工程師在一起並行的工作。當時,支付寶希望可以成百上千個項目並行進行,而且每個工程師可以不受幹擾的工作,而當業務邏輯增加的時候,系統的復雜度不要成指數級上升。

所以,在2006年的時候,支付寶技術團隊要做對未來的技術架構做一個選擇,當時有兩派意見:一派意見是向銀行老大哥學習,老大哥已經走了十幾年,這條路一定是安全的;另一派意見是走一條新的路,即用分布式的架構去支撐未來的交易支付系統,而這條路在當時還沒有人走過。這裏的分布式架構,並不是客戶端/服務器時代的面向企業級的小規模分布式架構,而是在互聯網時代的超大規模分布式架構。經過差不多大概一年左右的討論和思考之後,支付寶團隊做了一個決定,要走一條過去沒有人走過的路,於是啟動了支付寶第二代架構的建設,即支付寶技術系統的服務化。2007年開始,支付寶啟動了對交易系統、商戶系統、會員系統、支付清算系統的改造。
技術分享圖片
就在那一年,支付寶到大連招聘遇到了胡喜(花名:阿璽),他之前已經在前一家公司研究SOA以及OSGi相關技術,於是就加入支付寶團隊,幫助程立做下一代架構的轉變。胡喜回憶,他在2007年加入支付寶團隊的時候,研發人員都比較痛苦。當時的支付寶使用的是阿裏巴巴的統一技術框架WebX。WebX是阿裏自研發的一套基於JavaServlet API的通用Web框架,在阿裏巴巴集團內部廣泛使用,2010年底向社會開放源碼。WebX比較偏向於前後端融合的架構,能快速搭建一個網站,但是沒有考慮到業務發展到一定程度後的復雜度,怎麽更好的搭建後臺。例如,當時支付寶的一個電子錢包系統叫iWallet,每次系統啟動就得五六分鐘,開發人員出去抽根煙,回來後如果發現錯誤又得修改後重新啟動,開發人員每天不是在代碼編譯的過程當中,就是重啟的過程當中,一個系統包含了幾十個工程,十幾個團隊並行開發,項目並發也導致了很多的合並沖突和耗時,整個研發效率低下導致很難進行下去。於是,從那開始就著手研究解決支付寶整個架構的變化。

程立給當時要做的這套分布式架構起了一個“SOFA”的名字,其背後有兩個含義:一是按照當時的技術趨勢,要做面向服務的架構,即ServiceOriented Architecture,但加入了金融業務,所以是Service Oriented Fabric Architecture;二是希望能夠像沙發一樣,讓工程師可以非常爽地工作。所以當時出於這麽簡單的考慮,就開始打造SOFA。所謂SOA和服務化改造,就是把企業的IT系統以“服務”的方式重新組織起來,再通過“服務總線”連接起來形成可插拔式的企業IT架構,這個架構就是SOA。這裏要註意的是,SOA其實是一套面向傳統企業IT的架構思想,而且在SOA早期則只有理論框架而無具體的成功實踐。

第一代的SOFA其實就解決兩個問題:一是當要把系統變成分布式的時候,怎麽有一個像“膠水”的機制也就是連接器,可以把分布式系統連接成一個整體;二是希望每一個服務本身是組件化,所以當時第一代SOFA裏采用了OSGi(一套Java模塊化規範,允許應用程序使用精煉、可重用和可協作的組件構建),這樣每個工程師可以專註於各自的組件,最後又能夠把這些組件拼裝在一起成為“服務”,再把“服務”拼裝在一起成為整個大系統。這一整套框架,就是第一代SOFA框架。

有了第一代SOFA技術架構之後,支付寶團隊就開始做非常關鍵的業務服務改造。首先是把支付寶所有用戶的核心賬務系統變成一個業務服務,從而可以和其它業務組裝起來。但是把賬務拆出來以後,遇到一個更難的問題:怎麽解決分布式服務一致性的問題,也就是分布式事務問題。而在解決這個問題的時候,當時支付寶團隊冒了很大的風險,在啟動這個項目的時候還並不清楚怎麽解決最好,而當時可以參考的行業技術趨勢就是SOA以及業界提出的幾個SOA框架。

SOA業界那時候提出兩個SOA事務的標準:一個是基於Atomic Transaction(原子×××易),叫WS-Atomic Transaction;另一個是基於業務流程編排的事務,叫WS-BusinessActivity;開源社區通過JBoss的TransactionServer實現了這兩個參考標準下的事務。當時,支付寶的技術團隊就在想,能否用JBoss開源技術與這兩個標準去構建支付寶的核心交易和賬務?然而,項目開始後的不久,也就三個月左右的時間,當項目進行到一半的時候,發現這兩個當時業界的標準和開源實現卻根本不可能支持一個實際的應用。

原因很簡單,一個最簡單的核心交易系統和核心賬務系統,進行最簡單的一個事務,也要經過十幾次的消息傳遞,其中任何一次消息傳遞如果中斷,那麽這個事務就失敗了,而且失敗以後,當時業界的SOA標準並沒有提出該怎麽恢復失敗的事務,同時任何一次交易都經過十幾次的消息傳遞的話,也導致整性能非常低。這樣一個系統如果最後發布的話,其實是不能支持支付寶當時的交易量。所以當項目進行到一半的時候,團隊就放棄了業界標準及其開源實現,必須找到自己的一條路。

當年,關於分布式事務的一致性,業界另一條路徑是基於兩階段事務標準(Prepare階段與Commit階段)和開源分布式實現XA,但當時已經知道PayPal曾經走過這條路,結果是導致系統宕機一周,最後系統全部回滾。

所以那個時候,支付寶技術團隊就考慮能否自己提個標準,這樣一來就簡單了:首先是要解決分布式一致性問題,必須要分布式的提交協議,這個協議如果在數據庫層實現,效率會非常低下,因為數據庫層不懂任何的業務邏輯,只能以一種通用的方式去實現,從而導致無法對上層的業務邏輯層進行優化,所以就想到把提交協議放在服務層。

“那個時候,我們大的想法很簡單,既然支付寶系統已經拆成了一個個非常小規模的服務,那麽就讓這個服務本身具備事務的屬性,叫事務性服務。這樣一個個小的事務性服務就像一個個小石頭一樣,可以裝到一個大的杯子裏,然後再設計一個分布式的提交協議,把這一個個小的事務綁定成一個大的業務事務。而這個服務也不僅是微服務,而其實是一個微交易,把每一個服務變成一個交易,再通過一個編排的框架,把每個交易變成一個大的整體服務。”程立用比較形象的語言解釋了現在被稱為螞蟻金服黑科技的分布式事務XTS (eXtended Transaction Service)的由來。

有了這個思路,當時支付寶技術團隊就開始去做了。克服的第一個難點是把已經有的交易服務、賬務服務等,變成一個個交易型服務,這個難點當時就突破了;第二個難點是要實現一個可擴展(Scalable)的框架,去編排海量的事務,那就是XTS。大概在2008年1月份,SOFA項目就上線了,上線以後至今不斷打磨,一直到現在還支撐螞蟻金服整個的業務交易。

SOFA的演進過程

從第一代到眼下的第五代,SOFA的演進過程其實是支付寶從最早的一個大型的業務與IT交織在一起的單體系統,一邊拆金融業務系統(即後來的業務中臺)、一邊拆底層IT系統(即後來的數據中臺、計算中臺)的過程,在拆分的過程中還要解決新出現的可擴展性、一致性問題等各種問題,同時不斷應付每年都能擊穿系統極限的雙十一,還要把數據從原有系統一點一點“倒騰”到新系統裏、同時管理新增的海量數據,這樣一個極為復雜的過程是怎麽進行的?有趣的是,這個過程的附加值之一,就是在無意中完成了去“IOE”,因為從單體系統拆分到互聯網分布式系統,本身就是用PC服務器機房代替昂貴IOE設備的過程。

“整個過程可以說一路狂奔。”楊冰後來回憶整個過程。“‘蘿蔔’就這麽幾個,坑那麽多,根本就填不過來的狀態。每個中間件產品連‘一個蘿蔔一個坑’都做不到,很多‘蘿蔔’是放在兩個三個坑裏面的狀態,你就想有多挑戰了。其次,每一年都是翻一番的業務指標倒逼。整個團隊的狀態基本上是一年大促結束後,春節一過就開始密集準備下一年大促,一眨眼的功夫離雙十一就沒幾個月了,很多系統的技術改造可能要到6、7月份準備好,再全部升級上去,業務還在不斷變化,不停有新的想法冒出來,每年就是這麽個狀態,基本都是開發飛機就把發動機給升級上去了。”

程立回憶,SOFA早期的開發是完全違背項目管理邏輯,在項目推進的過程中既有研發平臺又有研發上層的業務系統,相當於把很多風險都導在一個項目裏面一起做,SOFA第一代項目就是靠團隊齊心協力,每天都會遇到新問題、每天都要去解決各種問題,但大家背後有必勝信念而且非常擁抱變化,敢於在項目的中後期把前期架構決定全部推翻掉,再用一套新的架構替代。“所以到2008年那次賬務三期的發布,那次原定發布8個小時,後來我們發布了17個小時,說明在項目發布過程中,還是有很多問題沒有解決,但最後我們硬生生把這個項目給發布下去,而且成功了,現在回想起來,其實是有一點後怕的。”程立笑說。

2008年之後,支付寶技術團隊開始確定一個原則,即所有的發布不得停機,必須要確保項目發布沒有風險。其次,要結束所有的研究型項目,技術研究要把技術問題解決了,再用到商業系統裏面去。而且從2008年開始,每個新技術都不會首先用到最核心的系統裏,而是會在相對邊緣的業務系統裏經過充分考驗以後,再用到核心系統裏。

在SOFA初期,可以看到做交易和賬務這兩個項目的時候,業務系統開發人員與技術平臺的開發人員是不分的,無論是程立還是胡喜,都是一會兒寫業務交易的代碼,一會兒寫下面的技術平臺代碼,工程師團隊也沒有嚴格區分。後來開始建立中間件團隊,楊冰基本上也是那個時候加入,分配一部分人專門研究底層技術,另一部分人專門寫上面的應用系統架構,慢慢開始變得越來越正規了,包括對於新技術上線過程的灰度和控制,也會做得更好。

楊冰回憶他在2009年以剛畢業的研究生身份加入支付寶團隊的時候,當時服務化拆分的過程是程立、胡喜親自參與,一邊對WebX系統做服務化拆分,一邊胡喜寫了SOFA框架的原型,楊冰與後面加入的小夥伴就幫助不斷完善SOFA。“當時我們還很初級,基本上是程立和胡喜帶著我們去實現他們構想出來完整一套思想。當時雖然服務化和SOA的概念很火,但業界的實踐遠沒有現在這麽豐富,很多實現機制都是摸著石頭過河。業務服務化拆分又是另外一條主線,當時主要是程立、胡喜、倪行軍(花名苗人鳳,支付寶第一代首席架構師,螞蟻金服支付寶事業群總裁)參與,這幾個人都是既寫框架代碼和組件代碼,又參與業務代碼拆分。當時支付寶所有的業務都在演進,支付寶架構團隊一方面在業務邏輯拆分和技術架構拆分的過程中熟悉支付寶的業務,一方面在熟悉業務的基礎上思考如何從中抽象出可復用的代碼、數據和框架,以更好的支持未來的業務。所以當時就是一邊在做業務和技術的人肉拆分,一邊又把拆分的部分挪到新的框架中去承載。整個過程不是設計好了再搞,而是一邊做一邊搞。”

XTS框架都是在那樣一個過程當中寫出來的。因為在原先集中式架構是不會出現事務一致性的問題,拆分以後就出現了這樣的問題。當問題出現以後,就一邊拆一邊解這個問題。當然,解決的時候也不是人為介入,而是構想出技術化的方案,甚至沈澱出來一套技術。那個時候,支付寶系統裏的Oracle數據庫還在用,小型機等高端傳統設備都在用,支付寶的業務系統包括會員、交易等被拆分出來後,就直接跑在X86架構上,這不僅是物理形態和部署形態上的差異,更是由單體應用的開發模式變成SOA化的分布式開發模式,這就是從WebX到SOFA的演進過程。賬務系統是最後一個從支付寶拆分下來的系統,隨著賬務系統的拆分成功,IOE設備也徹底從支付寶系統裏下線。

在整個支付寶架構的改造以及SOFA的發展過程中,關於中間件的基本構成和思想是有業界參照的,比如消息中間件、數據中間件、事務中間件等,但SOFA技術團隊要做面向超大規模互聯網金融交易的分布化改造,而其中的黑科技諸如單元化,則是被業務倒逼出來,完全沒有業界參考的實踐,“我們找到的一些論文,一些概念,一些類似的做法,但當時支付寶的體量已經很大了,沒有人確定這事兒真的能做成,而且是在金融這個高危的業務場景下”。

“套用螞蟻金服前CEO彭蕾的話,她曾提到過大家做的很多事情就是怎麽把馬雲的決定變成一個正確的決定,而我們在整個中間件工程實現過程中,也是類似的情況。比如SOFA3時代的合並部署,當時胡喜提出這個概念的時候,內部爭論非常大,大家都覺得這件事情不靠譜,而且很難做、非常復雜,阻力非常大。最難的事情,是說服團隊。但最後大家還是為能做成這件事情,並為公司節省下這多成本而感到驕傲”楊冰回憶。

為了解決新的挑戰,螞蟻金服的中間件技術團隊想了各種辦法。楊冰為單元化架構當中RPC調用設計的路由邏輯:對於各種業務系統,有的可以升級、有的可以改造、有的不行,那麽在RPC遠程服務調用時就會有五六種分支去決定到底是本地優先、還是要跨機房、還是要根據業務的分庫分表做路由等等。這個邏輯極其復雜,在於既有同構機房、又有異構機房,而異構機房又要把通訊收斂到一個代理,所以又會有代理的存在,導致非常復雜。而為了收管沒法升級的系統,甚至該系統的負責人都已經不在的情況,就用一個類似於Service Mesh技術代理,去“偽裝”這個服務。“整個架構是很漂亮的,但是工程實現中的每一個細節都很復雜,所有的設計都充滿了架構的平衡的智慧。我們在實現整個過程以後,再慢慢把完全沒有必要的三四個路由邏輯去掉,變成比較規整的模式。基本是這樣的過程,因為不能把支付寶停下來。”

負責過SOFA體系中消息中間件的王磊(花名:文若)回憶,阿裏從2008年開始辦雙十一,第一年只是試一下,所以沒有很大規模的宣傳,甚至連內部很多人都不知道。從2009年是開始支付寶和淘寶一起參與雙十一,當時宣傳淘寶商城裏面所有的商品都是半價,但是因為2008年時候對雙十一的力量並沒有清楚的認識,到2009年那一年的時候就突然出現了各種問題。王磊當時負責消息中間件,內部叫做Message Broker,屬於消息隊列:消息從上遊應用通過消息中間件傳遞給下遊的系統,包括當時還在使用的Oracle數據庫。“當時正在看這個活動的過程,甚至我們自己也在買東西的時候,突然DBA跑過來說要趕快對消息進行限流,因為下遊的數據庫馬上就要撐不住了,數據庫的日誌空間馬上就要耗光了,如果耗光就會導致數據庫宕機,再啟動起來就是幾個小時以後的事情。當時我們小組是三個人,以前從來沒有快速對消息進行限流,最後就只能人工登錄上遊應用的服務器上,然後在服務器上敲命令做流量控制,一條一條的敲下去,最後保住了下遊系統沒有被沖垮。那個時候很遺憾,因為不是靠消息中間件去限流,實際上是把上遊發消息的應用‘殺’死了。後來,經過這件事情以後,我們就下定決心要做一件事情,就是叫做一鍵限流,在中間件層面對於消息中心的一鍵限流能力,就是從那天開始建設的。”這樣的故事還有很多。“整個過程就像打怪升級,看到一個幹掉一個。”王磊的實踐,代表了整個SOFA團隊的工作狀態,也代表了SOFA與其它互聯網分布式中間件的最大不同——沈澱了支付寶/螞蟻金服十多年來,整個業務與IT體系的最佳共享實踐。

就是這樣,SOFA 的演進伴隨著支付寶整個架構的演進而發展,程立回憶,第一代SOFA比較簡單,只是搭了一個框架和模型讓系統可以運行,到後期系統運行中做了大量的優化,包括要解決通訊的性能、最高效的容災、異地容災架構的建設、單元化改造、LDC邏輯數據中心項目等,所有這些慢慢就沈澱在SOFA裏面。而SOFA則逐漸從解決分布式服務和分布式交易的問題,變成一個真正解決金融級系統構建的基礎架構問題,所以現在把SOFA改名,從原來的Service Oriented FabricArchitecture改為Scalable Open Financial Architecture:這個框架是可以真正解決金融級系統的異地多活的容災和擴展問題,而且SOFA的可擴展能力不僅是處理更多的交易,還可容納更多的業務,能夠讓幾千位工程師甚至未來上萬個工程師一起協同工作的可擴展架構;Open的意思是希望這個框架相對可以讓業務應用非常容易使用,又能與經典架構系統有機融合,SOFA框架未來不但可以編排螞蟻金服工程師自己寫的業務邏輯,而且可以編排合作夥伴的業務邏輯,成為一個完整的編排框架;Financial則意味著SOFA必須是具備金融級屬性,能真正實現金融級的一致性、可用性和穩定性。

SOFA的設計哲學

SOFA從第一代發展到第五代,是一個異常復雜而龐大的過程,程立總結SOFA的研發方法論和經驗時表示:在整個研發方法和流程上,螞蟻金服相對於來說是以互聯網的方式去做金融,因為螞蟻金服本身就是一個金融系統,在要求非常嚴格的同時,也希望有互聯網的叠代速度,在這個過程中沈澱下來的經驗。
技術分享圖片
首先,註重架構的治理。螞蟻金服一直有一個架構師團隊,既有總架構師團隊,同時又把各個分域的架構師集合在一起,始終保持螞蟻金服的架構在一張圖上。螞蟻金服架構的叠代演進也非常清晰,從一代、二代、三代、四代到現在的第五代架構,都有非常清晰的演進階段,這是從治理層面進行頂層設計的結果。

第二,關註技術的風險。螞蟻金服研發任何系統,要比其它互聯網公司多付出可能10%的努力,去保證系統風險的可控,所以螞蟻金服技術風險管控是嵌到流程裏面、控制在整個研發生命周期裏面,從而實現了非常好的控制。當然,螞蟻金服的研發效能團隊也會把控,讓研發人員盡量簡單、盡量智能化。

第三,系統優化是在高度分布化的前提下實現的。螞蟻金服是比較少有的、幾千人工作在一條業務流程上面,最核心支付流程從前端到後端分了很多層、每層裏面有很多功能,在這個過程中能夠保證非常好的分布和集成效率以及質量,就變得非常關鍵。所以從整個項目管理的需求、分析、分解,到每個團隊去實現,最後再做高效的集成、叠代發布,有非常多經驗沈澱在研發部署運維平臺上。螞蟻金服的研發部署運維平臺經過多代的變化,有段時間也引進了IBM等供應商的整套方法和工具,用了兩年左右時間後發現完全不適合螞蟻金服工作方式和速度,所以轉向自研的平臺,並不斷輕量化。但也不是外界的開源模式,因為也不適用於螞蟻金服的情況。

第四,螞蟻金服中間件團隊的另一個共識,Design for failure,即假定在任何情況下底層都有不可靠的風險存在。對金融IT系統來說,任何的底層硬件臨時故障或網絡抖動都有可能被放大到資金損失或整體服務穩定性層面。對於支付寶這樣體量的互聯網應用,從設計之初就把高可靠、高可用、高性能的能力要轉到中間件層和數據庫層去保證。下面的IaaS必須要簡單,就是允許底層硬件可以掛掉,掛掉以後由中間件和數據庫層負責。為什麽會這麽做?這是由業務的容忍程度決定的,沒法沈到底下的IaaS層,但也沒有必要讓每個寫業務代碼的人都自己編寫一套代碼,所以就沈澱到中間件層。

中間件會被所有人用到、會影響所有的系統,像螞蟻金服現在有幾千個系統和上萬個微服務、幾千號研發人員,怎麽能使在中間件層做的每一項工作都能使整體架構都能平滑升級,而不要讓業務系統受影響,怎麽建立跟其他開發人員之間的連接,如何平衡效率和運維,這是中間件的挑戰。

被問到SOFA 跟別的微服務平臺有什麽不同,楊冰舉了個例子“如果有兩套架構在頂層設計的時候,一套將平衡傾向了「成本最優」,一套則傾向了「風險最小」,在實現過程中就會有千百次設計決策會依據這個大原則做出「架構平衡」,到最後出來的架構會完全不同,就像 CAP 理論中的平衡一樣,什麽樣的業務決定著會孵化出什麽樣的技術,技術最終還是為業務服務的。

總結

創新都是被逼出來的,螞蟻金服自研SOFA同樣如此。SOFA走的是一條跟傳統金融行業不同的分布式架構之路。要基於不可靠的硬件系統實現金融級的性能和可靠性,要應對支付寶這樣的超大規模互聯網金融應用,有很多難題要解決。螞蟻金服構建了一整套處理金融級交易的分布式架構與平臺,在金融級的一致性要求和海量並發處理能力上達到了很好的平衡,並在快速容災恢復、彈性伸縮能力、多地多活高可用保證能力和按需供給的精細化資源調度能力方面沈澱了豐富的實踐經驗。

隨著 2015 年科技開放戰略的啟動,螞蟻金服技術的團隊面對的不僅僅是內部業務,還有更加復雜多變的外部業務場景和技術挑戰。以前,技術團隊是一個被被業務倒逼的支持型組織,現在已經逐步向一個驅動業務的學習型組織和創新型組織轉變。“昨天的最好表現是今天最低的要求,由於雙11在技術上已經成為常態化工作,滿足交易業務已經成為了最基本的要求,所以我們要看到更遠的未來、準備迎接更強的挑戰。”楊冰的話,從一個側面解釋了螞蟻金服技術團隊對開拓更遼闊數字金融世界邊界的期待。(文/寧川)

螞蟻金服十年自研分布式中間件,成就世界級新金融科技平臺