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