天天看點

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

小螞蟻說:

不久前,小螞蟻為大家帶來了《厲害了,螞蟻金服!創造了中國自己的資料庫OceanBase》,這篇故事用兩萬多字的篇幅為大家講述了螞蟻金服完全自主可控的中國自研分布式關系型資料庫OceanBase背後的研發故事,受到了大家的熱切關注。

在螞蟻金服内部,另一個同樣重量級的的分布式中間件自研技術同樣值得關注。從2004年支付寶成立開始,螞蟻金服在過去十多年時間裡走出了一條自研的、面向超大規模網際網路金融應用的、金融級中間件技術體系。本文同樣用超過萬字的篇幅為大家回顧了這過去十年的研發故事,一起來感受一下吧!

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

前言

中間件,是與作業系統和資料庫并列的傳統基礎軟體三駕馬車之一,也是難度極高的軟體工程。傳統中間件的概念,誕生于上一個“分布式”計算的年代,也就是小規模區域網路中的伺服器/用戶端計算模式,在作業系統之上、應用軟體之下的“中間層”軟體。早期中間件的出現,是為了解決日益複雜的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在技術上已經成為常态化工作,滿足交易業務已經成為了最基本的要求,是以我們要看到更遠的未來、準備迎接更強的挑戰。”楊冰的話,從一個側面解釋了螞蟻金服技術團隊對開拓更遼闊數字金融世界邊界的期待。