中間件,是與操作系統(tǒng)和數(shù)據(jù)庫并列的傳統(tǒng)基礎(chǔ)軟件三駕馬車之一,也是難度極高的軟件工程。傳統(tǒng)中間件的概念,誕生于上一個“分布式”計(jì)算的年代,也就是小規(guī)模局域網(wǎng)中的服務(wù)器 / 客戶端計(jì)算模式,在操作系統(tǒng)之上、應(yīng)用軟件之下的“中間層”軟件。早期中間件的出現(xiàn),是為了解決日益復(fù)雜的 PC 服務(wù)器、網(wǎng)絡(luò)甚至不同地理位置機(jī)房之間等異構(gòu)硬件環(huán)境中,支撐應(yīng)用軟件的挑戰(zhàn)。與操作系統(tǒng)和數(shù)據(jù)庫不同,中間件并沒有一個明確的定義,通常來說包括消息、數(shù)據(jù)、遠(yuǎn)程過程調(diào)用、對象請求代理、事務(wù)、構(gòu)件等幾個部分。
隨著互聯(lián)網(wǎng)的快速發(fā)展,特別是云計(jì)算在近十年的蓬勃進(jìn)展,企業(yè)的 IT 環(huán)境發(fā)生了深刻的變化:從過去基于局域網(wǎng)和城域網(wǎng)、單一城市地理范圍的分布式計(jì)算環(huán)境(傳統(tǒng)企業(yè)),向基于互聯(lián)網(wǎng)和光纖網(wǎng)絡(luò)、全國甚至全球地理范圍的超大規(guī)模分布式計(jì)算環(huán)境演進(jìn)(互聯(lián)網(wǎng)企業(yè))。在這個過程中,軟件也向大規(guī)?;ヂ?lián)網(wǎng)服務(wù)和云服務(wù)演化,無論是操作系統(tǒng)還是數(shù)據(jù)庫都發(fā)生了深刻的變化,中間件也在這個過程不斷演進(jìn)和擴(kuò)大自己的邊界。
中間件的發(fā)展代表著技術(shù)架構(gòu)的升級和變遷,而這與企業(yè)組織模型和業(yè)務(wù)實(shí)踐息息相關(guān)。理論上,中間件向下屏蔽異構(gòu)的硬件、軟件、網(wǎng)絡(luò)等計(jì)算資源,向上提供應(yīng)用開發(fā)、運(yùn)行、維護(hù)等全生命周期的統(tǒng)一計(jì)算環(huán)境與管理,屬于承上啟上的中間連接層,對企業(yè)來說著重要的價(jià)值。根據(jù)康威定律,軟件和系統(tǒng)架構(gòu)設(shè)計(jì),和企業(yè)的組織結(jié)構(gòu)、業(yè)務(wù)流程和溝通方式息息相關(guān),因此,隨著企業(yè)業(yè)務(wù)規(guī)模的超大規(guī)模和快速迭代發(fā)展,中間件質(zhì)量和能力的高低就直接決定了企業(yè)技術(shù)架構(gòu)的命運(yùn)。特別是隨著數(shù)字商業(yè)的興起,過去不能被業(yè)務(wù)感知、不能為最終用戶帶來直接價(jià)值的中間件,也成為了數(shù)字業(yè)務(wù)的一部分。
螞蟻金服是一家旨在為世界帶來平等金融服務(wù)的科技企業(yè),作為原生的數(shù)字企業(yè)和數(shù)字商業(yè)代表,螞蟻金服從 2004 年成立支付寶開始,在過去十多年的時間里走出了一條自研的、面向超大規(guī)模互聯(lián)網(wǎng)金融應(yīng)用的、金融級中間件技術(shù)體系。特別是自 2008 年雙十一以來,在每年雙十一超大規(guī)模流量的沖擊上,螞蟻金服不斷突破現(xiàn)有技術(shù)的極限,在金融領(lǐng)域達(dá)到了前所未有的技術(shù)成就,特別是歷時十年自研的中間件技術(shù)可以滿足 2017 年雙十一 25.6 萬筆 / 秒的支付峰值、全天 14.8 億筆的支付,而 2010 年雙十一的支付峰值為 2 萬筆 / 分鐘、全天 1280 萬筆支付。在過去幾年內(nèi),螞蟻金服自研的中間件技術(shù)所支持的支付峰值翻了 750 倍、全天支付筆數(shù)翻了 115 倍、交易更覆蓋全球 225 個國家和地區(qū)。
極限業(yè)務(wù)場景催生了極限的 IT 體系。螞蟻金服的金融核心技術(shù)部負(fù)責(zé)人趙尊奎(花名:妙才)說,他經(jīng)常接待外部的金融機(jī)構(gòu)負(fù)責(zé)人來參觀和了解螞蟻金服的 IT 體系,“看過的都表示不敢想象”。今天,螞蟻金服的軟件工程成就,已經(jīng)把雙十一極限挑戰(zhàn)變成了新常態(tài),而這套支撐螞蟻分布式實(shí)踐的架構(gòu)體系,稱之為 SOFA(Scalable Open Financial Architecture,簡稱 SOFA)。
SOFA 最近在不斷加大開放和開源的步伐。2018 年 6 月,筆者走進(jìn)螞蟻金服的技術(shù)團(tuán)隊(duì),與螞蟻金服 CTO 程立(花名:魯肅)、副 CTO 及首席技術(shù)架構(gòu)師胡喜(花名:阿璽)、中間件團(tuán)隊(duì)負(fù)責(zé)人楊冰 (花名:楊延昭)、技術(shù)風(fēng)險(xiǎn)團(tuán)隊(duì)負(fù)責(zé)人陳亮(花名:俊義)、金融核心團(tuán)隊(duì)負(fù)責(zé)人趙尊奎(花名:妙才)等進(jìn)行了深入訪談,了解了螞蟻金服技術(shù)架構(gòu)并不廣為人知的十年研發(fā)故事。
面向全人類的金融科技平等
螞蟻金服的中間件架構(gòu)及基礎(chǔ)體系 SOFA 經(jīng)過了十多年的漫長發(fā)展,是一個極其復(fù)雜的過程、經(jīng)過了無數(shù)次的拆分與合并、結(jié)合以支付寶為代表的互聯(lián)網(wǎng)金融業(yè)務(wù)需求與要求、多次超越了人與機(jī)器極限的龐大軟件工程。在講述 SOFA 的故事之前,有必要理解螞蟻金服 CTO 程立(魯肅)、副 CTO 及首席技術(shù)架構(gòu)師胡喜(阿璽)在 2017 年總結(jié)及展望的面向全人類的未來數(shù)字金融愿景。
為什么說是面向全人類的數(shù)字金融新世界呢?截止至 2018 年 3 月 31 日,螞蟻金服旗下的支付寶和其合作方旗下的全球活躍用戶數(shù)已達(dá)到 8.7 億;隨著支付寶收錢碼的普及,遍布中國大街小巷的商戶逐步實(shí)現(xiàn)了收銀環(huán)節(jié)的數(shù)字化;與此同時,越來越多的人在支付寶的城市服務(wù)中辦理過包括社保、交通、民政等 12 大類的 100 多種服務(wù),超過 30 個城市的公交、地鐵先后支持支付寶……
而根據(jù)艾瑞咨詢的數(shù)據(jù),2017 年中國的網(wǎng)上支付交易規(guī)模達(dá) 2075.1 萬億元,2018 年第一季度支付寶與財(cái)付通兩大巨頭占據(jù)中國第三方移動支付交易規(guī)模市場份額的 90.6%。而截止到 2017 年 6 月,已經(jīng)有 25 個國家接入了支付寶,全球 200 多個國家用戶可使用支付寶。除了支付寶,互聯(lián)網(wǎng)支付、移動支付以及基于各種互聯(lián)網(wǎng)金融技術(shù)的金融業(yè)務(wù)已經(jīng)遍地開花,傳統(tǒng)銀行等金融機(jī)構(gòu)都在積極推進(jìn)互聯(lián)網(wǎng)金融業(yè)務(wù)和數(shù)字金融體系,而阿里等電子商務(wù)的全球化發(fā)展也把新金融和金融科技進(jìn)一步推向全球。人工智能、區(qū)塊鏈、物聯(lián)網(wǎng)等新技術(shù)正在成為金融科技的基礎(chǔ),一個屬于全人類的未來金融正在形成中。
螞蟻金服 CTO 程立認(rèn)為,科技金融或現(xiàn)代金融最核心的變革就是數(shù)字化的變革,最核心的科技進(jìn)步也是數(shù)字科技。所謂的科技金融,背后其實(shí)就是數(shù)字金融。而數(shù)字金融能夠帶來最大的改變,就是更加包容、更加可持續(xù)、更加綠色的金融,服務(wù)于實(shí)體經(jīng)濟(jì)。隨著數(shù)字技術(shù)的發(fā)展,將會給全人類帶來數(shù)字社會、數(shù)字經(jīng)濟(jì)和數(shù)字金融三位一體的演進(jìn)。
螞蟻金服CTO 程立
在程立看來,螞蟻金服不是為了做技術(shù)本身而做技術(shù),而希望用技術(shù)來解決社會當(dāng)下和未來的問題。如果說用金字塔結(jié)構(gòu)來描繪數(shù)字金融的社會價(jià)值,在塔頂?shù)木褪菙?shù)字金融能在全球范圍內(nèi)帶來更多平等的機(jī)會。
那么這個“平等”到底怎么理解?還要回看馬云對整個阿里巴巴集團(tuán)的愿景:辦 102 年的企業(yè),讓天下沒有難做的生意。在阿里巴巴集團(tuán) 18 周年年會上,馬云說:“我們希望為全世界解決 1 億的就業(yè)機(jī)會,我們希望能夠服務(wù) 20 億的消費(fèi)者,我們更希望能夠?yàn)?1000 萬家中小企業(yè)創(chuàng)造盈利的平臺?!倍唧w到未來 5 到 10 年,“我們不是要超越誰,也不是要當(dāng)世界前三,而是要為未來解決問題,要為中小企業(yè)、為年輕人、為我們當(dāng)年‘讓天下沒有難做的生意’這個承諾去付諸于行動。”
作為大阿里系的核心成員,螞蟻金服對更多平等的機(jī)會理解就是,讓全世界的年輕人能夠平等地獲得金融服務(wù),支持其發(fā)展;讓全球消費(fèi)者能夠平等地獲得金融服務(wù),更便利的生活;讓全球的中小企業(yè)能夠平等地獲得金融服務(wù),享受與大企業(yè)一樣的商業(yè)機(jī)會。
怎么實(shí)現(xiàn)更多平等的機(jī)會?
這就需要“包容(Inclusive)”和“可持續(xù)(Sustainable)”。
“比如說去喜馬拉雅山的珠峰大本營,通了電以后,大家把二維碼貼上去,為什么呢?因?yàn)橹皼]有通電、沒有二維碼,大本營的小商戶都是現(xiàn)金交易,導(dǎo)致這些小商戶必須每過一段時間就要去最近的銀行兌錢或各種繳費(fèi),一趟就要半天的時間。有了電和支付寶以后,所有事情都可以數(shù)字化解決了。無論在上海、杭州還是高海拔的珠峰大本營,都可以獲得一樣的金融服務(wù),這是一個平等的過程,所以包容、可持續(xù)發(fā)展的綠色數(shù)字金融是我們的核心技術(shù)理念?!焙惭a(bǔ)充說。
螞蟻金服副總裁、副CTO 胡喜
程立認(rèn)為:要想建立一個包容、可持續(xù)發(fā)展的綠色數(shù)字金融,有三個很核心能力要建設(shè)——連接、風(fēng)險(xiǎn)和信用。
首先是連接。金融服務(wù)過去要能夠觸達(dá)到消費(fèi)者和商家,成本和運(yùn)營都很重,比如銀行要開很多的線下網(wǎng)點(diǎn),有了數(shù)字技術(shù)之后就可以用很輕的方式觸達(dá)到上億的人,所以整個連接觸達(dá)方式,無論從廣度和深度上都發(fā)生了變化。銀行的線下網(wǎng)點(diǎn)覆蓋會越來越少,跑網(wǎng)點(diǎn)的商家與消費(fèi)者也會越來越少,甚至未來 IoT 時代可以隨時隨地觸達(dá)。因此連接是一個非常重要的能力,不光是跟消費(fèi)者連接、跟商家連接,也包括跟合作伙伴的連接,因?yàn)榻鹑诜?wù)從生產(chǎn)到消費(fèi)有很長、很多的產(chǎn)業(yè)鏈,連接能力能夠讓整個鏈條的協(xié)同更加高效、更低成本、更少摩擦,所以“連接”是未來數(shù)字金融的核心能力。
其次是風(fēng)險(xiǎn)控制。螞蟻金服要讓更多的人享受到平等的金融服務(wù),如果想讓用戶的體驗(yàn)簡單、高效、體驗(yàn)好,背后的風(fēng)險(xiǎn)必然就提高了;如何在風(fēng)險(xiǎn)提高的同時,又能讓支付過程中用戶體驗(yàn)更加順暢,更加少打擾用戶,核心背后還是技術(shù)能力的提升。
最后,最核心能力就是信用。如果未來真的建立一個全社會的人與人、機(jī)構(gòu)與機(jī)構(gòu)、人與機(jī)構(gòu)之間新型的信任機(jī)制,整個金融服務(wù)的成本可以進(jìn)一步大幅降低,也可以更好的控制。“所以我們認(rèn)為這三個是未來要做數(shù)字金融要突破的三個核心能力。
能支撐住連接、風(fēng)險(xiǎn)和信用三大能力的是交互、決策、交易和協(xié)同四大業(yè)務(wù)技術(shù)能力。程立說,螞蟻金服現(xiàn)在系統(tǒng)做得這么大,但每個系統(tǒng)剝開來看,一個個組件無外乎就是做了交互、決策、交易和協(xié)同這四件事情。第一,交互技術(shù),包括怎么與消費(fèi)者、機(jī)構(gòu)等交互,而像刷臉支付、人臉識別進(jìn)地鐵等新交互技術(shù),不但帶來了體驗(yàn)上的變化,也帶來了商業(yè)流程的變化。第二,決策技術(shù)。無論是風(fēng)險(xiǎn)控制,還是建立信用,甚至一個營銷事件,背后都有一套決策引擎。比如經(jīng)過一系列的用戶行為畫像,自動化地通過算法和模型給出決策。而決策技術(shù)的提升,可以帶來連接、風(fēng)險(xiǎn)和信用能力的提升。第三,用最低的成本處理交易。只有以更低的成本、甚至是遠(yuǎn)低于銀行處理交易的成本,才有可能讓很多新業(yè)務(wù)形態(tài)發(fā)生、提高交易能力,像淘寶的雙十一大促隨著交易能力的提升,體驗(yàn)和規(guī)模都增長得非??臁=灰啄芰€體現(xiàn)在擴(kuò)展能力,如何讓數(shù)字金融服務(wù)可以服務(wù) 1 億,甚至 20 億到 30 億的全球消費(fèi)者,根本在于低成本的系統(tǒng)擴(kuò)展能力。第四,協(xié)同技術(shù)。通過重構(gòu)整個金融產(chǎn)業(yè)鏈條上的各個環(huán)節(jié)的連接,通過技術(shù)平臺連接銀行、金融機(jī)構(gòu)等,從而讓連接的機(jī)制發(fā)生變化。
在四大業(yè)務(wù)技術(shù)能力之下的金字塔基,就是最根本的基礎(chǔ)技術(shù) BASIC,即區(qū)塊鏈、人工智能、安全、物聯(lián)網(wǎng)和計(jì)算。這五大技術(shù)基礎(chǔ)技術(shù)就是螞蟻金服技術(shù)戰(zhàn)略投入的方向,其中 SOFA 就是計(jì)算的核心之一。
程立強(qiáng)調(diào),當(dāng)前其實(shí)已經(jīng)有機(jī)構(gòu)看到了互聯(lián)網(wǎng)金融應(yīng)用和數(shù)字金融的大方向,但是落實(shí)到企業(yè)或金融機(jī)構(gòu)去解決具體問題時,又有兩個不同的路徑,一是金融機(jī)構(gòu)開始用數(shù)字技術(shù)去解決過去解決不了的問題,二是像螞蟻金服這樣的互聯(lián)網(wǎng)企業(yè)從科技視角去提供金融服務(wù),而且這二條路徑現(xiàn)在慢慢越來越走到同一個方向。當(dāng)殊途同歸的同時,就出現(xiàn)了金融機(jī)構(gòu)和互聯(lián)網(wǎng)企業(yè)之間協(xié)作的新方式,因?yàn)榻鹑跈C(jī)構(gòu)有核心能力、互聯(lián)網(wǎng)企業(yè)也有自己的核心能力,雙方正在形成一個新型的合作方式。
此外,科技金融或者金融科技還有“硬幣的另外一面”,這就是金融監(jiān)管的科技化升級:一方面發(fā)展金融科技,一方面發(fā)展新型的監(jiān)管科技,兩者結(jié)合的背后是真正對整個金融系統(tǒng)的風(fēng)險(xiǎn)洞察和理解。只有整個金融系統(tǒng)可持續(xù)發(fā)展,金融系統(tǒng)里的每個單元才是可持續(xù)發(fā)展。
對于螞蟻金服來說,風(fēng)險(xiǎn)是永遠(yuǎn)的底線。螞蟻金服有一支非常固定的風(fēng)險(xiǎn)團(tuán)隊(duì),這個團(tuán)隊(duì)從來沒有人員縮減,永遠(yuǎn)保證足夠的人力。關(guān)于業(yè)務(wù)創(chuàng)新、用戶體驗(yàn)和監(jiān)管,這相當(dāng)于天平的動態(tài)平衡,一旦動了一個、另外兩個就會聯(lián)動,所以這三者是要一起解的局。對于螞蟻金服來說,每個新業(yè)務(wù)都會同時從幾個方面進(jìn)行評估,也會與監(jiān)管機(jī)構(gòu)做非常深入的溝通,基于更全面的理解之后,在各方面都取得最優(yōu)的形態(tài)和背后的技術(shù)實(shí)現(xiàn),再推出新業(yè)務(wù)。
程立強(qiáng)調(diào):“對螞蟻金服或者阿里巴巴來說,首先我們是非常的理想主義和愿景驅(qū)動,當(dāng)確定可以給全世界帶來更多平等的機(jī)會時,這一定指引我們的方向。但是我們也是一個非?,F(xiàn)實(shí)主義的公司,當(dāng)遇到具體問題的時候,會看怎么能夠很好的繞過當(dāng)下的障礙,從而走到要走向的未來。在遇到具體的現(xiàn)實(shí)問題的時候,也不會采取非常僵硬的方式。具體問題肯定是要具體分析的,但是我們的愿景不會變,也不會把所謂的價(jià)值觀變成教條。商業(yè)上的可持續(xù)發(fā)展,對我們來說非常重要,如果我們商業(yè)上都不能可持續(xù)發(fā)展,就走不到未來?!?/p>
SOFA 的特性
在更包容、更可持續(xù)的綠色數(shù)字金融大愿景之下,從 2005 年每秒處理 1 筆交易到 2017 年雙十一峰值 25.6 萬筆交易 / 秒的交易處理能力,從單一的支付到覆蓋微貸、理財(cái)、保險(xiǎn)、信用等多種服務(wù),通過十多年的探索與實(shí)踐,螞蟻金服形成了一套具備海量數(shù)據(jù)并發(fā)處理能力,滿足金融級一致性和高可用需求的分布式架構(gòu)平臺,這套架構(gòu)被稱之為 SOFA,是一整套完整的金融級中間件產(chǎn)品技術(shù)和演進(jìn)式架構(gòu)轉(zhuǎn)型服務(wù)體系。
SOFA 歷經(jīng)了五代的發(fā)展。在第五代也就 2017 年,伴隨著螞蟻金服科技的整體對外開放,全稱正式演化成 Scalable Open Financial Architecture。Scalable,以「異地多活」為目標(biāo),使系統(tǒng)能在多個數(shù)據(jù)中心內(nèi)任意擴(kuò)展,提供機(jī)房級容災(zāi)能力,保證業(yè)務(wù)連續(xù)性;Open,整體設(shè)計(jì)秉承「開放」原則,使新興架構(gòu)向下兼容,能與經(jīng)典架構(gòu)有機(jī)融合,同時開放技術(shù)標(biāo)準(zhǔn),擁抱開源生態(tài);F 代表 Financial,即這個架構(gòu)是金融級,安全、穩(wěn)定、可靠是其內(nèi)在的屬性,具備「分布式事務(wù)」和「無損容災(zāi)」能力,保證在分布式架構(gòu)下承受高并發(fā)交易,在系統(tǒng)擴(kuò)展、容災(zāi)恢復(fù)、更新發(fā)布時確保數(shù)據(jù)無損,服務(wù)可用。
SOFA 架構(gòu)由支付寶自 2007 年開始自主研發(fā)的 SOFA(Service Oriented Fabric Architecture) 框架發(fā)展而來,旨在解決 SOA 架構(gòu)下的服務(wù)模塊化編排協(xié)作(Fabric)問題。演化至今,已經(jīng)是一套完善的金融級大規(guī)模交易處理架構(gòu),很好的解決了螞蟻業(yè)務(wù)高速發(fā)展中,對高并發(fā)交易處理能力、強(qiáng)一致性、業(yè)務(wù)連續(xù)性、秒級容災(zāi)和彈性伸縮等方面的要求,相比傳統(tǒng)的金融 IT 架構(gòu)和通用的分布式架構(gòu)具有諸多優(yōu)勢:
高并發(fā)下的一致性:通過應(yīng)用層、數(shù)據(jù)層、網(wǎng)絡(luò)層和機(jī)房層面消除了單點(diǎn)和瓶頸,整體架構(gòu)支持無限伸縮,創(chuàng)造了 25.6 萬筆 / 秒峰值處理能力的世界紀(jì)錄。同時通過基于 TCC(Try-Confirm-Cancel) 編程模型的微交易架構(gòu),在分布式架構(gòu)下做到了數(shù)據(jù)的強(qiáng)一致,是全球目前唯一在超大規(guī)模金融級分布式架構(gòu)上驗(yàn)證過的分布式事務(wù)方案;
異地多活 + 一致性容災(zāi)能力保證極高的可用率:在數(shù)據(jù)層通過螞蟻金服自研的金融級分布式關(guān)系型數(shù)據(jù)庫 OceanBase 實(shí)現(xiàn)多庫多地多活和強(qiáng)一致切換,在機(jī)房層實(shí)現(xiàn)異地多活單元化架構(gòu),整體達(dá)到了 99.99% 的可用率;
按需供給彈性伸縮:通過數(shù)據(jù)、應(yīng)用、流量彈性伸縮和基于單元化的彈性混合云架構(gòu),系統(tǒng)具備了按業(yè)務(wù)粒度進(jìn)行資源調(diào)配的能力,連續(xù)兩年通過該技術(shù)實(shí)現(xiàn)雙十一、雙十二、新春紅包等高峰業(yè)務(wù)彈性伸縮,2016 年雙十一 50% 業(yè)務(wù)在運(yùn)營高峰期運(yùn)行在云上,結(jié)束后實(shí)現(xiàn)資源釋放,實(shí)現(xiàn)成本的極大優(yōu)化。
楊冰作為現(xiàn)在螞蟻金服中間件團(tuán)隊(duì)的負(fù)責(zé)人,強(qiáng)調(diào) SOFA 為全自研的金融級分布式架構(gòu),理論上可以支持無限伸縮架構(gòu)(雙十一已經(jīng)是實(shí)際的極限情況,目前還沒有出現(xiàn)需要無限伸縮的實(shí)際業(yè)務(wù)場景),并且能夠通過極低成本實(shí)現(xiàn)。
螞蟻金服中間件團(tuán)隊(duì)負(fù)責(zé)人 楊冰
首先,SOFA 的無限伸縮能力是具備“伸”和“縮”的能力,而且不僅是數(shù)據(jù)庫能無限伸縮,應(yīng)用、網(wǎng)絡(luò)等都能做到無限伸縮,一套架構(gòu)實(shí)現(xiàn)所有層面的無限伸縮。
第二,在一致性問題上,SOFA 達(dá)到了一致性和性能上的平衡,實(shí)現(xiàn)了金融交易業(yè)務(wù)的分布式事務(wù)一致性,這屬于螞蟻金服的黑科技。
第三,做整體機(jī)房及秒級容災(zāi),現(xiàn)在配備螞蟻金服自研的 OceanBase 數(shù)據(jù)庫,能夠達(dá)到更好的效果。
第四,極低成本,SOFA 架構(gòu)具備演進(jìn)能力,需要的時候可以做彈性伸縮。例如,單元化能力可以“切一個 1% 能力的支付寶”,再以這樣的單元維度去增加,從而達(dá)到無限水平擴(kuò)展;還可以根據(jù)業(yè)務(wù)維度,把交易系統(tǒng)創(chuàng)建到云上再收回來,比如新春紅包的時候,掃五福系統(tǒng)很忙,就可以把掃五福系統(tǒng)彈到云上。
所以,SOFA 的關(guān)鍵詞包括:無限伸縮能力、一致性、秒級容災(zāi)和極低成本并且做到極致,從而定義了新的“金融級分布式架構(gòu)”。
SOFA 的緣起
程立,花名魯肅,摩羯座,工號 3896。2004 年,支付寶剛剛有自己獨(dú)立的系統(tǒng),基礎(chǔ)平臺還得靠外包團(tuán)隊(duì)提供技術(shù)支持。而 2004 年 2 月,程立還在上海交大攻讀博士,一個偶然機(jī)會讓他接觸到阿里巴巴,并以外包架構(gòu)師的身份協(xié)助支付寶網(wǎng)站的建設(shè)。一年合作下來,程立決定放棄博士學(xué)位,并于 2005 年 2 月正式加入支付寶。程立以嚴(yán)謹(jǐn)務(wù)實(shí)、邏輯嚴(yán)密,被螞蟻技術(shù)團(tuán)隊(duì)的同事視作“神一樣的存在”。
作為曾經(jīng)的支付寶首席架構(gòu)師、支付寶第一代架構(gòu)設(shè)計(jì)者,以及支付寶史上最大危機(jī)——2008 年 1 月 1 月停機(jī)發(fā)布 17 小時——的救火大隊(duì)長,可以說如果說沒有程立,就沒有現(xiàn)在的支付寶。在螞蟻金服入門手冊《拾念》中,記載了支付寶史上最驚心動魄的 17 小時:2008 年元旦,支付寶宣布要停機(jī) 8 小時發(fā)布“財(cái)務(wù)三期”,但各種意外接連出現(xiàn),當(dāng)時“財(cái)務(wù)攜款潛逃”、“濕抹布導(dǎo)致服務(wù)器宕機(jī)”的傳言滿天飛、沒有包裹送的快遞小哥發(fā)帖跪求支付寶快點(diǎn)回來,程立在關(guān)鍵時刻敲了近兩個小時的代碼,最終結(jié)束了 17 小時的停機(jī)發(fā)布。
程立講述了 SOFA 的誕生歷史:最早的支付寶系統(tǒng),是由還不太會大系統(tǒng)開發(fā)的人員實(shí)現(xiàn)的,像程立剛從學(xué)校出來就做支付寶第一代架構(gòu),因此第一代系統(tǒng)非常簡單——就是一個簡單的應(yīng)用,裝在一臺應(yīng)用服務(wù)器上,使用一個數(shù)據(jù)庫,服務(wù)一個大客戶淘寶。一個簡單的系統(tǒng),支撐了支付寶從 2004 年到 2006 年早期的發(fā)展。支付寶早期的系統(tǒng)架構(gòu)雖然簡單,但好處是特別快,產(chǎn)品經(jīng)理希望怎么改、馬上改一下代碼就能實(shí)現(xiàn)了,比如說支付寶紅包,從需求提出到上線就四天的時間,但是到后面,這樣一個簡單系統(tǒng)無法支撐更多的交易量,也不能支撐更加復(fù)雜的業(yè)務(wù)。
從 2006 年底開始醞釀,那時候支付寶面臨最大的一個問題是業(yè)務(wù)變得越來越復(fù)雜,而工程師數(shù)量越來越多,原來的系統(tǒng)被稱為 monolithic——即龐大的單體系統(tǒng)的意思。這個系統(tǒng)慢慢變得無法裝載更多更復(fù)雜的業(yè)務(wù)邏輯,也不能讓那么多工程師在一起并行的工作。當(dāng)時,支付寶希望可以成百上千個項(xiàng)目并行進(jìn)行,而且每個工程師可以不受干擾的工作,而當(dāng)業(yè)務(wù)邏輯增加的時候,系統(tǒng)的復(fù)雜度不要成指數(shù)級上升。
所以,在 2006 年的時候,支付寶技術(shù)團(tuán)隊(duì)要做對未來的技術(shù)架構(gòu)做一個選擇,當(dāng)時有兩派意見:一派意見是向銀行老大哥學(xué),老大哥已經(jīng)走了十幾年,這條路一定是安全的;另一派意見是走一條新的路,即用分布式的架構(gòu)去支撐未來的交易支付系統(tǒng),而這條路在當(dāng)時還沒有人走過。這里的分布式架構(gòu),并不是客戶端 / 服務(wù)器時代的面向企業(yè)級的小規(guī)模分布式架構(gòu),而是在互聯(lián)網(wǎng)時代的超大規(guī)模分布式架構(gòu)。經(jīng)過差不多大概一年左右的討論和思考之后,支付寶團(tuán)隊(duì)做了一個決定,要走一條過去沒有人走過的路,于是啟動了支付寶第二代架構(gòu)的建設(shè),即支付寶技術(shù)系統(tǒng)的服務(wù)化。2007 年開始,支付寶啟動了對交易系統(tǒng)、商戶系統(tǒng)、會員系統(tǒng)、支付清算系統(tǒng)的改造。
就在那一年,支付寶到大連招聘遇到了胡喜(花名:阿璽),他之前已經(jīng)在前一家公司研究 SOA 以及 OSGi 相關(guān)技術(shù),于是就加入支付寶團(tuán)隊(duì),幫助程立做下一代架構(gòu)的轉(zhuǎn)變。胡喜回憶,他在 2007 年加入支付寶團(tuán)隊(duì)的時候,研發(fā)人員都比較痛苦。當(dāng)時的支付寶使用的是阿里巴巴的統(tǒng)一技術(shù)框架 WebX。WebX 是阿里自研發(fā)的一套基于 Java Servlet API 的通用 Web 框架,在阿里巴巴集團(tuán)內(nèi)部廣泛使用,2010 年底向社會開放源碼。WebX 比較偏向于前后端融合的架構(gòu),能快速搭建一個網(wǎng)站,但是沒有考慮到業(yè)務(wù)發(fā)展到一定程度后的復(fù)雜度,怎么更好的搭建后臺。例如,當(dāng)時支付寶的一個電子錢包系統(tǒng)叫 iWallet,每次系統(tǒng)啟動就得五六分鐘,開發(fā)人員出去抽根煙,回來后如果發(fā)現(xiàn)錯誤又得修改后重新啟動,開發(fā)人員每天不是在代碼編譯的過程當(dāng)中,就是重啟的過程當(dāng)中,一個系統(tǒng)包含了幾十個工程,十幾個團(tuán)隊(duì)并行開發(fā),項(xiàng)目并發(fā)也導(dǎo)致了很多的合并沖突和耗時,整個研發(fā)效率低下導(dǎo)致很難進(jìn)行下去。于是,從那開始就著手研究解決支付寶整個架構(gòu)的變化。
程立給當(dāng)時要做的這套分布式架構(gòu)起了一個“SOFA”的名字,其背后有兩個含義:一是按照當(dāng)時的技術(shù)趨勢,要做面向服務(wù)的架構(gòu),即 Service Oriented Architecture,但加入了金融業(yè)務(wù),所以是 Service Oriented Fabric Architecture;二是希望能夠像沙發(fā)一樣,讓工程師可以非常爽地工作。所以當(dāng)時出于這么簡單的考慮,就開始打造 SOFA。所謂 SOA 和服務(wù)化改造,就是把企業(yè)的 IT 系統(tǒng)以“服務(wù)”的方式重新組織起來,再通過“服務(wù)總線”連接起來形成可插拔式的企業(yè) IT 架構(gòu),這個架構(gòu)就是 SOA。這里要注意的是,SOA 其實(shí)是一套面向傳統(tǒng)企業(yè) IT 的架構(gòu)思想,而且在 SOA 早期則只有理論框架而無具體的成功實(shí)踐。
第一代的 SOFA 其實(shí)就解決兩個問題:一是當(dāng)要把系統(tǒng)變成分布式的時候,怎么有一個像“膠水”的機(jī)制也就是連接器,可以把分布式系統(tǒng)連接成一個整體;二是希望每一個服務(wù)本身是組件化,所以當(dāng)時第一代 SOFA 里采用了 OSGi(一套 Java 模塊化規(guī)范,允許應(yīng)用程序使用精煉、可重用和可協(xié)作的組件構(gòu)建),這樣每個工程師可以專注于各自的組件,最后又能夠把這些組件拼裝在一起成為“服務(wù)”,再把“服務(wù)”拼裝在一起成為整個大系統(tǒng)。這一整套框架,就是第一代 SOFA 框架。
有了第一代 SOFA 技術(shù)架構(gòu)之后,支付寶團(tuán)隊(duì)就開始做非常關(guān)鍵的業(yè)務(wù)服務(wù)改造。首先是把支付寶所有用戶的核心賬務(wù)系統(tǒng)變成一個業(yè)務(wù)服務(wù),從而可以和其它業(yè)務(wù)組裝起來。但是把賬務(wù)拆出來以后,遇到一個更難的問題:怎么解決分布式服務(wù)一致性的問題,也就是分布式事務(wù)問題。而在解決這個問題的時候,當(dāng)時支付寶團(tuán)隊(duì)冒了很大的風(fēng)險(xiǎn),在啟動這個項(xiàng)目的時候還并不清楚怎么解決最好,而當(dāng)時可以參考的行業(yè)技術(shù)趨勢就是 SOA 以及業(yè)界提出的幾個 SOA 框架。
SOA 業(yè)界那時候提出兩個 SOA 事務(wù)的標(biāo)準(zhǔn):一個是基于 Atomic Transaction(原子性交易),叫 WS-Atomic Transaction;另一個是基于業(yè)務(wù)流程編排的事務(wù),叫 WS-Business Activity;開源社區(qū)通過 JBoss 的 Transaction Server 實(shí)現(xiàn)了這兩個參考標(biāo)準(zhǔn)下的事務(wù)。當(dāng)時,支付寶的技術(shù)團(tuán)隊(duì)就在想,能否用 JBoss 開源技術(shù)與這兩個標(biāo)準(zhǔn)去構(gòu)建支付寶的核心交易和賬務(wù)?然而,項(xiàng)目開始后的不久,也就三個月左右的時間,當(dāng)項(xiàng)目進(jìn)行到一半的時候,發(fā)現(xiàn)這兩個當(dāng)時業(yè)界的標(biāo)準(zhǔn)和開源實(shí)現(xiàn)卻根本不可能支持一個實(shí)際的應(yīng)用。
原因很簡單,一個最簡單的核心交易系統(tǒng)和核心賬務(wù)系統(tǒng),進(jìn)行最簡單的一個事務(wù),也要經(jīng)過十幾次的消息傳遞,其中任何一次消息傳遞如果中斷,那么這個事務(wù)就失敗了,而且失敗以后,當(dāng)時業(yè)界的 SOA 標(biāo)準(zhǔn)并沒有提出該怎么恢復(fù)失敗的事務(wù),同時任何一次交易都經(jīng)過十幾次的消息傳遞的話,也導(dǎo)致整性能非常低。這樣一個系統(tǒng)如果最后發(fā)布的話,其實(shí)是不能支持支付寶當(dāng)時的交易量。所以當(dāng)項(xiàng)目進(jìn)行到一半的時候,團(tuán)隊(duì)就放棄了業(yè)界標(biāo)準(zhǔn)及其開源實(shí)現(xiàn),必須找到自己的一條路。
當(dāng)年,關(guān)于分布式事務(wù)的一致性,業(yè)界另一條路徑是基于兩階段事務(wù)標(biāo)準(zhǔn)(Prepare 階段與 Commit 階段)和開源分布式實(shí)現(xiàn) XA,但當(dāng)時已經(jīng)知道 PayPal 曾經(jīng)走過這條路,結(jié)果是導(dǎo)致系統(tǒng)宕機(jī)一周,最后系統(tǒng)全部回滾。
所以那個時候,支付寶技術(shù)團(tuán)隊(duì)就考慮能否自己提個標(biāo)準(zhǔn),這樣一來就簡單了:首先是要解決分布式一致性問題,必須要分布式的提交協(xié)議,這個協(xié)議如果在數(shù)據(jù)庫層實(shí)現(xiàn),效率會非常低下,因?yàn)閿?shù)據(jù)庫層不懂任何的業(yè)務(wù)邏輯,只能以一種通用的方式去實(shí)現(xiàn),從而導(dǎo)致無法對上層的業(yè)務(wù)邏輯層進(jìn)行優(yōu)化,所以就想到把提交協(xié)議放在服務(wù)層。
“那個時候,我們大的想法很簡單,既然支付寶系統(tǒng)已經(jīng)拆成了一個個非常小規(guī)模的服務(wù),那么就讓這個服務(wù)本身具備事務(wù)的屬性,叫事務(wù)性服務(wù)。這樣一個個小的事務(wù)性服務(wù)就像一個個小石頭一樣,可以裝到一個大的杯子里,然后再設(shè)計(jì)一個分布式的提交協(xié)議,把這一個個小的事務(wù)綁定成一個大的業(yè)務(wù)事務(wù)。而這個服務(wù)也不僅是微服務(wù),而其實(shí)是一個微交易,把每一個服務(wù)變成一個交易,再通過一個編排的框架,把每個交易變成一個大的整體服務(wù)?!背塘⒂帽容^形象的語言解釋了現(xiàn)在被稱為螞蟻金服黑科技的分布式事務(wù) XTS (eXtended Transaction Service) 的由來。
有了這個思路,當(dāng)時支付寶技術(shù)團(tuán)隊(duì)就開始去做了??朔牡谝粋€難點(diǎn)是把已經(jīng)有的交易服務(wù)、賬務(wù)服務(wù)等,變成一個個交易型服務(wù),這個難點(diǎn)當(dāng)時就突破了;第二個難點(diǎn)是要實(shí)現(xiàn)一個可擴(kuò)展(Scalable)的框架,去編排海量的事務(wù),那就是 XTS。大概在 2008 年 1 月份,SOFA 項(xiàng)目就上線了,上線以后至今不斷打磨,一直到現(xiàn)在還支撐螞蟻金服整個的業(yè)務(wù)交易。
SOFA 的演進(jìn)過程
從第一代到眼下的第五代,SOFA 的演進(jìn)過程其實(shí)是支付寶從最早的一個大型的業(yè)務(wù)與 IT 交織在一起的單體系統(tǒng),一邊拆金融業(yè)務(wù)系統(tǒng)(即后來的業(yè)務(wù)中臺)、一邊拆底層 IT 系統(tǒng)(即后來的數(shù)據(jù)中臺、計(jì)算中臺)的過程,在拆分的過程中還要解決新出現(xiàn)的可擴(kuò)展性、一致性問題等各種問題,同時不斷應(yīng)付每年都能擊穿系統(tǒng)極限的雙十一,還要把數(shù)據(jù)從原有系統(tǒng)一點(diǎn)一點(diǎn)“倒騰”到新系統(tǒng)里、同時管理新增的海量數(shù)據(jù),這樣一個極為復(fù)雜的過程是怎么進(jìn)行的?有趣的是,這個過程的附加值之一,就是在無意中完成了去“IOE”,因?yàn)閺膯误w系統(tǒng)拆分到互聯(lián)網(wǎng)分布式系統(tǒng),本身就是用 PC 服務(wù)器機(jī)房代替昂貴 IOE 設(shè)備的過程。
“整個過程可以說一路狂奔?!睏畋髞砘貞浾麄€過程?!啊}卜’就這么幾個,坑那么多,根本就填不過來的狀態(tài)。每個中間件產(chǎn)品連‘一個蘿卜一個坑’都做不到,很多‘蘿卜’是放在兩個三個坑里面的狀態(tài),你就想有多挑戰(zhàn)了。其次,每一年都是翻一番的業(yè)務(wù)指標(biāo)倒逼。整個團(tuán)隊(duì)的狀態(tài)基本上是一年大促結(jié)束后,春節(jié)一過就開始密集準(zhǔn)備下一年大促,一眨眼的功夫離雙十一就沒幾個月了,很多系統(tǒng)的技術(shù)改造可能要到 6、7 月份準(zhǔn)備好,再全部升級上去,業(yè)務(wù)還在不斷變化,不停有新的想法冒出來,每年就是這么個狀態(tài),基本都是開發(fā)飛機(jī)就把發(fā)動機(jī)給升級上去了。”
程立回憶,SOFA 早期的開發(fā)是完全違背項(xiàng)目管理邏輯,在項(xiàng)目推進(jìn)的過程中既有研發(fā)平臺又有研發(fā)上層的業(yè)務(wù)系統(tǒng),相當(dāng)于把很多風(fēng)險(xiǎn)都導(dǎo)在一個項(xiàng)目里面一起做,SOFA 第一代項(xiàng)目就是靠團(tuán)隊(duì)齊心協(xié)力,每天都會遇到新問題、每天都要去解決各種問題,但大家背后有必勝信念而且非常擁抱變化,敢于在項(xiàng)目的中后期把前期架構(gòu)決定全部推翻掉,再用一套新的架構(gòu)替代?!八缘?2008 年那次賬務(wù)三期的發(fā)布,那次原定發(fā)布 8 個小時,后來我們發(fā)布了 17 個小時,說明在項(xiàng)目發(fā)布過程中,還是有很多問題沒有解決,但最后我們硬生生把這個項(xiàng)目給發(fā)布下去,而且成功了,現(xiàn)在回想起來,其實(shí)是有一點(diǎn)后怕的?!背塘⑿φf。
2008 年之后,支付寶技術(shù)團(tuán)隊(duì)開始確定一個原則,即所有的發(fā)布不得停機(jī),必須要確保項(xiàng)目發(fā)布沒有風(fēng)險(xiǎn)。其次,要結(jié)束所有的研究型項(xiàng)目,技術(shù)研究要把技術(shù)問題解決了,再用到商業(yè)系統(tǒng)里面去。而且從 2008 年開始,每個新技術(shù)都不會首先用到最核心的系統(tǒng)里,而是會在相對邊緣的業(yè)務(wù)系統(tǒng)里經(jīng)過充分考驗(yàn)以后,再用到核心系統(tǒng)里。
在 SOFA 初期,可以看到做交易和賬務(wù)這兩個項(xiàng)目的時候,業(yè)務(wù)系統(tǒng)開發(fā)人員與技術(shù)平臺的開發(fā)人員是不分的,無論是程立還是胡喜,都是一會兒寫業(yè)務(wù)交易的代碼,一會兒寫下面的技術(shù)平臺代碼,工程師團(tuán)隊(duì)也沒有嚴(yán)格區(qū)分。后來開始建立中間件團(tuán)隊(duì),楊冰基本上也是那個時候加入,分配一部分人專門研究底層技術(shù),另一部分人專門寫上面的應(yīng)用系統(tǒng)架構(gòu),慢慢開始變得越來越正規(guī)了,包括對于新技術(shù)上線過程的灰度和控制,也會做得更好。
楊冰回憶他在 2009 年以剛畢業(yè)的研究生身份加入支付寶團(tuán)隊(duì)的時候,當(dāng)時服務(wù)化拆分的過程是程立、胡喜親自參與,一邊對 WebX 系統(tǒng)做服務(wù)化拆分,一邊胡喜寫了 SOFA 框架的原型,楊冰與后面加入的小伙伴就幫助不斷完善 SOFA。“當(dāng)時我們還很初級,基本上是程立和胡喜帶著我們?nèi)?shí)現(xiàn)他們構(gòu)想出來完整一套思想。當(dāng)時雖然服務(wù)化和 SOA 的概念很火,但業(yè)界的實(shí)踐遠(yuǎn)沒有現(xiàn)在這么豐富,很多實(shí)現(xiàn)機(jī)制都是摸著石頭過河。業(yè)務(wù)服務(wù)化拆分又是另外一條主線,當(dāng)時主要是程立、胡喜、倪行軍(花名苗人鳳,支付寶第一代首席架構(gòu)師,螞蟻金服支付寶事業(yè)群總裁)參與,這幾個人都是既寫框架代碼和組件代碼,又參與業(yè)務(wù)代碼拆分。當(dāng)時支付寶所有的業(yè)務(wù)都在演進(jìn),支付寶架構(gòu)團(tuán)隊(duì)一方面在業(yè)務(wù)邏輯拆分和技術(shù)架構(gòu)拆分的過程中熟悉支付寶的業(yè)務(wù),一方面在熟悉業(yè)務(wù)的基礎(chǔ)上思考如何從中抽象出可復(fù)用的代碼、數(shù)據(jù)和框架,以更好的支持未來的業(yè)務(wù)。所以當(dāng)時就是一邊在做業(yè)務(wù)和技術(shù)的人肉拆分,一邊又把拆分的部分挪到新的框架中去承載。整個過程不是設(shè)計(jì)好了再搞,而是一邊做一邊搞?!?/p>
XTS 框架都是在那樣一個過程當(dāng)中寫出來的。因?yàn)樵谠燃惺郊軜?gòu)是不會出現(xiàn)事務(wù)一致性的問題,拆分以后就出現(xiàn)了這樣的問題。當(dāng)問題出現(xiàn)以后,就一邊拆一邊解這個問題。當(dāng)然,解決的時候也不是人為介入,而是構(gòu)想出技術(shù)化的方案,甚至沉淀出來一套技術(shù)。那個時候,支付寶系統(tǒng)里的 Oracle 數(shù)據(jù)庫還在用,小型機(jī)等高端傳統(tǒng)設(shè)備都在用,支付寶的業(yè)務(wù)系統(tǒng)包括會員、交易等被拆分出來后,就直接跑在 X86 架構(gòu)上,這不僅是物理形態(tài)和部署形態(tài)上的差異,更是由單體應(yīng)用的開發(fā)模式變成 SOA 化的分布式開發(fā)模式,這就是從 WebX 到 SOFA 的演進(jìn)過程。賬務(wù)系統(tǒng)是最后一個從支付寶拆分下來的系統(tǒng),隨著賬務(wù)系統(tǒng)的拆分成功,IOE 設(shè)備也徹底從支付寶系統(tǒng)里下線。
在整個支付寶架構(gòu)的改造以及 SOFA 的發(fā)展過程中,關(guān)于中間件的基本構(gòu)成和思想是有業(yè)界參照的,比如消息中間件、數(shù)據(jù)中間件、事務(wù)中間件等,但 SOFA 技術(shù)團(tuán)隊(duì)要做面向超大規(guī)?;ヂ?lián)網(wǎng)金融交易的分布化改造,而其中的黑科技諸如單元化,則是被業(yè)務(wù)倒逼出來,完全沒有業(yè)界參考的實(shí)踐,“我們找到的一些論文,一些概念,一些類似的做法,但當(dāng)時支付寶的體量已經(jīng)很大了,沒有人確定這事兒真的能做成,而且是在金融這個高危的業(yè)務(wù)場景下”。
“套用螞蟻金服前 CEO 彭蕾的話,她曾提到過大家做的很多事情就是怎么把馬云的決定變成一個正確的決定,而我們在整個中間件工程實(shí)現(xiàn)過程中,也是類似的情況。比如 SOFA3 時代的合并部署,當(dāng)時胡喜提出這個概念的時候,內(nèi)部爭論非常大,大家都覺得這件事情不靠譜,而且很難做、非常復(fù)雜,阻力非常大。最難的事情,是說服團(tuán)隊(duì)。但最后大家還是為能做成這件事情,并為公司節(jié)省下這多成本而感到驕傲”楊冰回憶。
為了解決新的挑戰(zhàn),螞蟻金服的中間件技術(shù)團(tuán)隊(duì)想了各種辦法。楊冰為單元化架構(gòu)當(dāng)中 RPC 調(diào)用設(shè)計(jì)的路由邏輯:對于各種業(yè)務(wù)系統(tǒng),有的可以升級、有的可以改造、有的不行,那么在 RPC 遠(yuǎn)程服務(wù)調(diào)用時就會有五六種分支去決定到底是本地優(yōu)先、還是要跨機(jī)房、還是要根據(jù)業(yè)務(wù)的分庫分表做路由等等。這個邏輯極其復(fù)雜,在于既有同構(gòu)機(jī)房、又有異構(gòu)機(jī)房,而異構(gòu)機(jī)房又要把通訊收斂到一個代理,所以又會有代理的存在,導(dǎo)致非常復(fù)雜。而為了收管沒法升級的系統(tǒng),甚至該系統(tǒng)的負(fù)責(zé)人都已經(jīng)不在的情況,就用一個類似于 Service Mesh 技術(shù)代理,去“偽裝”這個服務(wù)?!罢麄€架構(gòu)是很漂亮的,但是工程實(shí)現(xiàn)中的每一個細(xì)節(jié)都很復(fù)雜,所有的設(shè)計(jì)都充滿了架構(gòu)的平衡的智慧。我們在實(shí)現(xiàn)整個過程以后,再慢慢把完全沒有必要的三四個路由邏輯去掉,變成比較規(guī)整的模式。基本是這樣的過程,因?yàn)椴荒馨阎Ц秾毻O聛??!?/p>
負(fù)責(zé)過 SOFA 體系中消息中間件的王磊(花名:文若)回憶,阿里從 2008 年開始辦雙十一,第一年只是試一下,所以沒有很大規(guī)模的宣傳,甚至連內(nèi)部很多人都不知道。從 2009 年是開始支付寶和淘寶一起參與雙十一,當(dāng)時宣傳淘寶商城里面所有的商品都是半價(jià),但是因?yàn)?2008 年時候?qū)﹄p十一的力量并沒有清楚的認(rèn)識,到 2009 年那一年的時候就突然出現(xiàn)了各種問題。王磊當(dāng)時負(fù)責(zé)消息中間件,內(nèi)部叫做 Message Broker,屬于消息隊(duì)列:消息從上游應(yīng)用通過消息中間件傳遞給下游的系統(tǒng),包括當(dāng)時還在使用的 Oracle 數(shù)據(jù)庫?!爱?dāng)時正在看這個活動的過程,甚至我們自己也在買東西的時候,突然 DBA 跑過來說要趕快對消息進(jìn)行限流,因?yàn)橄掠蔚臄?shù)據(jù)庫馬上就要撐不住了,數(shù)據(jù)庫的日志空間馬上就要耗光了,如果耗光就會導(dǎo)致數(shù)據(jù)庫宕機(jī),再啟動起來就是幾個小時以后的事情。當(dāng)時我們小組是三個人,以前從來沒有快速對消息進(jìn)行限流,最后就只能人工登錄上游應(yīng)用的服務(wù)器上,然后在服務(wù)器上敲命令做流量控制,一條一條的敲下去,最后保住了下游系統(tǒng)沒有被沖垮。那個時候很遺憾,因?yàn)椴皇强肯⒅虚g件去限流,實(shí)際上是把上游發(fā)消息的應(yīng)用‘殺’死了。后來,經(jīng)過這件事情以后,我們就下定決心要做一件事情,就是叫做一鍵限流,在中間件層面對于消息中心的一鍵限流能力,就是從那天開始建設(shè)的?!边@樣的故事還有很多?!罢麄€過程就像打怪升級,看到一個干掉一個?!蓖趵诘膶?shí)踐,代表了整個 SOFA 團(tuán)隊(duì)的工作狀態(tài),也代表了 SOFA 與其它互聯(lián)網(wǎng)分布式中間件的最大不同——沉淀了支付寶 / 螞蟻金服十多年來,整個業(yè)務(wù)與 IT 體系的最佳共享實(shí)踐。
就是這樣,SOFA 的演進(jìn)伴隨著支付寶整個架構(gòu)的演進(jìn)而發(fā)展,程立回憶,第一代 SOFA 比較簡單,只是搭了一個框架和模型讓系統(tǒng)可以運(yùn)行,到后期系統(tǒng)運(yùn)行中做了大量的優(yōu)化,包括要解決通訊的性能、最高效的容災(zāi)、異地容災(zāi)架構(gòu)的建設(shè)、單元化改造、LDC 邏輯數(shù)據(jù)中心項(xiàng)目等,所有這些慢慢就沉淀在 SOFA 里面。而 SOFA 則逐漸從解決分布式服務(wù)和分布式交易的問題,變成一個真正解決金融級系統(tǒng)構(gòu)建的基礎(chǔ)架構(gòu)問題,所以現(xiàn)在把 SOFA 改名,從原來的 Service Oriented Fabric Architecture 改為 Scalable Open Financial Architecture:這個框架是可以真正解決金融級系統(tǒng)的異地多活的容災(zāi)和擴(kuò)展問題,而且 SOFA 的可擴(kuò)展能力不僅是處理更多的交易,還可容納更多的業(yè)務(wù),能夠讓幾千位工程師甚至未來上萬個工程師一起協(xié)同工作的可擴(kuò)展架構(gòu);Open 的意思是希望這個框架相對可以讓業(yè)務(wù)應(yīng)用非常容易使用,又能與經(jīng)典架構(gòu)系統(tǒng)有機(jī)融合,SOFA 框架未來不但可以編排螞蟻金服工程師自己寫的業(yè)務(wù)邏輯,而且可以編排合作伙伴的業(yè)務(wù)邏輯,成為一個完整的編排框架;Financial 則意味著 SOFA 必須是具備金融級屬性,能真正實(shí)現(xiàn)金融級的一致性、可用性和穩(wěn)定性。
SOFA 的設(shè)計(jì)哲學(xué)
SOFA 從第一代發(fā)展到第五代,是一個異常復(fù)雜而龐大的過程,程立總結(jié) SOFA 的研發(fā)方法論和經(jīng)驗(yàn)時表示:在整個研發(fā)方法和流程上,螞蟻金服相對于來說是以互聯(lián)網(wǎng)的方式去做金融,因?yàn)槲浵伣鸱旧砭褪且粋€金融系統(tǒng),在要求非常嚴(yán)格的同時,也希望有互聯(lián)網(wǎng)的迭代速度,在這個過程中沉淀下來的經(jīng)驗(yàn)。
首先,注重架構(gòu)的治理。螞蟻金服一直有一個架構(gòu)師團(tuán)隊(duì),既有總架構(gòu)師團(tuán)隊(duì),同時又把各個分域的架構(gòu)師集合在一起,始終保持螞蟻金服的架構(gòu)在一張圖上。螞蟻金服架構(gòu)的迭代演進(jìn)也非常清晰,從一代、二代、三代、四代到現(xiàn)在的第五代架構(gòu),都有非常清晰的演進(jìn)階段,這是從治理層面進(jìn)行頂層設(shè)計(jì)的結(jié)果。
第二,關(guān)注技術(shù)的風(fēng)險(xiǎn)。螞蟻金服研發(fā)任何系統(tǒng),要比其它互聯(lián)網(wǎng)公司多付出可能 10% 的努力,去保證系統(tǒng)風(fēng)險(xiǎn)的可控,所以螞蟻金服技術(shù)風(fēng)險(xiǎn)管控是嵌到流程里面、控制在整個研發(fā)生命周期里面,從而實(shí)現(xiàn)了非常好的控制。當(dāng)然,螞蟻金服的研發(fā)效能團(tuán)隊(duì)也會把控,讓研發(fā)人員盡量簡單、盡量智能化。
第三,系統(tǒng)優(yōu)化是在高度分布化的前提下實(shí)現(xiàn)的。螞蟻金服是比較少有的、幾千人工作在一條業(yè)務(wù)流程上面,最核心支付流程從前端到后端分了很多層、每層里面有很多功能,在這個過程中能夠保證非常好的分布和集成效率以及質(zhì)量,就變得非常關(guān)鍵。所以從整個項(xiàng)目管理的需求、分析、分解,到每個團(tuán)隊(duì)去實(shí)現(xiàn),最后再做高效的集成、迭代發(fā)布,有非常多經(jīng)驗(yàn)沉淀在研發(fā)部署運(yùn)維平臺上。螞蟻金服的研發(fā)部署運(yùn)維平臺經(jīng)過多代的變化,有段時間也引進(jìn)了 IBM 等供應(yīng)商的整套方法和工具,用了兩年左右時間后發(fā)現(xiàn)完全不適合螞蟻金服工作方式和速度,所以轉(zhuǎn)向自研的平臺,并不斷輕量化。但也不是外界的開源模式,因?yàn)橐膊贿m用于螞蟻金服的情況。
第四,螞蟻金服中間件團(tuán)隊(duì)的另一個共識,Design for failure,即假定在任何情況下底層都有不可靠的風(fēng)險(xiǎn)存在。對金融 IT 系統(tǒng)來說,任何的底層硬件臨時故障或網(wǎng)絡(luò)抖動都有可能被放大到資金損失或整體服務(wù)穩(wěn)定性層面。對于支付寶這樣體量的互聯(lián)網(wǎng)應(yīng)用,從設(shè)計(jì)之初就把高可靠、高可用、高性能的能力要轉(zhuǎn)到中間件層和數(shù)據(jù)庫層去保證。下面的 IaaS 必須要簡單,就是允許底層硬件可以掛掉,掛掉以后由中間件和數(shù)據(jù)庫層負(fù)責(zé)。為什么會這么做?這是由業(yè)務(wù)的容忍程度決定的,沒法沉到底下的 IaaS 層,但也沒有必要讓每個寫業(yè)務(wù)代碼的人都自己編寫一套代碼,所以就沉淀到中間件層。
中間件會被所有人用到、會影響所有的系統(tǒng),像螞蟻金服現(xiàn)在有幾千個系統(tǒng)和上萬個微服務(wù)、幾千號研發(fā)人員,怎么能使在中間件層做的每一項(xiàng)工作都能使整體架構(gòu)都能平滑升級,而不要讓業(yè)務(wù)系統(tǒng)受影響,怎么建立跟其他開發(fā)人員之間的連接,如何平衡效率和運(yùn)維,這是中間件的挑戰(zhàn)。
被問到 SOFA 跟別的微服務(wù)平臺有什么不同,楊冰舉了個例子“如果有兩套架構(gòu)在頂層設(shè)計(jì)的時候,一套將平衡傾向了「成本最優(yōu)」,一套則傾向了「風(fēng)險(xiǎn)最小」,在實(shí)現(xiàn)過程中就會有千百次設(shè)計(jì)決策會依據(jù)這個大原則做出「架構(gòu)平衡」,到最后出來的架構(gòu)會完全不同,就像 CAP 理論中的平衡一樣,什么樣的業(yè)務(wù)決定著會孵化出什么樣的技術(shù),技術(shù)最終還是為業(yè)務(wù)服務(wù)的。
總 結(jié)
創(chuàng)新都是被逼出來的,螞蟻金服自研 SOFA 同樣如此。SOFA 走的是一條跟傳統(tǒng)金融行業(yè)不同的分布式架構(gòu)之路。要基于不可靠的硬件系統(tǒng)實(shí)現(xiàn)金融級的性能和可靠性,要應(yīng)對支付寶這樣的超大規(guī)模互聯(lián)網(wǎng)金融應(yīng)用,有很多難題要解決。螞蟻金服構(gòu)建了一整套處理金融級交易的分布式架構(gòu)與平臺,在金融級的一致性要求和海量并發(fā)處理能力上達(dá)到了很好的平衡,并在快速容災(zāi)恢復(fù)、彈性伸縮能力、多地多活高可用保證能力和按需供給的精細(xì)化資源調(diào)度能力方面沉淀了豐富的實(shí)踐經(jīng)驗(yàn)。
隨著 2015 年科技開放戰(zhàn)略的啟動,螞蟻金服技術(shù)的團(tuán)隊(duì)面對的不僅僅是內(nèi)部業(yè)務(wù),還有更加復(fù)雜多變的外部業(yè)務(wù)場景和技術(shù)挑戰(zhàn)。以前,技術(shù)團(tuán)隊(duì)是一個被被業(yè)務(wù)倒逼的支持型組織,現(xiàn)在已經(jīng)逐步向一個驅(qū)動業(yè)務(wù)的學(xué)習(xí)型組織和創(chuàng)新型組織轉(zhuǎn)變?!白蛱斓淖詈帽憩F(xiàn)是今天最低的要求,由于雙 11 在技術(shù)上已經(jīng)成為常態(tài)化工作,滿足交易業(yè)務(wù)已經(jīng)成為了最基本的要求,所以我們要看到更遠(yuǎn)的未來、準(zhǔn)備迎接更強(qiáng)的挑戰(zhàn)?!睏畋脑?,從一個側(cè)面解釋了螞蟻金服技術(shù)團(tuán)隊(duì)對開拓更遼闊數(shù)字金融世界邊界的期待。