高可用和容災(zāi)架構(gòu)的意義
企業(yè)服務(wù)、云計(jì)算、移動(dòng)互聯(lián)網(wǎng)領(lǐng)域中,高可用的分布式技術(shù)為支撐平臺(tái)正常運(yùn)作提供著關(guān)鍵性的技術(shù)支撐。從用戶(hù)角度,特別是作為主要收入來(lái)源的企業(yè)用戶(hù)的角度出發(fā),保證業(yè)務(wù)處理的正確性和服務(wù)不中斷(高可用性)是支撐用戶(hù)信心的重要來(lái)源。高性能,高可用的分布式架構(gòu)就成了訪問(wèn)量高峰期時(shí),網(wǎng)站得以成功運(yùn)維的關(guān)鍵。
在當(dāng)今信息時(shí)代,數(shù)據(jù)和信息逐漸成為各行各業(yè)的業(yè)務(wù)基礎(chǔ)和命脈。當(dāng)企業(yè)因?yàn)樾畔⒒瘞?lái)快捷的服務(wù)決策和方便管理時(shí),也必須面對(duì)著數(shù)據(jù)丟失的危險(xiǎn)。
容災(zāi)系統(tǒng),作為為計(jì)算機(jī)信息系統(tǒng)提供的一個(gè)能應(yīng)付各種災(zāi)難的環(huán)境,尤其是計(jì)算機(jī)犯罪、計(jì)算機(jī)病毒、掉電、網(wǎng)絡(luò)/通信失敗、硬件/軟件錯(cuò)誤和人為操作錯(cuò)誤等人為災(zāi)難時(shí),容災(zāi)系統(tǒng)將保證用戶(hù)數(shù)據(jù)的安全性(數(shù)據(jù)容災(zāi)),甚至,一個(gè)更加完善的容災(zāi)系統(tǒng),還能提供不間斷的應(yīng)用服務(wù)(應(yīng)用容災(zāi))。可以說(shuō),容災(zāi)系統(tǒng)是數(shù)據(jù)存儲(chǔ)備份的最高層次。
每年的“雙11”、“雙12”都是全球購(gòu)物者的狂歡節(jié),今年的雙11有232個(gè)國(guó)家參與進(jìn)來(lái),成為名副其實(shí)的全球瘋狂購(gòu)物節(jié)。11月11日,全天的交易額達(dá)到912.17億元,其中在移動(dòng)端交易額占比68%今年每秒的交易峰值達(dá)到14萬(wàn)筆,螞蟻金服旗下的支付寶交易峰值達(dá)到8.59萬(wàn)筆/秒,這一系列的數(shù)字,考驗(yàn)的是支付寶背后強(qiáng)大的IT支持能力。而持續(xù)可用和快速容災(zāi)切換的能力,是支付寶技術(shù)人員追求的極致目標(biāo)。
在架構(gòu)設(shè)計(jì)中,作為系統(tǒng)高可用性技術(shù)的重要組成部分,容災(zāi)設(shè)計(jì)強(qiáng)調(diào)的是系統(tǒng)對(duì)外界環(huán)境影響具備快速響應(yīng)能力,尤其是當(dāng)發(fā)生災(zāi)難性事件并對(duì)IDC節(jié)點(diǎn)產(chǎn)生影響時(shí),能夠具備節(jié)點(diǎn)級(jí)別的快速恢復(fù)能力,保障系統(tǒng)的持續(xù)可用。2015年12月18日,年度高端技術(shù)盛會(huì):“全球架構(gòu)師峰會(huì)——ArchSummit”在北京國(guó)際會(huì)議中心隆重召開(kāi),會(huì)上,阿里巴巴高級(jí)系統(tǒng)工程師:善衡(曾歡)結(jié)合互聯(lián)網(wǎng)金融業(yè)務(wù)及系統(tǒng)特性,分享了在支付寶系統(tǒng)架構(gòu)演進(jìn)中,每個(gè)階段的高可用和容災(zāi)能力建設(shè)的解決思路。本文由其演講內(nèi)容整理而成。
支付寶的系統(tǒng)架構(gòu),其發(fā)展歷程可以分為清晰的3個(gè)階段,每一個(gè)階段都有自己獨(dú)特的特點(diǎn)和架構(gòu)上相應(yīng)的痛點(diǎn)。在每一個(gè)階段的發(fā)展過(guò)程中,支付寶的技術(shù)人員針對(duì)不同的問(wèn)題進(jìn)行諸多的思考,在解決這些問(wèn)題的過(guò)程中也做了諸多的嘗試。
純真:童年時(shí)期2004年~2011年
在此階段,支付寶的系統(tǒng)架構(gòu)相對(duì)比較簡(jiǎn)化,如圖1所示,通過(guò)商用LB讓用戶(hù)的流量進(jìn)到入口網(wǎng)關(guān)系統(tǒng),支付寶的系統(tǒng)服務(wù)暴露也通過(guò)商用設(shè)備掛在VIP下,每個(gè)提供服務(wù)的應(yīng)用機(jī)器通過(guò)VIP來(lái)進(jìn)行負(fù)載均衡。早期支付寶的核心系統(tǒng)庫(kù)都在一個(gè)數(shù)據(jù)庫(kù)上(后期拆為多個(gè)數(shù)據(jù)庫(kù)),即每個(gè)核心系統(tǒng)都只用單獨(dú)的數(shù)據(jù)庫(kù)。在這樣一個(gè)“物理上多機(jī)房,邏輯上單機(jī)房”的架構(gòu)背后,每天的業(yè)務(wù)量?jī)H僅為數(shù)十萬(wàn)級(jí),應(yīng)用系統(tǒng)也只有數(shù)十個(gè),容災(zāi)能力相對(duì)較低:例如單應(yīng)用出現(xiàn)問(wèn)題時(shí)無(wú)法及時(shí)有效地切換、主機(jī)和備用機(jī)進(jìn)行切換時(shí),一定程度上會(huì)導(dǎo)致業(yè)務(wù)中斷,甚至有時(shí)會(huì)有不得不進(jìn)行停機(jī)維護(hù)的情況,使得整個(gè)系統(tǒng)面對(duì)數(shù)據(jù)故障時(shí)顯得十分被動(dòng)。
隨著業(yè)務(wù)量的不斷增長(zhǎng),該架構(gòu)發(fā)展到2011年,出現(xiàn)了一些比較典型的問(wèn)題。如下圖所示:由于系統(tǒng)內(nèi)部使用的都是LB設(shè)備,商用LB的瓶頸就尤其明顯,由于業(yè)務(wù)的發(fā)展累計(jì),VIP及其上面發(fā)布的服務(wù)越堆越多,設(shè)備如果出現(xiàn)抖動(dòng)或者宕機(jī)會(huì)對(duì)業(yè)務(wù)造成嚴(yán)重影響,這即是架構(gòu)上的單點(diǎn)。第二個(gè)問(wèn)題就是數(shù)據(jù)庫(kù)的單點(diǎn)瓶頸。隨著業(yè)務(wù)量的不斷增加,單一的核心數(shù)據(jù)庫(kù)一旦出現(xiàn)異常,比如硬件故障、負(fù)載異常等等,進(jìn)而會(huì)導(dǎo)致整個(gè)核心鏈路上的業(yè)務(wù)都不可用。
如何消除系統(tǒng)架構(gòu)當(dāng)中存在的單點(diǎn)問(wèn)題,優(yōu)雅解決未來(lái)1-3年之間業(yè)務(wù)量增長(zhǎng)(數(shù)百萬(wàn)級(jí)/天)和機(jī)器數(shù)量增長(zhǎng)(數(shù)百個(gè)系統(tǒng)),是首先要解決的問(wèn)題,于是帶來(lái)了下一代架構(gòu)革新。
懵懂:少年時(shí)期2011年~2012年
鑒于第一階段支付寶碰到的這些痛點(diǎn),在第二個(gè)階段,它將邏輯上的單個(gè)機(jī)房拆分成為多個(gè)機(jī)房,通過(guò)把硬負(fù)載轉(zhuǎn)換成為軟負(fù)載,以實(shí)現(xiàn)分布式的服務(wù)調(diào)用,如下圖所示。下圖為基于常見(jiàn)的消費(fèi)者和生產(chǎn)者模型來(lái)構(gòu)建的業(yè)務(wù)模型,其中配置中心負(fù)責(zé)服務(wù)注冊(cè)以及對(duì)應(yīng)服務(wù)提供方可用狀態(tài)變化的通知,從而將信息實(shí)時(shí)推送到消費(fèi)方的訂閱關(guān)系上。值得注意的是,支付寶對(duì)原有架構(gòu)做了一個(gè)較大的改進(jìn):它將普通的一體化配置中心分拆成兩個(gè)模塊,一個(gè)Session模塊,用于管理消費(fèi)者和生產(chǎn)者的長(zhǎng)連接保持;一個(gè)Data模塊,用于注冊(cè)服務(wù)時(shí)存儲(chǔ)相關(guān)。通過(guò)這兩個(gè)模塊的深度解耦,進(jìn)一步提高整個(gè)配置中心的性能。