RTO縮短60%以上!平安銀行容災(zāi)切換平臺(tái)建設(shè)實(shí)踐
一、背景與方案
1、業(yè)務(wù)連續(xù)性挑戰(zhàn)
在銀行業(yè),業(yè)務(wù)連續(xù)性是一個(gè)非常重要的領(lǐng)域。
- 業(yè)務(wù)系統(tǒng)發(fā)生大規(guī)模中斷會(huì)產(chǎn)生資金損失甚至影響公司形象。
- 金融業(yè)務(wù)關(guān)系國計(jì)民生,影響大眾生活。
- 監(jiān)管對(duì)銀行業(yè)務(wù)連續(xù)性能力的檢視非常重視,會(huì)定期開展巡檢。
因此,很多銀行都建立了兩地三中心的容災(zāi)能力。當(dāng)基礎(chǔ)架構(gòu)層面具有容災(zāi)能力后,出現(xiàn)單機(jī)房故障時(shí),通過同城機(jī)房的切換實(shí)現(xiàn)故障恢復(fù)是一種非常理想的故障處理方式。
但通過與同行交流發(fā)現(xiàn),在出現(xiàn)單機(jī)房故障時(shí),大家還是傾向于在本地進(jìn)行故障恢復(fù),通過同城切換來實(shí)現(xiàn)故障恢復(fù)的案例少之又少。主要原因如下:
- 架構(gòu)治理: 架構(gòu)層面對(duì)雙活的技術(shù)方案和實(shí)現(xiàn)未制定統(tǒng)一的標(biāo)準(zhǔn),生產(chǎn)環(huán)境部署和配置存在不一致的情況。
- 預(yù)案維護(hù): 預(yù)案維護(hù)于文檔系統(tǒng)中管理,隨著業(yè)務(wù)的快速發(fā)展預(yù)案的新鮮度和準(zhǔn)確性存在問題。
- 演練驗(yàn)證: 演練本身的生產(chǎn)風(fēng)險(xiǎn)和實(shí)施成本巨大,演練覆蓋率較低。預(yù)案有效性、應(yīng)急流程和應(yīng)急人員操作缺乏有效的驗(yàn)證。
所以當(dāng)有了容災(zāi)的基礎(chǔ)能力后,距離隨時(shí)能切,想切就切的實(shí)戰(zhàn)能力還有一定距離。
2、業(yè)務(wù)場(chǎng)景切換能力
當(dāng)業(yè)務(wù)系統(tǒng)或業(yè)務(wù)場(chǎng)景出現(xiàn)故障后,快速通過切換實(shí)現(xiàn)我們的恢復(fù)目標(biāo),是我們?nèi)轂?zāi)切換非常重要的能力。
我們往往將業(yè)務(wù)場(chǎng)景切換過程分為以下三個(gè)階段:
- 機(jī)房、網(wǎng)絡(luò)、存儲(chǔ)等基礎(chǔ)架構(gòu)恢復(fù);
- 操作系統(tǒng)、容器平臺(tái)、信息系統(tǒng)恢復(fù);
- 業(yè)務(wù)場(chǎng)景對(duì)應(yīng)的應(yīng)用與數(shù)據(jù)庫恢復(fù)。
應(yīng)用場(chǎng)景恢復(fù)過程往往在整個(gè)階段中耗時(shí)最久,因?yàn)樗那袚Q對(duì)象數(shù)量極多。另外,業(yè)務(wù)場(chǎng)景與應(yīng)用數(shù)據(jù)庫之間的關(guān)系非常復(fù)雜,維護(hù)預(yù)案的成本很高,所以當(dāng)出現(xiàn)預(yù)案不準(zhǔn)確的情況時(shí),往往會(huì)導(dǎo)致故障恢復(fù)不能達(dá)到預(yù)期效果,增加故障恢復(fù)時(shí)長。
為了解決以上問題,我們會(huì)定期對(duì)全行業(yè)務(wù)進(jìn)行梳理,找出產(chǎn)生故障后會(huì)導(dǎo)致巨大資金損失的關(guān)鍵業(yè)務(wù),之后根據(jù)這些關(guān)鍵業(yè)務(wù)梳理出業(yè)務(wù)相關(guān)的業(yè)務(wù)場(chǎng)景,最后定位到這些業(yè)務(wù)場(chǎng)景所依賴的子系統(tǒng)。
3、面向子系統(tǒng)的容災(zāi)能力
當(dāng)每一個(gè)子系統(tǒng)都建成同城容災(zāi)的能力后,我們就可以認(rèn)為我們的業(yè)務(wù)具備了同城級(jí)別的容災(zāi)能力。換言之,當(dāng)我們的業(yè)務(wù)場(chǎng)景出現(xiàn)故障時(shí),我們可以通過切換對(duì)應(yīng)的系統(tǒng)快速恢復(fù)故障。
IT架構(gòu)往往分成系統(tǒng)、子系統(tǒng)以及應(yīng)用三個(gè)層次,系統(tǒng)由多個(gè)實(shí)現(xiàn)特定業(yè)務(wù)功能的子系統(tǒng)組成,每一個(gè)子系統(tǒng)又由多個(gè)實(shí)現(xiàn)特定業(yè)務(wù)邏輯的應(yīng)用組成。
我們?cè)诮ㄔO(shè)容災(zāi)能力時(shí),目前選擇子系統(tǒng)作為容災(zāi)建設(shè)的最小單位,原因有以下幾點(diǎn):
- 業(yè)務(wù)邊界明確: 子系統(tǒng)有明確的業(yè)務(wù)功能邊界,變動(dòng)性小,易于建立與業(yè)務(wù)場(chǎng)景的關(guān)聯(lián)關(guān)系;
- 職能管理維度: 在業(yè)務(wù)開發(fā)、版本控制、運(yùn)維管理有配套的人員和職能支持;
- 維護(hù)成本可控 : 相比數(shù)千級(jí)別的應(yīng)用數(shù)量,數(shù)百個(gè)子系統(tǒng)在預(yù)案維護(hù)上成本相對(duì)可控;
- 架構(gòu)管理單元: 子系統(tǒng)作為架構(gòu)的管理單元,會(huì)對(duì)架構(gòu)設(shè)計(jì)、高可用等進(jìn)行評(píng)估;
- 服務(wù)流量入口: 子系統(tǒng)間有提供服務(wù)相對(duì)獨(dú)立,內(nèi)部訪問關(guān)系高內(nèi)聚,彼此訪問松耦合等特點(diǎn);
- 數(shù)據(jù)庫獨(dú)立使用: 子系統(tǒng)在數(shù)據(jù)庫使用上相對(duì)獨(dú)立,架構(gòu)治理成本相對(duì)較低。
二、預(yù)案一鍵切換
1、雙活架構(gòu)模型
上文中我們講到通過子系統(tǒng)建設(shè)容災(zāi)能力,子系統(tǒng)在切換時(shí),其實(shí)是將故障機(jī)房的一些服務(wù)全部拉出,然后把流量和服務(wù)切換到服務(wù)正常的同城機(jī)房。
那么對(duì)于一個(gè)完成改造的子系統(tǒng)而言,它的服務(wù)分成三層,切換時(shí)需要對(duì)這三層的一些組件做解綁動(dòng)作。最上面的一層是互聯(lián)網(wǎng)的流量,例如我們公網(wǎng)的GLSB和 HTTP DNS等流量,也有一些廣域網(wǎng)的專線,還有一些負(fù)載均衡的服務(wù)。 當(dāng)流量進(jìn)入內(nèi)網(wǎng)后,我們通過內(nèi)網(wǎng)的GSLB與負(fù)載均衡的切換實(shí)現(xiàn)HTTP層的流量調(diào)度。 對(duì)于一些微服務(wù)的流量,我們通過注冊(cè)中心的 一些流量 拉入拉出實(shí)現(xiàn)流量的切換。
除了以上三種,銀行中還有一個(gè)比較特殊的服務(wù)模式——跑批,即晚上對(duì)當(dāng)天的交易進(jìn)行復(fù)核,跑批的結(jié)果會(huì)直接影響第二天銀行能否順利開門,也會(huì)間接影響我們服務(wù)的可能性。 在這個(gè)過程中,我們會(huì)對(duì)作業(yè)在哪個(gè)地方去跑等做一些切換控制。
理論上,當(dāng)子系統(tǒng)完成了一些架構(gòu)改造后,通過這些流量的調(diào)度切換,就可以完成我們的工程切換。但實(shí)際上,也有一些長尾問題,比如有些子系統(tǒng)做一些雙活的改造成本很高,或它是一些比較老的外購系統(tǒng),這樣的系統(tǒng)比例不高,但很重要。所以我們支持這些子系統(tǒng)切換的時(shí)候,提供了一些更加靈活的切換能力,比如我們支持做一些應(yīng)用配置的修改,或者執(zhí)行自定義的腳本,甚至?xí)峁┮恍?shù)據(jù)庫層面的數(shù)據(jù)修改能力,讓那些非標(biāo)的子系統(tǒng)具備自動(dòng)化、快速切換的能力,提高應(yīng)急切換效率。 在數(shù)據(jù)庫層面,更多的是像 Oracle、Mysql或MongoDB等數(shù)據(jù)庫組件的切換。
2、原子預(yù)案編排
在切換過程中,每一個(gè)類型的切換,我們內(nèi)部都稱之為一個(gè)原子的預(yù)案,切換工具會(huì)對(duì)這些原子預(yù)案進(jìn)行預(yù)案編排。在執(zhí)行前,我們有一個(gè)檢查階段,來確保目前處于適合切換的狀態(tài),才能執(zhí)行。
當(dāng)完成執(zhí)行動(dòng)作后,我們還需要通過驗(yàn)證來確保執(zhí)行目標(biāo)的達(dá)成,但具體步驟不是由我們的工具提供,這些能力是由數(shù)據(jù)庫團(tuán)隊(duì)或平臺(tái)架構(gòu)團(tuán)隊(duì)的變更能力提供。而我們的平臺(tái)是通過HTTP的方式,讓他們對(duì)執(zhí)行、檢查的步驟進(jìn)行快速編排。這種檢查、執(zhí)行、驗(yàn)證的編排模式,讓大家的切換能力變得更加標(biāo)準(zhǔn)化,也更加安全。
當(dāng)我們完成切換后,往往還需要對(duì)服務(wù)進(jìn)行恢復(fù),切換是從雙活變到單活的過渡,當(dāng)故障恢復(fù)后或演練要回切時(shí),我們也會(huì)把單活的能力回退到雙活的模式,這時(shí)候會(huì)有一個(gè)回退的編排。在回退編排中要做一些檢查、執(zhí)行和驗(yàn)證動(dòng)作的編排。
由于每一個(gè)原子預(yù)案都是很基礎(chǔ)的預(yù)案,風(fēng)險(xiǎn)非常大。所以當(dāng)我們的預(yù)案要發(fā)布時(shí),會(huì)請(qǐng)每個(gè)領(lǐng)域的專家對(duì)預(yù)案的內(nèi)容進(jìn)行評(píng)估,甚至做一些測(cè)試來保證預(yù)案能達(dá)到相應(yīng)效果,保證預(yù)案本身的安全性。
3、子系統(tǒng)應(yīng)急預(yù)案
1)故障場(chǎng)景關(guān)聯(lián)
當(dāng)我們有了原子預(yù)案能力以及明確的系統(tǒng)切換清單后,我們就可以在子系統(tǒng)層面編排子系統(tǒng)的預(yù)案,這個(gè)預(yù)案內(nèi)容可能會(huì)包含一些應(yīng)用、網(wǎng)絡(luò)以及數(shù)據(jù)庫的操作。當(dāng)做子系統(tǒng)切換時(shí),這些動(dòng)作需要同步切換。但是我們可以將對(duì)應(yīng)的故障場(chǎng)景進(jìn)行區(qū)分,盡可能降低切換范圍。
2)串并執(zhí)行編排
我們完成雙活改造后,切換對(duì)象之間的切換都是獨(dú)立的,所以我們默認(rèn)通過一些并行切換的方式提升整體切換效率。
但是因?yàn)橛幸恍╅L尾問題,例如有些子系統(tǒng)在切換之前需要先關(guān)閉一些流量才能執(zhí)行后面的切換動(dòng)作,所以我們最終提供的是串并行結(jié)合的編排能力。
3)預(yù)案版本管理
因?yàn)榧軜?gòu)一直在發(fā)生變化,當(dāng)架構(gòu)發(fā)生變化之后,工具能夠捕獲到這種變化,我們會(huì)將這些變化信息同步給對(duì)應(yīng)的預(yù)案維護(hù)人,他們可以通過這些提示信息對(duì)預(yù)案進(jìn)行實(shí)時(shí)更新,以免發(fā)生價(jià)格變化后預(yù)案更新不及時(shí)的情況。
4)演練狀態(tài)標(biāo)識(shí)
預(yù)案維護(hù)后是未驗(yàn)證的狀態(tài),只有當(dāng)子系統(tǒng)完成一次演練后,我們才會(huì)認(rèn)為這個(gè)預(yù)案處于安全有效的狀態(tài),所以我們會(huì)在預(yù)案沒有演練前,提示其切換過程中可能存在的風(fēng)險(xiǎn)。
以上4個(gè)能力是子系統(tǒng)預(yù)案編排過程中比較關(guān)鍵的能力。當(dāng)我們的子系統(tǒng)具備了預(yù)案管理能力后,我們?cè)偃プ鰳I(yè)務(wù)場(chǎng)景的編排會(huì)更容易。我們只需要明確業(yè)務(wù)場(chǎng)景中包含了哪些子系統(tǒng),并按照故障恢復(fù)的優(yōu)先順序設(shè)定切換執(zhí)行的批次即可。
4、執(zhí)行過程可視化
在執(zhí)行過程中我們會(huì)提供預(yù)案執(zhí)行過程的看板,展示目前切換的耗時(shí)與執(zhí)行成功與否,以及每一類組件切換的進(jìn)度和狀態(tài)。在執(zhí)行過程中,如果說有一些步驟或一些預(yù)案執(zhí)行失敗,我們也可以通過一些下鉆查看具體的報(bào)錯(cuò)原因。
5、工具可用性
每年的演練非常多,我們希望通過自助的方式,讓運(yùn)維、DBA以及一些演練執(zhí)行人能夠自助解決一些問題。
上文講的是如何通過工具體系提高業(yè)務(wù)系統(tǒng)的可能性,其實(shí)工具的可用性相比業(yè)務(wù)系統(tǒng)的可能性要求更高,因?yàn)榘l(fā)生故障時(shí),你期望通過工具對(duì)業(yè)務(wù)系統(tǒng)進(jìn)行恢復(fù)。我們?cè)诠ぞ呓ㄔO(shè)過程中,提出了更高的可能性要求。
1)多活
切換工具及其關(guān)鍵依賴,我們會(huì)在三個(gè)數(shù)據(jù)中心進(jìn)行部署。這三個(gè)數(shù)據(jù)中心包含我們的同城機(jī)房,生產(chǎn)機(jī)房,還有第三地機(jī)房。我們會(huì)默認(rèn)把主服務(wù)部署在第三地機(jī)房。這樣當(dāng)同城和生產(chǎn)機(jī)房出現(xiàn)問題時(shí),工具可以快速接管服務(wù),實(shí)施切換動(dòng)作。
切換工具,其關(guān)鍵依賴,以及變更能力是工具的核心能力,發(fā)生故障時(shí)這些能力不能出現(xiàn)任何問題,所以我們會(huì)定期對(duì)這些強(qiáng)依賴或關(guān)鍵依賴做一些容災(zāi)切換演練。
2)降級(jí)
登錄等能力是切換工具的弱依賴,切換工具的核心能力是切換。當(dāng)這些能力出現(xiàn)故障時(shí),我們要盡量避免它對(duì)我們核心切換能力產(chǎn)生影響,所以我們會(huì)定期通過故障注入或者主動(dòng)降級(jí)來做一些弱依賴的降級(jí)演練,確保弱依賴發(fā)生故障時(shí),核心功能不受影響。
3)性能
我們也會(huì)對(duì)切換原子預(yù)案的執(zhí)行性能做一些測(cè)試。我們?cè)诿恳粋€(gè)原子預(yù)案上線前,會(huì)要求預(yù)案提供方提供性能測(cè)試的基準(zhǔn),明確指出每一個(gè)原子預(yù)案執(zhí)行的并行度是多少,以及在對(duì)應(yīng)并行度下切換的SLA是多少。這種情況下,工具可以對(duì)原子預(yù)案的執(zhí)行做流控,保證切換過程的穩(wěn)定性。
三、運(yùn)行可觀測(cè)性
在執(zhí)行切換過程中,切換的實(shí)施人要實(shí)時(shí)關(guān)注切換服務(wù)的運(yùn)行狀態(tài)是否出現(xiàn)異常,以及是否達(dá)到相應(yīng)效果。
1、運(yùn)行監(jiān)控
在應(yīng)急或演練時(shí),我們會(huì)有一個(gè)切換成功的標(biāo)準(zhǔn):切換完成后,業(yè)務(wù)的關(guān)鍵指標(biāo)沒有明顯波動(dòng),目標(biāo)機(jī)房要承載100%的生產(chǎn)流量,應(yīng)用層和基礎(chǔ)層對(duì)應(yīng)服務(wù)的一些能力滿足對(duì)應(yīng)的SLA要求。這需要我們給演練的實(shí)施人提供信息匯聚的能力,包括業(yè)務(wù)層、應(yīng)用層以及基礎(chǔ)架構(gòu)層面的監(jiān)控能力。
2、架構(gòu)可觀測(cè)性
除監(jiān)控能力外,我們也會(huì)以清單形式展示對(duì)應(yīng)組件的情況。異常展示是分層的,只有出現(xiàn)異常時(shí),我們才會(huì)下鉆查看實(shí)際部署的異常展示。另外,我們也會(huì)將告警、變更等體現(xiàn)生產(chǎn)系統(tǒng)異常或存在關(guān)聯(lián)影響的動(dòng)作在服務(wù)節(jié)點(diǎn)進(jìn)行標(biāo)識(shí),及時(shí)提示生產(chǎn)變更的潛在風(fēng)險(xiǎn)。
3、運(yùn)維數(shù)據(jù)中臺(tái)
以上提到的展示能力都依賴于運(yùn)維數(shù)據(jù)中臺(tái)實(shí)現(xiàn)。
在運(yùn)維數(shù)據(jù)中臺(tái)中,我們會(huì)將服務(wù)之間的調(diào)用關(guān)系以及CMDB的一些部署信息組合成一張拓?fù)潢P(guān)系網(wǎng),并在每一個(gè)拓?fù)涔?jié)點(diǎn)上附加一些配置屬性、監(jiān)控的 url 地址以及變更等信息,豐富每一個(gè)拓?fù)涔?jié)點(diǎn)的數(shù)據(jù)。當(dāng)有了拓補(bǔ)和信息之后,我們就可以快速提供可觀測(cè)性能力,包括預(yù)案維護(hù)過程中識(shí)別架構(gòu)變化的能力,以及一些自動(dòng)化驗(yàn)證的能力。
四、演練線上化
當(dāng)我們有了一鍵切換能力以及可觀測(cè)性能力后,我們還需要通過演練驗(yàn)證人員的有效性、預(yù)案本身的有效性以及流程的有效性。中間過程中還要解決一些問題。
我們的同城子系統(tǒng)切換演練,其實(shí)是一個(gè)子系統(tǒng)層面的中高風(fēng)險(xiǎn)生產(chǎn)變更。在變更方案制定過程中,我們要盡可能避免因?yàn)榉桨笇用鎲栴}產(chǎn)生的影響。
1、方案風(fēng)險(xiǎn)控制
1)影響范圍評(píng)估
我們的演練是為了提高生產(chǎn)的穩(wěn)定性,所以我們?cè)谘菥氝^程中,會(huì)對(duì)演練的影響范圍做評(píng)估,主要包括以下幾方面:
- 識(shí)別與演練子系統(tǒng)關(guān)聯(lián)的子系統(tǒng),如是否存在數(shù)據(jù)庫共用的情況;
- 識(shí)別關(guān)聯(lián)系統(tǒng)的相關(guān)人員,如開發(fā)、運(yùn)維、DBA等;
- 有相關(guān)人員協(xié)同識(shí)別方案風(fēng)險(xiǎn),并參與演練的驗(yàn)證。
2)實(shí)施風(fēng)險(xiǎn)評(píng)估
我們也通過工具對(duì)實(shí)施風(fēng)險(xiǎn)進(jìn)行評(píng)估,主要包括以下幾方面:
- 數(shù)據(jù)庫防火墻未開識(shí)別;
- 集群部署當(dāng)前可用容量不對(duì)稱問題;
- 軟件、框架使用版本不符合基線問題;
- 異常識(shí)別自動(dòng)化檢查與二次驗(yàn)證。
有了上述能力后,我們就可以大幅度規(guī)避方案層面的一些風(fēng)險(xiǎn)。
2、演練流程管控
第二個(gè)風(fēng)險(xiǎn)是流程控制層面的風(fēng)險(xiǎn)。一個(gè)完整的流程,對(duì)降低演練過程的風(fēng)險(xiǎn)非常有幫助。流程的存在,也能夠提升演練的有效程度。對(duì)于演練過程中發(fā)現(xiàn)的一些問題,我們可以通過問題管理的一些流程跟進(jìn),關(guān)注它的持續(xù)解決。
但是流程的存在也會(huì)產(chǎn)生一些成本。因?yàn)榱鞒瘫旧矸浅?fù)雜,有較高的學(xué)習(xí)和培訓(xùn)成本,并且在有制度無管控的情況下,達(dá)不到期望的管理效果,同時(shí),完整的流程實(shí)施還會(huì)產(chǎn)生巨大的人力成本。
所以我們將線下流程變到線上時(shí),對(duì)這些信息做了一些梳理,通過一些強(qiáng)流程的控制,對(duì)那些存在變更風(fēng)險(xiǎn)或流程風(fēng)險(xiǎn)的地方做了設(shè)置的關(guān)卡,來規(guī)避一些流程中的風(fēng)險(xiǎn)。對(duì)于一些本身很復(fù)雜的流程,我們通過提示及引導(dǎo)的方式大大降低用戶演練門檻。
3、演練效能提升
我們?cè)诠ぞ邔用孀隽艘恍┬畔?yōu)化,來提升流程的效率。沒有工具之前,單次演練的累計(jì)時(shí)長加起來可能長達(dá)三天時(shí)間,如果考慮它的起始時(shí)間,甚至可能長達(dá)一個(gè)月。當(dāng)我們將演練線上化后,我們工具從四個(gè)方面提升了演練效能,縮短了演練時(shí)長。
1)演練人員協(xié)同
線上化演練可以通過識(shí)別,實(shí)現(xiàn)風(fēng)險(xiǎn)評(píng)估、方案制定和演練驗(yàn)證等環(huán)節(jié)的信息協(xié)作錄入,這樣的話我們演練的負(fù)責(zé)人只需要對(duì)結(jié)果做review和確認(rèn)就可以完成演練的制定,大大降低了溝通協(xié)同成本。
2)流程信息集成
線上化演練可以集成變更管控、問題管理、審批管理等流程系統(tǒng),并且在演練過程中自動(dòng)完成流程信息的關(guān)聯(lián)與狀態(tài)翻轉(zhuǎn)。
3)輔助技術(shù)驗(yàn)證
線上化演練可以通過面向不同演練對(duì)象建立標(biāo)準(zhǔn)化的技術(shù)驗(yàn)證格式和指標(biāo)減少驗(yàn)證成本,還能夠自動(dòng)生成驗(yàn)證信息,大幅降低演練中驗(yàn)證信息的填寫成本,顯著縮短演練時(shí)間。
4)運(yùn)營決策分析
線上化演練可以通過對(duì)演練過程信息的埋點(diǎn),建立數(shù)字化的過程度量能力,并且通過多緯度的統(tǒng)計(jì)分析建立演練質(zhì)量的運(yùn)營分析能力,提高演練流程的質(zhì)量和效率。
有了上述能力后,單次演練的平均投入時(shí)間從原來的3天減少到2小時(shí),效率提升了10倍以上,同時(shí)形成了常態(tài)化演練的條件,可以大幅提高我們演練的覆蓋率。
4、演練模擬執(zhí)行
上文講述的內(nèi)容是通過演練的方式驗(yàn)證切換預(yù)案內(nèi)容本身的有效性,除此之外還應(yīng)該驗(yàn)證人員的有效性以及流程的有效性。這些有效性往往通過培訓(xùn)或桌面沙盤模擬,以及應(yīng)急響應(yīng)演練來實(shí)現(xiàn),因此我們開發(fā)了一套模擬執(zhí)行的機(jī)制。通過模擬執(zhí)行的方式,可以提升我們一線團(tuán)隊(duì)、一線同事對(duì)于切換流程的熟悉程度,也可以驗(yàn)證我們流程的有效性。
5、演練過程指揮
我們?cè)谧龃笠?guī)模演練的時(shí)候,會(huì)產(chǎn)生一些指揮層面的需求。
比如我們的演練負(fù)責(zé)人需要關(guān)注參加當(dāng)次演練的人員信息以及所設(shè)計(jì)業(yè)務(wù)監(jiān)控的正常程度,并且需要關(guān)注切換過程中數(shù)據(jù)中心的流量變化。那么通過我們的指揮大屏,指揮官可以清晰看到數(shù)據(jù)中心運(yùn)行信息。在演練過程中,我們也會(huì)將每個(gè)子系統(tǒng)的切換進(jìn)度在大屏上進(jìn)行展示。
五、上線后的收益
1、業(yè)務(wù)連續(xù)性能力提升
1)容災(zāi)能力提升
我們實(shí)現(xiàn)了容災(zāi)切換平臺(tái)后,整個(gè)切換時(shí)長得到了大幅提升。目前我們一個(gè)子系統(tǒng)端到端的切換RTO小于10分鐘,縮短至了原來的三分之一。
對(duì)于應(yīng)用類的切換,RTO的值更小,因?yàn)閼?yīng)用類切換的成本主要是不同系統(tǒng)之間的操作成本,當(dāng)我們?nèi)グ凑找粋€(gè)預(yù)案批量執(zhí)行時(shí),基本上幾秒鐘就可以完成。
2)業(yè)務(wù)切換能力
那么因?yàn)槲覀兘⒘藰I(yè)務(wù)場(chǎng)景與子系統(tǒng)之間的關(guān)系,子系統(tǒng)又完成了預(yù)案管理的閉環(huán),所以我們具備了業(yè)務(wù)場(chǎng)景切換的預(yù)案維護(hù)的閉環(huán)能力。當(dāng)業(yè)務(wù)場(chǎng)景出現(xiàn)故障時(shí),我們可以快速通過子系統(tǒng)的切換實(shí)現(xiàn)業(yè)務(wù)場(chǎng)景的一鍵恢復(fù)。
3)應(yīng)急方式豐富
原來我們發(fā)現(xiàn)一些故障的時(shí)候,往往是通過重啟、擴(kuò)容、回穩(wěn)這傳統(tǒng)的三把斧方式恢復(fù)故障。有了切換能力后,我們有了更快速的方式,可以通過切換來快速恢復(fù)服務(wù),同時(shí)切換的方式也是經(jīng)過驗(yàn)證的,所以它也是一種較為安全的故障恢復(fù)手段。
2、變更安全能力提升
除了業(yè)務(wù)連續(xù)性能力提升之外,我們還發(fā)現(xiàn)了額外的驚喜。
1)常規(guī)變更
我們?cè)瓉砣プ鲆恍┘夹g(shù)架構(gòu)層面的變更,無論是應(yīng)用運(yùn)維還是技術(shù)架構(gòu)的同事都非常擔(dān)心,變更可能產(chǎn)生一些較大規(guī)模的故障。
當(dāng)我們具備切換能力后,再進(jìn)行機(jī)房維護(hù)時(shí),我們就會(huì)提前將這些應(yīng)用的流量及相關(guān)一些子系統(tǒng)的流量切換到我們的通訊機(jī)房,保障變更過程中的安全性。當(dāng)我們完成技術(shù)架構(gòu)變更時(shí),再分批將流量切回來,大大提升了安全系數(shù)。
2)藍(lán)綠發(fā)版
原來我們行業(yè)的發(fā)版主要集中在周二和周四,對(duì)于一些關(guān)鍵系統(tǒng),這個(gè)時(shí)間點(diǎn)往往在周二周四的凌晨?jī)扇c(diǎn)鐘,對(duì)于運(yùn)維人員很不友好。當(dāng)我們有了切換能力后,發(fā)布過程的安全性提升了,可用于發(fā)版的時(shí)間段延長,同時(shí)發(fā)版后業(yè)務(wù)異常支持快速回退。
Q&A
Q1:是否有必要進(jìn)行以存儲(chǔ)為中心的容災(zāi)演練,相比應(yīng)用為中心的容災(zāi)演練有什么區(qū)別?
A1: 我們?cè)谧鋈轂?zāi)切換時(shí),不僅做應(yīng)用層的,也會(huì)做數(shù)據(jù)層的。所以我理解這個(gè)切換應(yīng)該是應(yīng)用與數(shù)據(jù)庫整體的切換,至于存儲(chǔ)部分是由技術(shù)架構(gòu)團(tuán)隊(duì)單獨(dú)實(shí)施。
Q2:在演練之前如何確保兩邊的數(shù)據(jù)是一致的?
A2: 我們目前在應(yīng)用層有一些巡檢機(jī)制,所以我們會(huì)定期做一些檢查,在切換之前也會(huì)做檢查工作,我們切換前后不能說一致,但至少生產(chǎn)的機(jī)房跟同城機(jī)房之間,處于可切換狀態(tài),數(shù)據(jù)庫層面通過數(shù)據(jù)來實(shí)現(xiàn)切換。
Q3:切換后增量的數(shù)據(jù)可以恢復(fù)到原生產(chǎn)數(shù)據(jù)中心嗎?
A3: 這個(gè)問題在演練跟應(yīng)急過程中有一些區(qū)別,演練過程中我們會(huì)盡可能避免數(shù)據(jù)丟失的行為,因?yàn)檠菥氝^程中有一個(gè)Switch over的切換方式,但是真正發(fā)生生產(chǎn)應(yīng)急的時(shí)候,Switch over的方式時(shí)間會(huì)比較久。真正發(fā)生生產(chǎn)應(yīng)急的時(shí)候,我們會(huì)用vivo的 方式做切換,這個(gè)時(shí)候其實(shí)會(huì)有一些數(shù)據(jù)丟失,丟失的數(shù)據(jù)由DBA同學(xué)修復(fù)。
Q4:一年進(jìn)行幾次容災(zāi)切換的應(yīng)急演練?
A4: 我們有一個(gè)要求,兩年之內(nèi)要對(duì)我們的核心系統(tǒng)做到演練覆蓋,所以每年的演練數(shù)量基本多達(dá)幾百次。
Q5:切換是僅限同城嗎?
A5: 我們?cè)诮ㄔO(shè)容災(zāi)能力時(shí),有同城能力也有災(zāi)備能力,但因?yàn)榇髷?shù)據(jù)是實(shí)時(shí)復(fù)制的,同城機(jī)房與生產(chǎn)機(jī)房都有流量,所以切換的安全性更高一些。兩個(gè)同城機(jī)房都不可用的情況之下,我們才會(huì)做一些災(zāi)備切換,二者的使用頻率跟場(chǎng)景是不一樣的,所以我們的演練災(zāi)備機(jī)房也會(huì)有,但同城演練的頻率可能更高一些。
Q6:平時(shí)業(yè)務(wù)在兩個(gè)中心同時(shí)跑,是按照1:1的比例分配流量,如果是應(yīng)用層面的問題,一般兩中心同時(shí)都有問題,那么切換是否就沒有意義了?
A6: 我們平時(shí)的流量是在生產(chǎn)跟同城機(jī)房以1:1的形式部署的,如果一個(gè)節(jié)點(diǎn)出現(xiàn)一個(gè)問題,物理設(shè)備出現(xiàn)一些問題,或單機(jī)房的PaaS服務(wù)出現(xiàn)一些問題,故障往往是單機(jī)房的。如果應(yīng)用層面出現(xiàn)問題,例如容量問題,這種情況通過切換是解決不了的。所以容災(zāi)切換只適用于部分場(chǎng)景,并不能解決所有問題。