每年“雙11”都是一場電商盛會豪娜,消費(fèi)者狂歡日餐胀。今年雙11的意義尤為重大,它已經(jīng)發(fā)展成為全世界電商和消費(fèi)者都參與進(jìn)來的盛宴瘤载。而對技術(shù)人員來說否灾,雙十一無疑已經(jīng)成為一場大考,考量的角度是整體架構(gòu)鸣奔、基礎(chǔ)中間件墨技、運(yùn)維工具、人員等挎狸。
一次成功的大促準(zhǔn)備不光是針對活動(dòng)本身對系統(tǒng)和架構(gòu)做的優(yōu)化措施扣汪,比如:流量控制,緩存策略锨匆,依賴管控崭别,性能優(yōu)化……更是與長時(shí)間的技術(shù)積累和打磨分不開。下面我將簡單介紹支付寶的整體架構(gòu)恐锣,讓大家有個(gè)初步認(rèn)識茅主,然后會以本次在大促中大放異彩的“螞蟻花唄”為例,大致介紹一個(gè)新業(yè)務(wù)是如何從頭開始準(zhǔn)備大促的土榴。
支付寶的架構(gòu)設(shè)計(jì)上應(yīng)該考慮到互聯(lián)網(wǎng)金融業(yè)務(wù)的特殊性诀姚,比如要求更高的業(yè)務(wù)連續(xù)性,更好的高擴(kuò)展性鞭衩,更快速的支持新業(yè)務(wù)發(fā)展等特點(diǎn)学搜。目前其架構(gòu)如下:
整個(gè)平臺被分成了三個(gè)層:
運(yùn)維平臺(IAAS):主要提供基礎(chǔ)資源的可伸縮性,比如網(wǎng)絡(luò)论衍、存儲瑞佩、數(shù)據(jù)庫、虛擬化坯台、IDC等炬丸,保證底層系統(tǒng)平臺的穩(wěn)定性;
技術(shù)平臺(PAAS):主要提供可伸縮蜒蕾、高可用的分布式事務(wù)處理和服務(wù)計(jì)算能力稠炬,能夠做到彈性資源的分配和訪問控制,提供一套基礎(chǔ)的中間件運(yùn)行環(huán)境咪啡,屏蔽底層資源的復(fù)雜性首启;
業(yè)務(wù)平臺(SAAS):提供隨時(shí)隨地高可用的支付服務(wù),并且提供一個(gè)安全易用的開放支付應(yīng)用開發(fā)平臺撤摸。
邏輯數(shù)據(jù)中心架構(gòu)
在雙十一大促當(dāng)天業(yè)務(wù)量年年翻番的情況下毅桃,支付寶面臨的考驗(yàn)也越來越大:系統(tǒng)的容量越來越大褒纲,服務(wù)器、網(wǎng)絡(luò)钥飞、數(shù)據(jù)庫莺掠、機(jī)房都隨之?dāng)U展,這帶來了一些比較大的問題读宙,比如系統(tǒng)規(guī)模越來越大彻秆,系統(tǒng)的復(fù)雜度越來越高,以前按照點(diǎn)的伸縮性架構(gòu)無法滿足要求结闸,需要我們有一套整體性的可伸縮方案唇兑,可以按照一個(gè)單元的維度進(jìn)行擴(kuò)展。能夠提供支持異地伸縮的能力膀估,提供N+1的災(zāi)備方案幔亥,提供整體性的故障恢復(fù)體系〔齑浚基于以上幾個(gè)需求帕棉,我們提出了邏輯數(shù)據(jù)中心架構(gòu),核心思想是把數(shù)據(jù)水平拆分的思路向上層提到接入層饼记、終端香伴, 從接入層開始把系統(tǒng)分成多個(gè)單元,單元有幾個(gè)特性:
每個(gè)單元對外是封閉的具则,包括系統(tǒng)間交換各類存儲的訪問;
每個(gè)單元的實(shí)時(shí)數(shù)據(jù)是獨(dú)立的即纲,不共享。而會員或配置類對延時(shí)性要求不高的數(shù)據(jù)可共享;
單元之間的通信統(tǒng)一管控博肋,盡量走異步化消息低斋。同步消息走單元代理方案;
下面是支付寶邏輯機(jī)房架構(gòu)的概念圖:
這套架構(gòu)解決了幾個(gè)關(guān)鍵問題:
由于盡量減少了跨單元交互和使用異步化匪凡,使得異地部署成為可能膊畴。整個(gè)系統(tǒng)的水平可伸縮性大大提高,不再依賴同城IDC病游;
可以實(shí)現(xiàn)N+1的異地災(zāi)備策略唇跨,大大縮減災(zāi)備成本,同時(shí)確保災(zāi)備設(shè)施真實(shí)可用衬衬;
整個(gè)系統(tǒng)已無單點(diǎn)存在买猖,大大提升了整體的高可用性;同城和異地部署的多個(gè)單元可用作互備的容災(zāi)設(shè)施滋尉,通過運(yùn)維管控平臺進(jìn)行快速切換玉控,有機(jī)會實(shí)現(xiàn)100%的持續(xù)可用率;
該架構(gòu)下業(yè)務(wù)級別的流量入口和出口形成了統(tǒng)一的可管控狮惜、可路由的控制點(diǎn)奸远,整體系統(tǒng)的可管控能力得到很大提升既棺》硇基于該架構(gòu)懒叛,線上壓測、流量管控耽梅、灰度發(fā)布等以前難以實(shí)現(xiàn)的運(yùn)維管控模式薛窥,現(xiàn)在能夠十分輕松地實(shí)現(xiàn)。
目前新架構(gòu)的同城主體框架在2013年已經(jīng)完成眼姐,并且順利的面對了雙十一的考驗(yàn)诅迷,讓整套架構(gòu)的落地工作得到了很好的證明。
在2015年完成了基于邏輯機(jī)房众旗,異地部署的“異地多活”的架構(gòu)落地罢杉。“異地多活”架構(gòu)是指贡歧,基于邏輯機(jī)房擴(kuò)展能力滩租,在不同的地域IDC部署邏輯機(jī)房,并且每個(gè)邏輯機(jī)房都是“活”的利朵,真正承接線上業(yè)務(wù)律想,在發(fā)生故障的時(shí)候可以快速進(jìn)行邏輯機(jī)房之間的快速切換。
這比傳統(tǒng)的“兩地三中心”架構(gòu)有更好的業(yè)務(wù)連續(xù)性保障绍弟。在“異地多活”的架構(gòu)下技即,一個(gè)IDC對應(yīng)的故障容災(zāi)IDC是一個(gè)“活”的IDC,平時(shí)就承接著正常線上業(yè)務(wù)樟遣,保證其穩(wěn)定性和業(yè)務(wù)的正確性是一直被確保的而叼。
以下是支付寶“異地多活”架構(gòu)示意圖:
除了更好的故障應(yīng)急能力之外,基于邏輯機(jī)房我們又具備的“藍(lán)綠發(fā)布”或者說“灰度發(fā)布”的驗(yàn)證能力豹悬。我們把單個(gè)邏輯機(jī)房(后續(xù)簡稱LDC)內(nèi)部又分成A葵陵、B兩個(gè)邏輯機(jī)房,A 屿衅、B機(jī)房在功能上完全對等埃难。日常情況下,調(diào)用請求按照對等概率隨機(jī)路由到A或B 涤久。當(dāng)開啟藍(lán)綠模式時(shí)涡尘,上層路由組件會調(diào)整路由計(jì)算策略,隔離A與B之間的調(diào)用响迂, A組內(nèi)應(yīng)用只能相互訪問考抄,而不會訪問B組。
然后進(jìn)行藍(lán)綠發(fā)布流程大致如下:
Step1. 發(fā)布前蔗彤,將“藍(lán)”流量調(diào)至0%川梅,對“藍(lán)”的所有應(yīng)用整體無序分2組發(fā)布疯兼。
Step2. “藍(lán)”引流1%觀察,如無異常贫途,逐步上調(diào)分流比例至100%吧彪。
Step3. “綠”流量為0%,對“綠”所有應(yīng)用整體無序分2組發(fā)布丢早。
Step4. 恢復(fù)日常運(yùn)行狀態(tài)姨裸,藍(lán)、綠單元各承擔(dān)線上50%的業(yè)務(wù)流量怨酝。
支付寶在2015年雙十一當(dāng)天的高峰期間處理支付峰值8.59萬筆/秒傀缩,已經(jīng)是國際第一大系統(tǒng)支付。支付寶已經(jīng)是全球最大的OLTP處理者之一农猬,對事務(wù)的敏感使支付寶的數(shù)據(jù)架構(gòu)有別于其他的互聯(lián)網(wǎng)公司赡艰,卻繼承了互聯(lián)網(wǎng)公司特有的巨大用戶量,最主要的是支付寶對交易的成本比傳統(tǒng)金融公司更敏感斤葱,所以支付寶數(shù)據(jù)架構(gòu)發(fā)展慷垮,就是一部低成本、線性可伸縮苦掘、分布式的數(shù)據(jù)架構(gòu)演變史换帜。
現(xiàn)在支付寶的數(shù)據(jù)架構(gòu)已經(jīng)從集中式的小型機(jī)和高端存儲升級到了分布式PC服務(wù)解決方案,整體數(shù)據(jù)架構(gòu)的解決方案盡量做到無廠商依賴鹤啡,并且標(biāo)準(zhǔn)化惯驼。
支付寶分布式數(shù)據(jù)架構(gòu)可伸縮策略主要分為三個(gè)維度:
按照業(yè)務(wù)類型進(jìn)行垂直拆分
按照客戶請求進(jìn)行水平拆分(也就是常說的數(shù)據(jù)的sharding策略)
對于讀遠(yuǎn)遠(yuǎn)大于寫的數(shù)據(jù)進(jìn)行讀寫分離和數(shù)據(jù)復(fù)制處理
下圖是支付寶內(nèi)部交易數(shù)據(jù)的可伸縮性設(shè)計(jì):
交易系統(tǒng)的數(shù)據(jù)主要分為三個(gè)大數(shù)據(jù)庫集群:
主交易數(shù)據(jù)庫集群,每一筆交易創(chuàng)建和狀態(tài)的修改首先在這?完成递瑰,產(chǎn)生的變更再通過可靠數(shù)據(jù)復(fù)制中心復(fù)制到其他兩個(gè)數(shù)據(jù)庫集群:消費(fèi)記錄數(shù)據(jù)庫集群祟牲、商戶查詢數(shù)據(jù)庫集群。該數(shù)據(jù)庫集群的數(shù)據(jù)被水平拆分成多份抖部,為了同時(shí)保證可伸縮性和高可靠性说贝,每一個(gè)節(jié)點(diǎn)都會有與之對應(yīng)的備用節(jié)點(diǎn)和failover節(jié)點(diǎn),在出現(xiàn)故障的時(shí)候可以在秒級內(nèi)切換到failover節(jié)點(diǎn)慎颗。
消費(fèi)記錄數(shù)據(jù)庫集群乡恕,提供消費(fèi)者更好的用戶體驗(yàn)和需求;
商戶查詢數(shù)據(jù)庫集群俯萎,提供商戶更好的用戶體驗(yàn)和需求傲宜;
對于分拆出來的各個(gè)數(shù)據(jù)節(jié)點(diǎn),為了保證對上層應(yīng)用系統(tǒng)的透明夫啊,我們研發(fā)一套數(shù)據(jù)中間產(chǎn)品來保證交易數(shù)據(jù)做到彈性擴(kuò)容函卒。
分布式數(shù)據(jù)架構(gòu)下,在保證事務(wù)原有的ACID(原子性撇眯、一致性报嵌、隔離性虱咧、持久性)特性的基礎(chǔ)上,還要保證高可用和可伸縮性锚国,挑戰(zhàn)非常大腕巡。試想你同時(shí)支付了兩筆資金,這兩筆資金的事務(wù)如果在分布式環(huán)境下相互影響跷叉,在其中一筆交易資金回滾的情況下逸雹,還會影響另外一筆是多么不能接受的情況。
根據(jù)CAP和BASE原則云挟,再結(jié)合支付寶系統(tǒng)的特點(diǎn),我們設(shè)計(jì)了一套基于服務(wù)層面的分布式事務(wù)框架转质,他支持兩階段提交協(xié)議园欣,但是做了很多的優(yōu)化,在保證事務(wù)的ACID原則的前提下休蟹,確保事務(wù)的最終一致性 沸枯。我們叫做“柔性事物”策略。原理如下:
以下是分布式事務(wù)框架的流程圖:
實(shí)現(xiàn):
一個(gè)完整的業(yè)務(wù)活動(dòng)由一個(gè)主業(yè)務(wù)服務(wù)與若干從業(yè)務(wù)服務(wù)組成赂弓。
主業(yè)務(wù)服務(wù)負(fù)責(zé)發(fā)起并完成整個(gè)業(yè)務(wù)活動(dòng)绑榴。
從業(yè)務(wù)服務(wù)提供TCC型業(yè)務(wù)操作。
業(yè)務(wù)活動(dòng)管理器控制業(yè)務(wù)活動(dòng)的一致性盈魁,它登記業(yè)務(wù)活動(dòng)中的操作翔怎,并在活動(dòng)提交時(shí)確認(rèn)所有的兩階段事務(wù)的confirm操作,在業(yè)務(wù)活動(dòng)取消時(shí)調(diào)用所有兩階段事務(wù)的cancel操作杨耙〕嗵祝”
與2PC協(xié)議比較:
沒有單獨(dú)的Prepare階段,降低協(xié)議成本
系統(tǒng)故障容忍度高珊膜,恢復(fù)簡單
其中關(guān)鍵組件異步可靠消息策略如下:
其中一些關(guān)鍵設(shè)計(jì)點(diǎn):
若在第2容握、3、4步出現(xiàn)故障车柠,業(yè)務(wù)系統(tǒng)自行決定回滾還是另起補(bǔ)償機(jī)制剔氏;若在第6、7步出現(xiàn)異常竹祷,消息中心需要回查生產(chǎn)者谈跛;若在第8步出現(xiàn)異常,消息中心需要重試溶褪。第6步的確認(rèn)消息由消息中心組件封裝币旧,應(yīng)用系統(tǒng)無需感知。
此套機(jī)制保障了消息數(shù)據(jù)的完整性猿妈,進(jìn)而保障了與通過異步可靠消息通訊的系統(tǒng)數(shù)據(jù)最終一致性吹菱。
某些業(yè)務(wù)的前置檢查巍虫,需要消息中心提供指定條件回查機(jī)制。
針對上面的技術(shù)我特意整理了一下鳍刷,有很多技術(shù)不是靠幾句話能講清楚占遥,所以干脆找朋友錄制了一些視頻,很多問題其實(shí)答案很簡單输瓜,但是背后的思考和邏輯不簡單瓦胎,要做到知其然還要知其所以然。如果想學(xué)習(xí)Java工程化尤揣、高性能及分布式搔啊、深入淺出。微服務(wù)北戏、Spring负芋,MyBatis,Netty源碼分析的朋友可以加我的Java進(jìn)階群:694549689嗜愈,群里有阿里大牛直播講解技術(shù)旧蛾,以及Java大型互聯(lián)網(wǎng)技術(shù)的視頻免費(fèi)分享給大家。
螞蟻花唄是今年增加的一個(gè)新支付工具蠕嫁,“確認(rèn)收貨后锨天、下月還”的支付體驗(yàn)受到了越來越多的消費(fèi)者信賴。跟余額和余額寶一樣剃毒,螞蟻花唄避開了銀行間的交易鏈路病袄,最大限度避免支付時(shí)的擁堵。據(jù)官方數(shù)據(jù)披露迟赃,在今天的雙十一大促中陪拘,螞蟻花唄支付成功率達(dá)到99.99%、平均每筆支付耗時(shí)0.035秒纤壁,和各大銀行渠道一起確保了支付的順暢左刽。
螞蟻花唄距今發(fā)展不到一年,但發(fā)展速度非匙妹剑快欠痴。從上線初期的10筆/秒的支付量發(fā)展到雙十一當(dāng)天峰值2.1w筆/秒。支撐螞蟻花唄業(yè)務(wù)發(fā)展的技術(shù)體系經(jīng)過不斷演進(jìn)秒咨、已經(jīng)完全依托于螞蟻金服的金融云架構(gòu)喇辽。
在2014年12月,螞蟻花唄團(tuán)隊(duì)完成業(yè)務(wù)系統(tǒng)優(yōu)化雨席,按照標(biāo)準(zhǔn)將系統(tǒng)架設(shè)到了金融云上菩咨,依次對接了渠道層、業(yè)務(wù)層、核心平臺層、數(shù)據(jù)層,使得用戶對螞蟻花唄在營銷乃摹、下單和支付整個(gè)過程中體驗(yàn)統(tǒng)一。
2015年4月是目,螞蟻花唄系統(tǒng)同步金融云的單元化的建設(shè),即LDC标捺,使得數(shù)據(jù)和應(yīng)用走向異地成為了現(xiàn)實(shí)懊纳,具備了較好的擴(kuò)展性和流量管控能力。在可用性方面亡容,與金融云賬務(wù)體系深度結(jié)合嗤疯,借用賬務(wù)系統(tǒng)的failover能力,使得螞蟻花唄通過低成本改造就具備了同城災(zāi)備萍倡、異地災(zāi)備等高可用能力身弊。任何一個(gè)單元的數(shù)據(jù)庫出了問題、能夠快速進(jìn)行容災(zāi)切換列敲、不會影響這個(gè)單元的用戶進(jìn)行螞蟻花唄支付。在穩(wěn)定性方面帖汞,借助于云客戶平臺的高穩(wěn)定性的能力戴而,將螞蟻花唄客戶簽約形成的合約數(shù)據(jù)遷移進(jìn)去,并預(yù)先寫入云客戶平臺的緩存中翩蘸,在大促高峰期緩存的命中率達(dá)到100%所意。同時(shí),結(jié)合全鏈路壓測平臺催首,對螞蟻花唄進(jìn)行了能力摸高和持續(xù)的穩(wěn)定性測試扶踊,發(fā)現(xiàn)系統(tǒng)的性能點(diǎn)反復(fù)進(jìn)行優(yōu)化,使得大促當(dāng)天系統(tǒng)平穩(wěn)運(yùn)行郎任。在之前的架構(gòu)中秧耗,系統(tǒng)的秒級處理能力無法有效衡量,通過簡單的引流壓測無法得到更加準(zhǔn)確舶治、可信的數(shù)據(jù)分井。立足于金融云,系統(tǒng)很快通過全鏈路壓測得到了每秒處理4w筆支付的穩(wěn)定能力霉猛。
螞蟻花唄業(yè)務(wù)中最為關(guān)鍵的一環(huán)在于買家授信和支付風(fēng)險(xiǎn)的控制尺锚。從買家下單的那一刻開始,后臺便開始對虛假交易惜浅、限額限次瘫辩、套現(xiàn)、支用風(fēng)險(xiǎn)等風(fēng)險(xiǎn)模型進(jìn)行并行計(jì)算,這些模型最終將在20ms以內(nèi)完成對僅百億數(shù)據(jù)的計(jì)算和判定伐厌,能夠在用戶到達(dá)收銀臺前確定這筆交易是否存在潛在風(fēng)險(xiǎn)承绸。
為了保證螞蟻花唄雙11期間的授信資金充足,在金融云體系下搭建了機(jī)構(gòu)資產(chǎn)中心弧械,對接支付清算平臺八酒,將表內(nèi)的信貸資產(chǎn)打包形成一個(gè)一定期限的資產(chǎn)池,并以這個(gè)資產(chǎn)池為基礎(chǔ)刃唐,發(fā)行可交易證券進(jìn)行融資羞迷,即通過資產(chǎn)轉(zhuǎn)讓的方式獲得充足資金,通過這一創(chuàng)新確保了用戶能夠通過花唄服務(wù)順利完成交易画饥,并分流對銀行渠道的壓力衔瓮。通過資產(chǎn)證券化運(yùn)作,不僅幫助100多萬小微企業(yè)實(shí)現(xiàn)融資抖甘,也支撐了螞蟻花唄用戶的消費(fèi)信貸需求热鞍。螞蟻小貸的資產(chǎn)證券化業(yè)務(wù)平臺可達(dá)到每小時(shí)過億筆、總規(guī)模數(shù)十億元級別的資產(chǎn)轉(zhuǎn)讓衔彻。
經(jīng)過這么多年的高可用架構(gòu)和大促的準(zhǔn)備工作薇宠,螞蟻金融技術(shù)團(tuán)隊(duì)可以做到“先勝而后求戰(zhàn)”,主要分為三方面技術(shù)積累:“謀”艰额,“器”澄港,“將”。
“謀”就是整體的架構(gòu)設(shè)計(jì)方案和策略柄沮;
“器”就是支持技術(shù)工作的各種基礎(chǔ)中間件和基礎(chǔ)組件回梧;
“將”就是通過實(shí)踐鍛煉成長起來的技術(shù)人員。
縱觀現(xiàn)在各種架構(gòu)分享祖搓,大家喜歡談“謀”的方面較多狱意,各種架構(gòu)設(shè)計(jì)方案優(yōu)化策略分享,但實(shí)際最后多是兩種情況:“吹的牛X根本沒被證實(shí)過”(各種框架能力根本沒經(jīng)過實(shí)際考驗(yàn)拯欧,只是一紙空談)详囤,“吹過的牛X一經(jīng)實(shí)際考驗(yàn)就破了”(說的設(shè)計(jì)理念很好,但是一遇到實(shí)際的大業(yè)務(wù)的沖擊系統(tǒng)就掛了)哈扮,最后能成功的少之又少纬纪。這些說明雖然架構(gòu)上的“心靈雞湯”和“成功學(xué)”技術(shù)人員都已經(jīng)熟的不行,但是發(fā)現(xiàn)一到實(shí)踐其實(shí)根本不是那么回事滑肉。從此可以看出包各,其實(shí)最后起決定作用的不是 “謀”方面的理論層面的分析設(shè)計(jì),最重要的是落地“器”和“將”的層面靶庙。有過硬高穩(wěn)定性的各種基礎(chǔ)設(shè)施工具的和身經(jīng)百戰(zhàn)被“虐了千百次”的技術(shù)人員的支撐才是最后取勝的關(guān)鍵问畅。而這個(gè)兩個(gè)層面的問題是不能通過分享學(xué)到的,是要通過日積月累的,無數(shù)流血流淚趟雷中招鍛煉出來的护姆,沒有近路可抄矾端。
而目前從業(yè)務(wù)和市場的發(fā)展形勢來看,往往就是需要技術(shù)在某個(gè)特定時(shí)間有個(gè)質(zhì)的能力的提升和飛躍卵皂,不會給你太多的準(zhǔn)備技術(shù)架構(gòu)提升的時(shí)間秩铆,在技術(shù)積累和人員儲備都不足的時(shí)候,如何構(gòu)建平臺能力灯变,把更多的精力放在業(yè)務(wù)相關(guān)的開發(fā)任務(wù)中殴玛,是每個(gè)技術(shù)團(tuán)隊(duì)的希望得到的能力 。
過去我們是通過某個(gè)開源或者商業(yè)組件來實(shí)現(xiàn)技術(shù)共享得到快速解決謀發(fā)展技術(shù)的能力的添祸,但是隨著業(yè)務(wù)復(fù)雜性滚粟,專業(yè)性,規(guī)模的逐步變大刃泌,這種方式的缺點(diǎn)也是顯而易見的:1凡壤、很多組件根本無法滿足大并發(fā)場景下的各種技術(shù)指標(biāo);2耙替、隨著業(yè)務(wù)的復(fù)雜和專業(yè)性的提高亚侠,沒有可以直接使用的開源組件;3俗扇、“人”本身的經(jīng)驗(yàn)和能力是無法傳遞的盖奈。
所以現(xiàn)在我們通過“云”分享的技術(shù)和業(yè)務(wù)的能力的方式也發(fā)展的越來越快,這就我們剛才介紹的“螞蟻花唄”技術(shù)用幾個(gè)月的時(shí)間快速的成功的達(dá)到“從上線初期的10筆/秒的支付量發(fā)展到雙十一當(dāng)天峰值2.1w筆/秒狐援,快速走完了別人走了幾年都可能達(dá)不到的能力。類似的例子還有大家熟知的“余額寶”系統(tǒng)究孕。
這些都是建立在原來螞蟻金服用了10年打磨的基礎(chǔ)組件和技術(shù)人員經(jīng)驗(yàn)的云服務(wù)上的啥酱,通過目前基于這種能力,我們目前可以快速給內(nèi)部和外部的客戶組建厨诸,高可用镶殷、安全、高效微酬、合規(guī)的金融云服務(wù)架構(gòu)下的系統(tǒng)绘趋。