崔希寧
(中國(guó)移動(dòng)北京公司信息系統(tǒng)部 北京 100027)
目前廣泛使用的系統(tǒng)高可用技術(shù)是負(fù)載均衡,主機(jī)HA,存儲(chǔ)BCV、SRDF,數(shù)據(jù)庫(kù)RAC,應(yīng)用系統(tǒng)應(yīng)急?;谝陨霞夹g(shù),在電信BOSS中建設(shè)了各種高可用系統(tǒng),如雙機(jī)系統(tǒng)、RAC系統(tǒng)、BCV系統(tǒng)、應(yīng)急系統(tǒng)、災(zāi)備系統(tǒng)。這些系統(tǒng)對(duì)BOSS的服務(wù)保障能力提高了一個(gè)等級(jí),但是在BOSS發(fā)生重大災(zāi)難或者出現(xiàn)數(shù)據(jù)庫(kù)崩潰等重大故障時(shí),出現(xiàn)重大的業(yè)務(wù)操作邏輯錯(cuò)誤時(shí),以上方法均不能兼顧保障具有較高的RTO和QoS。
雖然業(yè)務(wù)應(yīng)急可以達(dá)到快速切換,但業(yè)務(wù)服務(wù)水平因?yàn)闆](méi)有底層數(shù)據(jù)和運(yùn)算能力的支持其內(nèi)容范圍受到很大牽制。大部分業(yè)務(wù)以緩存,應(yīng)急開(kāi)通為主,對(duì)交互復(fù)雜,實(shí)時(shí)反饋的業(yè)務(wù)很難實(shí)現(xiàn)。
本文綜合以上技術(shù)特點(diǎn),從應(yīng)用中間層引入控制理論的PID算法改造傳統(tǒng)的負(fù)載分擔(dān)和切換算法機(jī)制,解決以往負(fù)載分擔(dān)擴(kuò)展能力差,切換業(yè)務(wù)停頓時(shí)間長(zhǎng)的問(wèn)題。同時(shí),從數(shù)據(jù)層改造standby,引入基于日志的數(shù)據(jù)庫(kù)復(fù)制的多點(diǎn)計(jì)算(多活open)技術(shù),從而構(gòu)建整個(gè)業(yè)務(wù)動(dòng)態(tài)擴(kuò)展零間斷切換的高可用性構(gòu)架。
CBOSS主要業(yè)務(wù)功能為:與集團(tuán)CBOSS交互,發(fā)送及接收異地業(yè)務(wù),并完成與電信運(yùn)營(yíng)支撐系統(tǒng)的信息交互;完成數(shù)據(jù)業(yè)務(wù)的訂購(gòu)關(guān)系保存及與其相關(guān)的所有業(yè)務(wù)的受理,變更及銷(xiāo)戶等工作。
其以往高可用性構(gòu)架方式如圖1所示。
應(yīng)用層采用F5做負(fù)載分擔(dān),數(shù)據(jù)庫(kù)采用HA做雙機(jī)冷備。中間件TIBCO應(yīng)用服務(wù)器采用多臺(tái)主機(jī)組成服務(wù)器組,使用F5負(fù)載分擔(dān)技術(shù),可以有效地避免單點(diǎn)故障,但處理能力固定無(wú)法做到動(dòng)態(tài)擴(kuò)展。當(dāng)面臨大的突發(fā)負(fù)荷時(shí),性能無(wú)法保障,涉及主機(jī)和存儲(chǔ)的故障由于數(shù)據(jù)庫(kù)是冷備的方式,故障切換和接管時(shí)間較長(zhǎng)。
圖1 CBOSS系統(tǒng)物理架構(gòu)
CBOSS數(shù)據(jù)庫(kù)使用RAID(0+1)鏡像保護(hù),當(dāng)前只有定期BCV鏡像備份方式,這種方式只能提供簡(jiǎn)單的數(shù)據(jù)保護(hù),同時(shí),由于分離周期不能過(guò)長(zhǎng),存在數(shù)據(jù)丟失風(fēng)險(xiǎn),只具備簡(jiǎn)單應(yīng)急和容災(zāi)功能。
問(wèn)題場(chǎng)景分析如下。
·CBOSS數(shù)據(jù)庫(kù)存儲(chǔ)物理?yè)p壞,業(yè)務(wù)無(wú)法辦理,由于當(dāng)前BCV鏡像每天定期分離,數(shù)據(jù)不能保證實(shí)時(shí)同步,即使使用BCV數(shù)據(jù)庫(kù)也無(wú)法立刻提供服務(wù),存在數(shù)據(jù)丟失風(fēng)險(xiǎn)。
·CBOSS數(shù)據(jù)庫(kù)異常掛起,重啟后能夠恢復(fù),由于數(shù)據(jù)庫(kù)連接中斷,需要手工重啟相關(guān)TIBCO應(yīng)用,恢復(fù)時(shí)間過(guò)長(zhǎng)。
·人為操作刪除數(shù)據(jù)庫(kù)對(duì)象,如DROP TABLE,導(dǎo)致業(yè)務(wù)中斷,數(shù)據(jù)丟失,此時(shí)如使用保持鏡像的BCV模式,數(shù)據(jù)將同步丟失,無(wú)法恢復(fù);如采用定期鏡像分離的BCV模式,將丟失從分離時(shí)間到故障時(shí)間的數(shù)據(jù),且恢復(fù)需要較長(zhǎng)時(shí)間。
·應(yīng)用進(jìn)程異常hang死,java虛擬機(jī)發(fā)生內(nèi)存泄露或bug等問(wèn)題導(dǎo)致應(yīng)用無(wú)法響應(yīng),計(jì)算能力急劇下降,此時(shí)只能重起應(yīng)用,但操作時(shí)間過(guò)長(zhǎng)。
現(xiàn)有業(yè)務(wù)構(gòu)架存在的核心問(wèn)題是系統(tǒng)能力受限和業(yè)現(xiàn)切換時(shí)間過(guò)長(zhǎng)。傳統(tǒng)的高可用方法和負(fù)載均衡方法無(wú)法滿足一級(jí)BOSS業(yè)務(wù)連續(xù)性分鐘級(jí)需求。
從數(shù)據(jù)層、應(yīng)用層建立多點(diǎn)計(jì)算,動(dòng)態(tài)擴(kuò)展的分布式實(shí)時(shí)在線的計(jì)算構(gòu)架,實(shí)現(xiàn)能力擴(kuò)展和故障切換的自適應(yīng)結(jié)構(gòu)。優(yōu)化后的系統(tǒng)構(gòu)架如圖2所示。
本構(gòu)架改造以往構(gòu)架,在中間應(yīng)用層增加了能力擴(kuò)展節(jié)點(diǎn)和錯(cuò)誤冗余節(jié)點(diǎn),并引入PID控制原理改造負(fù)載分擔(dān)算法形成PID-F5控制器。在數(shù)據(jù)層與中間層相適應(yīng)搭建分布式計(jì)算的數(shù)據(jù)庫(kù)網(wǎng)格池,增加了基于日志同步的激活狀態(tài)(open)的多個(gè)數(shù)據(jù)庫(kù)運(yùn)算節(jié)點(diǎn)。
(1)控制機(jī)制和結(jié)構(gòu)
PID是基礎(chǔ)的控制算法,能夠?qū)崿F(xiàn)反饋控制零誤差、快速響應(yīng)的核心控制內(nèi)容,PID解決了自動(dòng)控制理論所要解決的最基本問(wèn)題,即系統(tǒng)的穩(wěn)定性、快速性和準(zhǔn)確性。調(diào)節(jié)PID的參數(shù),可實(shí)現(xiàn)在系統(tǒng)穩(wěn)定的前提下,兼顧系統(tǒng)的帶載能力和抗擾能力。比例控制(P)是一種最簡(jiǎn)單的控制方式,其控制器的輸出與輸入誤差信號(hào)成比例關(guān)系。當(dāng)僅有比例控制時(shí)系統(tǒng)輸出存在穩(wěn)態(tài)誤差(steady-state error)。對(duì)一個(gè)自動(dòng)控制系統(tǒng),為了消除穩(wěn)態(tài)誤差,在控制器中必須引入“積分項(xiàng)”。比例+積分(PI)控制器,可以使系統(tǒng)在進(jìn)入穩(wěn)態(tài)后無(wú)穩(wěn)態(tài)誤差。對(duì)于電信系統(tǒng)允許穩(wěn)態(tài)誤差的存在,實(shí)踐中不必追求穩(wěn)態(tài)誤差為0。微分(D)控制解決控制中的有較大慣性組件(環(huán)節(jié))或有滯后(delay)組件問(wèn)題,使控制能預(yù)測(cè)誤差變化的趨勢(shì)。對(duì)于結(jié)構(gòu)復(fù)雜的電信系統(tǒng)引入微分控制可以解決運(yùn)算能力控制中超調(diào)或滯后問(wèn)題,使響應(yīng)迅速又不至于給其他組件帶來(lái)大的沖擊和影響。傳統(tǒng)的負(fù)載均衡機(jī)制根本上是基于開(kāi)環(huán)比例控制。目前,中間層weblogic等的能力擴(kuò)展(線程管理)對(duì)于業(yè)務(wù)響應(yīng)從本質(zhì)上都是基于比例的開(kāi)環(huán)控制,其滯后性明顯,且無(wú)法跨節(jié)點(diǎn)擴(kuò)展和自動(dòng)容災(zāi)備份切換。F5網(wǎng)絡(luò)層產(chǎn)品本質(zhì)上是負(fù)載均衡功能同樣無(wú)法完成自動(dòng)的節(jié)點(diǎn)擴(kuò)展和冗余切換。中間層等的線程擴(kuò)展算法是根據(jù)請(qǐng)求的數(shù)量按固定步長(zhǎng)和比例增加系統(tǒng)資源。其沒(méi)有考慮負(fù)荷增加/變化的速度和并形成對(duì)整個(gè)系統(tǒng)資源反饋的閉環(huán)結(jié)構(gòu)。PID-F5動(dòng)態(tài)擴(kuò)展機(jī)制利用PID控制原理并引入對(duì)系統(tǒng)資源的切換因子,根據(jù)采集到的數(shù)據(jù)周期性地對(duì)當(dāng)前負(fù)載數(shù)據(jù)的偏差進(jìn)行糾正,其在能力的動(dòng)態(tài)擴(kuò)展和自適應(yīng)調(diào)節(jié)方面有良好的表現(xiàn)。
當(dāng)節(jié)點(diǎn)的能力不足時(shí),PID-F5節(jié)點(diǎn)控制器會(huì)自動(dòng)把可擴(kuò)展節(jié)點(diǎn)增加到節(jié)點(diǎn)池增加運(yùn)算能力,在極端情況下可以完成節(jié)點(diǎn)切換將應(yīng)用引入冗余備份節(jié)點(diǎn)。
(2)PID-F5算法的基本數(shù)據(jù)結(jié)構(gòu)定義
基本配置信息:運(yùn)算節(jié)點(diǎn)池列表,服務(wù)器類(lèi)型表(server type table,STT),其記錄服務(wù)類(lèi)型Ti及其對(duì)應(yīng)的服務(wù)器Si,包括一般節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)上只有cboss應(yīng)用單獨(dú)運(yùn)行。能力擴(kuò)展節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)服務(wù)器上平時(shí)在線CPU運(yùn)行其他應(yīng)用,需要cboss能力擴(kuò)展時(shí)運(yùn)行cboss應(yīng)用。錯(cuò)誤冗余節(jié)點(diǎn)本服務(wù)器上只運(yùn)行冗余的cboss應(yīng)用。初始化參數(shù),其包括系統(tǒng)容忍響應(yīng)時(shí)間 rt,系統(tǒng)設(shè)定相應(yīng)時(shí)間 rs,系統(tǒng)不可容忍時(shí)間、系統(tǒng)最大響應(yīng)時(shí)間 rm(rm>rt>r>rs)。
系統(tǒng)實(shí)時(shí)負(fù)荷因子為L(zhǎng),由CPU利用率cpu% ×k1、內(nèi)存利用率 memory%×k2、網(wǎng)絡(luò)負(fù)載流量net%、磁盤(pán)I/O訪問(wèn)率I/O%×k3組成,根據(jù)收集到的這些負(fù)載參數(shù)依各自的權(quán)值按以下公式計(jì)算負(fù)載:
L=k1×cpu%+k2×memory%+k3×I/O% (其中 ki由專(zhuān)家系統(tǒng)根據(jù)工程試驗(yàn)得出 ∑ki=1)
有效反饋時(shí)間:系統(tǒng)響應(yīng)時(shí)間由兩個(gè)維度衡量:請(qǐng)求等待隊(duì)列長(zhǎng)度(request list,RL),用戶請(qǐng)求放入此隊(duì)列中等待處理;服務(wù)器線程粘貼時(shí)間即平均響應(yīng)時(shí)間(Rtime)。
根據(jù)收集到的這些負(fù)載參數(shù)依各自的權(quán)值按公式計(jì)算負(fù)載:
Ri=k1×RL+k2×Rtime (其中ki由專(zhuān)家系統(tǒng)根據(jù)工程試驗(yàn)得出 ∑ki=1)
輸出數(shù)組:[stepi,swi]擴(kuò)展步長(zhǎng) stepi,切換開(kāi)關(guān)量 swi。
(3)PID-F5算法的步驟和流程
確定系統(tǒng)之后根據(jù)試驗(yàn)確定比例增益P,積分時(shí)間常數(shù)Td,其中pi算法參數(shù)由專(zhuān)家系統(tǒng)經(jīng)過(guò)工程試驗(yàn)方法得出。
PID-F5算法的流程如圖3所示。
PID-F5算法的具體步驟為:
·根據(jù)粘貼時(shí)長(zhǎng)和響應(yīng)時(shí)間計(jì)算實(shí)際負(fù)荷 r(i)[ri];
·根據(jù)控制返回條件決定是否結(jié)束pid控制;
·根據(jù)切換開(kāi)關(guān)算法確定是否需要容災(zāi)切換;
·根據(jù)結(jié)果進(jìn)行pid動(dòng)態(tài)信號(hào)計(jì)算;
·根據(jù)控制信號(hào)倒入響應(yīng)系統(tǒng)擴(kuò)展系統(tǒng)能力;
·繼續(xù)采樣反饋控制結(jié)果。
算法實(shí)現(xiàn)程序由iRules編程。
數(shù)據(jù)層能夠做到能力負(fù)載分擔(dān)和切換的零RTO,并且能夠起到同時(shí)滿足數(shù)據(jù)的系統(tǒng)保護(hù)和邏輯保護(hù)的功能,必須基于日志事務(wù)的數(shù)據(jù)同步雙活(open)結(jié)構(gòu)。采用基于日志數(shù)據(jù)同步方案可以實(shí)現(xiàn)可控時(shí)間窗口內(nèi)基于交易的數(shù)據(jù)一致,保證分布式數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)一致性基于時(shí)間可控。數(shù)據(jù)保護(hù)功能對(duì)比見(jiàn)表1。
從對(duì)比中可以得到基于日志的數(shù)據(jù)復(fù)制保護(hù)方案,該方案結(jié)合了其他各方案在數(shù)據(jù)安全性、業(yè)務(wù)連續(xù)性、負(fù)載分擔(dān)分布計(jì)算的優(yōu)點(diǎn)。
基于日志數(shù)據(jù)庫(kù)多點(diǎn)計(jì)算數(shù)據(jù)一致性和效率的分析和試驗(yàn):數(shù)據(jù)一致性機(jī)制由復(fù)制過(guò)程校驗(yàn)點(diǎn)文件保證,數(shù)據(jù)以交易為單位復(fù)制,復(fù)制進(jìn)程由捕獲分析、傳遞、分發(fā)應(yīng)用三部分組成。Capture、Pump、Delivery三個(gè)進(jìn)程將當(dāng)前位置保存在一個(gè)checkpoint file,發(fā)生錯(cuò)誤時(shí)可以快速恢復(fù)數(shù)據(jù)完整性,防止數(shù)據(jù)丟失。數(shù)據(jù)同步效率問(wèn)題,因?yàn)榛谌罩痉治?,從原理上可以充分?yīng)用系統(tǒng)CPU并發(fā)能力保證,同步時(shí)延。從壓力試驗(yàn)看時(shí)延窗口可以通過(guò)分發(fā)進(jìn)程個(gè)數(shù)線性控制,在秒級(jí)可以和生產(chǎn)保持一致。
表1 數(shù)據(jù)保護(hù)功能對(duì)比
Max Load(~8 000 ops/sec/18.5 GB/hr redo generation),在redo log量 產(chǎn)生<500 MB/min的情況下,數(shù)據(jù)延遲<10 s。
從實(shí)驗(yàn)看出基于日志的數(shù)據(jù)傳輸技術(shù)的特點(diǎn):目標(biāo)端的系統(tǒng)資源消耗并不對(duì)源端敏感;加載延遲相對(duì)于滯后很小。因此,只要充分提高日志分析和傳輸?shù)男始纯色@得較高的數(shù)據(jù)一致性。
本自適應(yīng)系統(tǒng)在突發(fā)的業(yè)務(wù)壓力和故障中通過(guò)對(duì)可擴(kuò)展節(jié)點(diǎn)和容災(zāi)節(jié)點(diǎn)的調(diào)度,保障CBOSS重要業(yè)務(wù)的服務(wù)連續(xù)性,力保服務(wù)質(zhì)量不明顯降低,故障切換沒(méi)有明顯延遲,本系統(tǒng)可以自動(dòng)運(yùn)行也可以人工干預(yù)運(yùn)行。
手工切換:停止自動(dòng)的PID-F5控制程序,人工在f5-gui界面操作服務(wù)器pool的node狀態(tài)up/down動(dòng)態(tài)擴(kuò)展或切換。
自動(dòng)切換:初始化PID-F5,根據(jù)考核指標(biāo)和業(yè)務(wù)KPI設(shè)定rm、rt、rs控制參數(shù) ,啟動(dòng)PID-F5控制程序,通過(guò)控制 pool中活動(dòng)成員或通過(guò)virtual server的rules運(yùn)行系統(tǒng)自動(dòng)完成響應(yīng)時(shí)間的控制或切換。具有良好的控制特性和健壯性。
當(dāng)cboss系統(tǒng)接近不能達(dá)到服務(wù)KPI指標(biāo),影響服務(wù)質(zhì)量,保障系統(tǒng)實(shí)際運(yùn)行情況如下:數(shù)據(jù)庫(kù)達(dá)到數(shù)據(jù)一致的接管時(shí)間是小于2 s,所有應(yīng)用重新接續(xù)時(shí)間是小于3 s。整體上經(jīng)過(guò)5 s達(dá)到全業(yè)務(wù)接管運(yùn)營(yíng),性能恢復(fù)到故障之前。原生產(chǎn)節(jié)點(diǎn)故障恢復(fù)之后,從系統(tǒng)級(jí)得到數(shù)據(jù)回收腳本,確認(rèn)后自動(dòng)運(yùn)行數(shù)據(jù)回收腳本。
在具有較大負(fù)荷情況下從從仿真性能曲線對(duì)比上可以看出,PID-F5自適應(yīng)算法較基于線程的固定步長(zhǎng)控制,具有更好的健壯性,響應(yīng)更加迅速。
(1)PID-F5實(shí)現(xiàn)一種云計(jì)算動(dòng)態(tài)擴(kuò)展算法
BEA Weblogic和IBM Websphere是目前兩大主流的J2EE應(yīng)用服務(wù)器,它們都具有負(fù)載平衡能力和能力調(diào)節(jié)機(jī)制,但是僅支持一些常見(jiàn)的負(fù)載平衡算法,如Round Robin(缺 省)、Weight-Based 和隨 機(jī) 算 法,不 能 根 據(jù)系統(tǒng)負(fù)載信息進(jìn)行決策,也不能進(jìn)行負(fù)載反饋,不具有自適應(yīng)控制能力,在負(fù)荷調(diào)節(jié)方面也僅僅是基于步長(zhǎng)的比例調(diào)節(jié)。
PID-F5將控制理論的基本原理引入負(fù)荷調(diào)節(jié)和能力控制,為分布式計(jì)算、彈性計(jì)算系統(tǒng)、云并行計(jì)算的多點(diǎn)計(jì)算技術(shù)的能力擴(kuò)展方法提供一種可行的思路和實(shí)現(xiàn)方法。本方法可以實(shí)現(xiàn)計(jì)算能力的自適應(yīng)動(dòng)態(tài)擴(kuò)展,提供很好的健壯性。
(2)基于日志復(fù)制的數(shù)據(jù)庫(kù)分布式計(jì)算
通過(guò)基于日志的數(shù)據(jù)同步技術(shù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)在一定時(shí)間窗口下的分布計(jì)算,同時(shí)起到對(duì)數(shù)據(jù)層邏輯保護(hù)和物理保護(hù)的功能。這是對(duì)數(shù)據(jù)庫(kù)分布式計(jì)算rac功能和數(shù)據(jù)保護(hù)功能standby功能的結(jié)合。這種新型架構(gòu)可以滿足多種業(yè)務(wù)需求:容災(zāi)、在線分析、應(yīng)急、批量業(yè)務(wù)等多種情形,本文通過(guò)校驗(yàn)文件和并行加載方案實(shí)現(xiàn)了基于日志復(fù)制的數(shù)據(jù)一致性和效率問(wèn)題。
(3)多活數(shù)據(jù)中心構(gòu)架實(shí)現(xiàn)容災(zāi)多種業(yè)務(wù)需求
推廣一級(jí)BOSS這種多中心的構(gòu)架,可以實(shí)現(xiàn)容災(zāi),快速應(yīng)急,數(shù)據(jù)在線分析OLAP中心,數(shù)據(jù)抽取(ETL)中心等多種系統(tǒng)。突破以往基于存儲(chǔ)容災(zāi)中心投資巨大,備份中心平時(shí)無(wú)法使用的問(wèn)題,突破應(yīng)急中心業(yè)務(wù)覆蓋和切換時(shí)間問(wèn)題,解決數(shù)據(jù)質(zhì)量稽查數(shù)據(jù)環(huán)境和數(shù)據(jù)實(shí)時(shí)抽取數(shù)據(jù)環(huán)境問(wèn)題,解決生產(chǎn)壓力(大查詢壓力和后臺(tái)批量業(yè)務(wù)壓力)分流問(wèn)題。為這些問(wèn)題提供很好的參考方案。
由于采用基于日志的雙活數(shù)據(jù)中心和節(jié)點(diǎn)復(fù)用動(dòng)態(tài)擴(kuò)展結(jié)構(gòu),去掉了大量基于存儲(chǔ)基于主機(jī)等的SAN存儲(chǔ)部件的采購(gòu)成本和主機(jī)資源 ,復(fù)用現(xiàn)有的生產(chǎn)主機(jī)和冷備份主機(jī)和備份存儲(chǔ),實(shí)現(xiàn)整個(gè)系統(tǒng)結(jié)構(gòu)的優(yōu)化,業(yè)務(wù)操作的合理布局,節(jié)省了巨大的建設(shè)投資。
電信系統(tǒng)CBOSS自適應(yīng)保障系統(tǒng)的成功部署與演練,使CBOSS在發(fā)生災(zāi)難或異常時(shí)仍然能在秒級(jí)快速對(duì)外提供全業(yè)務(wù)服務(wù),使業(yè)務(wù)支撐保障能力達(dá)到一個(gè)新的水平,極大增強(qiáng)了CBOSS的業(yè)務(wù)連續(xù)性運(yùn)營(yíng)能力。