一種基于兩地三中心的災(zāi)備信息系統(tǒng)仿真方法
【專利摘要】本發(fā)明提供的是一種基于兩地三中心的災(zāi)備信息系統(tǒng)仿真方法。該仿真按照用戶的實(shí)際需求搭建模擬的災(zāi)備信息系統(tǒng),實(shí)現(xiàn)災(zāi)難導(dǎo)致的故障的注入、故障修復(fù)、故障檢測(cè)、數(shù)據(jù)中心的切換和回切、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)有效性驗(yàn)證等災(zāi)備信息系統(tǒng)演練過(guò)程,系統(tǒng)中存在系統(tǒng)信號(hào)三種狀態(tài):正常狀態(tài)、故障狀態(tài)和中心替代狀態(tài),利用系統(tǒng)信號(hào)實(shí)現(xiàn)災(zāi)備流程的控制,降低了成本,提高了工作效率,同時(shí)使用災(zāi)備數(shù)據(jù)和生產(chǎn)數(shù)據(jù)共享存儲(chǔ)的存儲(chǔ)方式,節(jié)省了空間。
【專利說(shuō)明】一種基于兩地三中心的災(zāi)備信息系統(tǒng)仿真方法(-)【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及的是一種基于兩地三中心的災(zāi)備信息系統(tǒng)仿真方法。
(二)【背景技術(shù)】[0002]隨著社會(huì)信息化建設(shè)的不斷發(fā)展,人們對(duì)信息系統(tǒng)的依賴程度越來(lái)越高。因此,加強(qiáng)信息系統(tǒng)的災(zāi)備建設(shè),確保在災(zāi)難發(fā)生的時(shí)候,信息系統(tǒng)上的關(guān)鍵業(yè)務(wù)和數(shù)據(jù)能夠得到保護(hù),實(shí)現(xiàn)信息系統(tǒng)數(shù)據(jù)的最小量丟失和快速恢復(fù)受到了廣泛的重視。而如何驗(yàn)證災(zāi)備信息系統(tǒng)的建設(shè)效果是當(dāng)前研究的重點(diǎn)問(wèn)題。
[0003]目前對(duì)于災(zāi)備信息系統(tǒng)的驗(yàn)證主要有兩種方式:第一種方式是利用實(shí)際環(huán)境搭建災(zāi)備中心以及災(zāi)備網(wǎng)絡(luò)并進(jìn)行實(shí)際災(zāi)備演練;第二種方式是通過(guò)搭建虛擬網(wǎng)絡(luò)環(huán)境,通過(guò)仿真的方法來(lái)模擬實(shí)際系統(tǒng)的運(yùn)行。第一種方式接近于實(shí)際,因此驗(yàn)證效果較為真實(shí),但是由于需要事先建設(shè)備份中心和備份網(wǎng)絡(luò),還需要大量的人力物力參與,成本過(guò)高、實(shí)現(xiàn)復(fù)雜,因此往往用于災(zāi)備演練而非災(zāi)備驗(yàn)證。第二種方式主要采用模擬的方法,在災(zāi)備信息系統(tǒng)建設(shè)前通過(guò)建立信息系統(tǒng)環(huán)境和業(yè)務(wù)模式進(jìn)行系統(tǒng)級(jí)仿真,從而可以快速驗(yàn)證相關(guān)技術(shù)的有效性。
[0004]根據(jù)《信息系統(tǒng)災(zāi)難恢復(fù)規(guī)范》中的定義,RTO是指災(zāi)難發(fā)生后,信息系統(tǒng)或業(yè)務(wù)能力從停頓到必須恢復(fù)的時(shí)間要求。RPO是指災(zāi)難發(fā)生后,系統(tǒng)和數(shù)據(jù)必須恢復(fù)到的時(shí)間點(diǎn)的要求。
[0005]本發(fā)明提供了一種基于兩地三中心的災(zāi)備信息系統(tǒng)仿真方法,目標(biāo)是在低成本、不影響現(xiàn)有應(yīng)用系統(tǒng)的前提下,利用仿真的方法最大程度地模擬實(shí)際災(zāi)備信息系統(tǒng)及其災(zāi)備流程。模擬搭建災(zāi)備信息系統(tǒng),是指對(duì)于系統(tǒng)中的每個(gè)數(shù)據(jù)中心通過(guò)服務(wù)器層、匯聚交換機(jī)層、核心交換機(jī)層和出口路由器層來(lái)進(jìn)行抽象,并在本中心的服務(wù)器層和匯聚交換機(jī)層、匯聚交換機(jī)層和核心交換機(jī)層、核心交換機(jī)層和出口路由器層之間以及用戶和每個(gè)數(shù)據(jù)中心的每個(gè)出口路由器之間建立雙工物理鏈路,以此作為服務(wù)器和用戶之間交互的服務(wù)鏈路,同時(shí)本系統(tǒng)利用隨機(jī)產(chǎn)生器生成的用戶編號(hào)為訪問(wèn)源、本地?cái)?shù)據(jù)中心的服務(wù)器編號(hào)為訪問(wèn)目標(biāo),通過(guò)傳輸層源代理和目的代理分別綁定到訪問(wèn)源節(jié)點(diǎn)和訪問(wèn)目標(biāo)節(jié)點(diǎn)實(shí)現(xiàn)傳輸層的連接,利用應(yīng)用層協(xié)議代理綁定到傳輸層源代理實(shí)現(xiàn)應(yīng)用層連接,并通過(guò)控制應(yīng)用層協(xié)議代理的開(kāi)始和結(jié)束時(shí)刻實(shí)現(xiàn)對(duì)一次訪問(wèn)數(shù)據(jù)流的控制。災(zāi)備流程的仿真是指通過(guò)給用戶提供充足的配置接口自動(dòng)化地實(shí)現(xiàn)災(zāi)難故障的定時(shí)發(fā)生和定時(shí)修復(fù)、故障檢測(cè)、數(shù)據(jù)中心的切換和回切、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)有效性驗(yàn)證等功能,達(dá)到低成本高效率進(jìn)行災(zāi)備演練的目的,從而對(duì)災(zāi)備建設(shè)進(jìn)行效果分析。
[0006](三)
【發(fā)明內(nèi)容】
[0007]本發(fā)明的目的在于一種基于兩地三中心的災(zāi)備信息系統(tǒng)仿真方法。該仿真按照用戶的實(shí)際需求搭建模擬的災(zāi)備信息系統(tǒng),實(shí)現(xiàn)災(zāi)難導(dǎo)致的故障的注入、故障修復(fù)、故障檢測(cè)、數(shù)據(jù)中心的切換和回切、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)有效性驗(yàn)證等災(zāi)備信息系統(tǒng)演練過(guò)程,系統(tǒng)中存在系統(tǒng)信號(hào)system_signal有三種狀態(tài):正常狀態(tài)即system_signal=normal_state,故障狀態(tài)即 system_signal=bad_state,中心替代狀態(tài)即 system_signal=replace_state,利用system_signal標(biāo)志實(shí)現(xiàn)災(zāi)備流程的控制。
[0008]本發(fā)明的目的是這樣實(shí)現(xiàn)的:
[0009]設(shè)災(zāi)備信息系統(tǒng)采用兩地三中心的架構(gòu),即包括本地?cái)?shù)據(jù)中心、本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心,且三個(gè)數(shù)據(jù)中心的軟硬件環(huán)境和網(wǎng)絡(luò)環(huán)境完全相同,假定系統(tǒng)中可能發(fā)生故障的一個(gè)組成部分稱為一個(gè)故障對(duì)象,在一個(gè)時(shí)刻一個(gè)故障對(duì)象可能是正常狀態(tài)也可能是故障狀態(tài),當(dāng)系統(tǒng)中的所有故障對(duì)象的狀態(tài)導(dǎo)致本地?cái)?shù)據(jù)中心不能正常提供服務(wù),則稱此種系統(tǒng)狀態(tài)為系統(tǒng)故障狀態(tài),第一次檢測(cè)到此種系統(tǒng)狀態(tài)的時(shí)間點(diǎn)稱為故障發(fā)生時(shí)刻,否則,稱系統(tǒng)狀態(tài)為系統(tǒng)正常狀態(tài);當(dāng)檢測(cè)到系統(tǒng)故障狀態(tài)之后,又檢測(cè)到本地?cái)?shù)據(jù)中心可以正常提供服務(wù),則稱此種系統(tǒng)狀態(tài)為系統(tǒng)修復(fù)狀態(tài),第一次檢測(cè)到此種狀態(tài)的時(shí)間點(diǎn)稱為故障修復(fù)時(shí)刻,否則,稱此種系統(tǒng)狀態(tài)為系統(tǒng)忍受狀態(tài);正常情況下,災(zāi)備信息系統(tǒng)維持一個(gè)數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心為用戶提供服務(wù),默認(rèn)的生產(chǎn)數(shù)據(jù)中心為本地?cái)?shù)據(jù)中心;在生產(chǎn)過(guò)程中,災(zāi)備信息系統(tǒng)存在的每個(gè)故障對(duì)象的狀態(tài)時(shí)刻發(fā)生變化,影響著系統(tǒng)狀態(tài)的改變,當(dāng)?shù)谝淮螜z測(cè)到系統(tǒng)狀態(tài)為系統(tǒng)故障狀態(tài),則更新系統(tǒng)信號(hào)為故障狀態(tài),即執(zhí)行system_signal=bad_state,此時(shí)災(zāi)備信息系統(tǒng)便會(huì)依次檢測(cè)本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心,若在RTO和RPO的限制內(nèi)檢測(cè)到本地備份數(shù)據(jù)中心可以提供服務(wù),則停止檢測(cè)并更新系統(tǒng)信號(hào)為中心替代狀態(tài),即執(zhí)行system_signal=replace_state,同時(shí)將數(shù)據(jù)流切換到本地備份數(shù)據(jù)中心并將本地備份數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心使用;若在RTO和RPO的限制內(nèi)檢測(cè)到異地備份數(shù)據(jù)中心可以提供服務(wù),則停止檢測(cè)并更新系統(tǒng)信號(hào)為中心替代狀態(tài),即執(zhí)行system_signal=replace_state,同時(shí)將數(shù)據(jù)流切換到異地備份數(shù)據(jù)中心,并將異地備份數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心使用;若在RTO和RPO的限制內(nèi)第一次檢測(cè)系統(tǒng)狀態(tài)為系統(tǒng)修復(fù)狀態(tài),更新系統(tǒng)信號(hào)為正常狀態(tài),即執(zhí)行syStem_signal=normal_state,重新將數(shù)據(jù)流切回到本地?cái)?shù)據(jù)中心并將本地?cái)?shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心使用;若到了 RTO和RPO限制的時(shí)間仍找不到可用的數(shù)據(jù)中心,則系統(tǒng)崩潰;本系統(tǒng)中采用源節(jié)點(diǎn)編號(hào)、目的服務(wù)器節(jié)點(diǎn)編號(hào)、流開(kāi)始時(shí)刻、流結(jié)束時(shí)刻、應(yīng)用層協(xié)議編號(hào)、實(shí)時(shí)字節(jié)、存儲(chǔ)節(jié)點(diǎn)編號(hào)、和標(biāo)識(shí)backup_or_product_flag八個(gè)字段構(gòu)成一條描述信息來(lái)描述一條數(shù)據(jù)流此刻的狀態(tài),其中,當(dāng)backup_or_product_flag值為I時(shí),表示此條描述信息描述的是當(dāng)前數(shù)據(jù)中心 生產(chǎn)的數(shù)據(jù)流的生產(chǎn)信息,當(dāng)backup_or_product_flag值為2時(shí),表示此條描述信息是其他數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流在本中心保存的備份信息,生產(chǎn)過(guò)程中以被切換的數(shù)據(jù)流信息為基礎(chǔ)新創(chuàng)建的連接到當(dāng)前數(shù)據(jù)中心的數(shù)據(jù)流、本次生產(chǎn)中以隨機(jī)產(chǎn)生的信息為基礎(chǔ)新創(chuàng)建的連接到當(dāng)前數(shù)據(jù)中心的數(shù)據(jù)流,以及當(dāng)前數(shù)據(jù)中心中所有還未結(jié)束的數(shù)據(jù)流為描述對(duì)象,構(gòu)造描述信息記錄同步寫(xiě)入到三個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中;當(dāng)切換數(shù)據(jù)中心前后需要進(jìn)行數(shù)據(jù)有效性驗(yàn)證操作時(shí),即對(duì)每個(gè)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流執(zhí)行查找是否其他兩個(gè)數(shù)據(jù)中心均存在備份,則有效數(shù)據(jù)計(jì)數(shù)器validationresult_is_hit_num 加 I,否則,無(wú)效數(shù)據(jù)計(jì)數(shù)器 validation_result_is_miss_num 加 I的操作,最后將驗(yàn)證時(shí)刻和驗(yàn)證結(jié)果構(gòu)成驗(yàn)證結(jié)果描述信息記錄寫(xiě)入到驗(yàn)證結(jié)果存儲(chǔ)文件中,從而方便驗(yàn)證本系統(tǒng)中對(duì)零數(shù)據(jù)丟失的實(shí)現(xiàn);本系統(tǒng)中利用公式“估算存儲(chǔ)量=
(數(shù)據(jù)流結(jié)束時(shí)til-數(shù)據(jù)流開(kāi)始時(shí)^l)*數(shù)據(jù)包極限大小” 士控3 +Ji +P hh -1- PM ?Λ, +? //?- ΗΠ-l.+-^^
^-數(shù)據(jù)流發(fā) 據(jù)包纟隔-絲冑-/欠.灘流白勺棚勺fei乍鳥(niǎo)絲存儲(chǔ)設(shè)備的剩余空間不小于本次數(shù)據(jù)流的估算值,則存儲(chǔ),否則,系統(tǒng)警報(bào)存儲(chǔ)空間不足,系統(tǒng)崩潰;本系統(tǒng)中設(shè)置變量been_changed_datacenter_num,其值只有I和2,用來(lái)識(shí)別被切換的數(shù)據(jù)流的來(lái)源,假設(shè)當(dāng)前由本地?cái)?shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心,若been_Changed_datacenter_num=l,則此時(shí)被切換的數(shù)據(jù)流的來(lái)源為本地備份數(shù)據(jù)中心,否則,此時(shí)被切換的數(shù)據(jù)流的來(lái)源為異地備份數(shù)據(jù)中心;假設(shè)當(dāng)前由本地備份數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心,若been_changed_datacenter_num=l,則此時(shí)被切換的數(shù)據(jù)流的來(lái)源為本地?cái)?shù)據(jù)中心,否貝U,此時(shí)被切換的數(shù)據(jù)流的來(lái)源為異地備份數(shù)據(jù)中心;假設(shè)當(dāng)前由異地備份數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心,若been_changed_datacenter_num=l,則此時(shí)被切換的數(shù)據(jù)流的來(lái)源為本地?cái)?shù)據(jù)中心,否則,此時(shí)被切換的數(shù)據(jù)流的來(lái)源為本地備份數(shù)據(jù)中心;
[0010]設(shè)用戶設(shè)置了參數(shù)包括生產(chǎn)結(jié)束時(shí)刻user_set_product_end_time、存儲(chǔ)服務(wù)器的最大存儲(chǔ)能力user_set_max_store_size和數(shù)據(jù)流發(fā)送的一個(gè)數(shù)據(jù)包的最大值user_set_max_packet_size ;設(shè)系統(tǒng)中存在三個(gè)數(shù)據(jù)流信息存儲(chǔ)文件用于分別存儲(chǔ)對(duì)應(yīng)的數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的信息,存在一個(gè)仿真結(jié)束原因記錄文件用于存儲(chǔ)仿真結(jié)束的原因,并且存在一個(gè)數(shù)據(jù)有效性驗(yàn)證結(jié)果存儲(chǔ)文件用于存儲(chǔ)系統(tǒng)中對(duì)數(shù)據(jù)進(jìn)行有效性驗(yàn)證的結(jié)果;設(shè)災(zāi)備信息系統(tǒng)中每個(gè)數(shù)據(jù)中心的出口路由器層設(shè)備個(gè)數(shù)為C1,核心交換機(jī)層設(shè)備個(gè)數(shù)為C2,匯聚交換機(jī)層設(shè)備個(gè)數(shù)為C3,服務(wù)器層應(yīng)用服務(wù)器設(shè)備個(gè)數(shù)為C4,服務(wù)器層存儲(chǔ)服務(wù)器設(shè)備個(gè)數(shù)為C5,則按照從出口路由器層到核心交換層到匯聚交換機(jī)層再到服務(wù)器層的順序,對(duì)于每一層的設(shè)備節(jié)點(diǎn)按照本地?cái)?shù)據(jù)中心到本地備份數(shù)據(jù)中心再到異地備份數(shù)據(jù)中心的順序遵循遞增規(guī)律設(shè)置整型編號(hào)后,則本地?cái)?shù)據(jù)中心的出口路由器編
號(hào)依次為1,2,......,C1,本地備份數(shù)據(jù)中心的出口路由器編號(hào)依次為Cl+1,Cl+2,......,
2c1;異地備份數(shù)據(jù)中心的出口路由器編號(hào)依次為2Cl+l,2Cl+2,......,3c1;本地?cái)?shù)據(jù)中
心的核心交換機(jī)編號(hào)依次為3Cl+l,3Cl+2,......, 3ci+c2,本地備份數(shù)據(jù)中心的核心交換
機(jī)編號(hào)依次為3ci+c2+l,3Cl +c2+2,......,3ci+2c2,異地本地備份數(shù)據(jù)中心的核心交換機(jī)
編號(hào)依次為3Cl+2c2+l,3Cl+2c2+2,......,3ci+3c2,本地?cái)?shù)據(jù)中心的匯聚交換機(jī)編號(hào)依次
為3Cl+3c2+l,3Cl+3c2+2,......,3ci+3c2+c3,本地備份數(shù)據(jù)中心的匯聚交換機(jī)編號(hào)依次為
3(^+3(32+(33+1, 3(^+3(32+(33+2,......, 3(^+3(32+2(33,異地備份數(shù)據(jù)中心的匯聚交換機(jī)編號(hào)依次
為3Cl+3c2+2c3+l,3Cl+3c2+2c3+2,……,3ci+3c2+3c3,本地?cái)?shù)據(jù)中心的應(yīng)用服務(wù)器編號(hào)依次
為3(^+3(32+3(33+1, 3CJ+3C2+3C3+2,......, 3(^+3(^+3?+?,本地備份數(shù)據(jù)中心的應(yīng)用服務(wù)器編
號(hào)依次為 3(^+3(32+3(^+(34+1, 3CJ+3C2+3C3+C4+2,......,3(^+3(32+3(^+2(34,異地備份數(shù)據(jù)中心
的應(yīng)用服務(wù)器編號(hào)依次為 3(^+3(^+3(^+2(34+1, 3(^+3(^+3(^+2(34+2,......, 3(^+3(^+3(^+3(?,
本地?cái)?shù)據(jù)中心的存儲(chǔ)服務(wù)器編號(hào)依次為3ci+3c2+3c3+3c4+l,3Cl+3c2+3c3+3c4+2,……,3(^+3(^+3(^+3(^+(^,本地備份數(shù)據(jù)中心的存儲(chǔ)服務(wù)器編號(hào)依次為3(^+3(^+3(^+3(^+(^+1,
3CJ+3C2+3C3+3C4+C5+2,......, 3(^+3(32+3(33+3(34+2(35,異地備份數(shù)據(jù)中心的存儲(chǔ)服務(wù)器編號(hào)
依次為 3(^+3(32+3(33+3(34++2(35+1,3(^+3(32+3(33+2(34+2(35+2,......,3(^+3(32+3(33+3(34+3(35,我
們?cè)O(shè)定三個(gè)數(shù)據(jù)中心中的每個(gè)硬件層次上編號(hào)差值為本層設(shè)備個(gè)數(shù)的硬件設(shè)備擁有的完全相同的服務(wù)能力;設(shè)該系統(tǒng)存在m個(gè)用戶節(jié)點(diǎn),編號(hào)依次為3C1+3C2+3C3+3C4+3C5+1,
3CJ+3C2+3C3+3C4+3C5+2,......, 3c1+3c2+3c3+3c4+3c5+m ;設(shè)系統(tǒng)中包括 p 種應(yīng)用層協(xié)議;設(shè)該
系統(tǒng)包含η個(gè)故障對(duì)象,故障對(duì)象i的狀態(tài)值表示為Ni,其中,i=l,2,......,n,且每個(gè)故障
對(duì)象的狀態(tài)值只有I和O兩種,I表示故障對(duì)象處于正常狀態(tài),O表示故障對(duì)象處于故障狀態(tài),當(dāng)故障對(duì)象1,2,……,nl的狀態(tài)值均為I時(shí)候,本地?cái)?shù)據(jù)中心可正常提供服務(wù),否則,本地?cái)?shù)據(jù)中心不能正常提供服務(wù);當(dāng)故障對(duì)象nl+l,nl+2,……,nl+n2的狀態(tài)值均為I時(shí)候,本地備份數(shù)據(jù)中心可正常提供服務(wù),否則,本地?cái)?shù)據(jù)中心不能正常提供服務(wù);當(dāng)故障對(duì)
象nl+n2+l,nl+n2+2,......,nl+n2+n3的狀態(tài)值均為I時(shí)候,異地備份數(shù)據(jù)中心可正常提供
服務(wù),否則,異地備份數(shù)據(jù)中心不能正常提供服務(wù),則基于兩地三中心的災(zāi)備信息系統(tǒng)仿真方法的具體方法步驟為:
[0011](I)根據(jù)用戶設(shè)置參數(shù) user_set_product_end_time、user_set_max_packet_size和user_set_max_store_size,利用隨機(jī)數(shù)生成器生成隨機(jī)參數(shù),包括:生產(chǎn)結(jié)束時(shí)刻 product_end_time e [O, user_set_product_end_time]、數(shù)據(jù)包大小的極限值 max_packet_size e [O, user_set_max_packet_size]、RTO 極限值 rto_time e [O, product_end_time]、RPO 極限值 rpo_time e [O, product_end_time]、存儲(chǔ)服務(wù)器的存儲(chǔ)能力max_store_size e [O, user_set_max_store_size]、數(shù)據(jù)流發(fā)送間隔 send_interval_time e [O, product_end_time]、故障發(fā)生時(shí)刻 down_time e [O, product_end_time],故障維持時(shí)間down_period e [O, product_end_time],故障對(duì)象i在系統(tǒng)初始化時(shí)刻對(duì)應(yīng)的的狀態(tài)Njnitialstatei e {0,1},故障對(duì)象i在故障發(fā)生時(shí)刻對(duì)應(yīng)的狀態(tài)N_down_Statei e {0,1},以及故障對(duì)象i在故障修復(fù)時(shí)刻對(duì)應(yīng)的狀態(tài)N_up_statei e {0,1},其中,i=l,2,......, η ;
[0012](2)初始化表示本地?cái)?shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量local_product_num、本地備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量localbackup_product_num和異地備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量remotebackup_product_num,初始值均為O ;初始化表示當(dāng)前的生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量temp_product_num和分別表示當(dāng)前的兩個(gè)備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量templ_product_num、temp2_product_num,初始值均為
0;初始化表示從當(dāng)前兩個(gè)備份數(shù)據(jù)中心切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)流的目的服務(wù)器節(jié)點(diǎn)編號(hào)的增加值的變量id_ diff_l和id_diff_2,均初始化為O ;初始化表示三個(gè)數(shù)據(jù)中心各自生產(chǎn)的數(shù)據(jù)流的源節(jié)點(diǎn)編號(hào)、目的服務(wù)器節(jié)點(diǎn)編號(hào)、流開(kāi)始時(shí)刻、流結(jié)束時(shí)刻、應(yīng)用層協(xié)議編號(hào)和存儲(chǔ)服務(wù)器編號(hào)信息的生產(chǎn)信息的數(shù)組變量,初始值均為O ;初始化表示各存儲(chǔ)服務(wù)器的已占空間大小的數(shù)組變量store,初始值均為O,即執(zhí)行store(il)=0,其中,
11=3(^+3(32+3(33+3(34+1,3CJ+3C2+3C3+3C4+11......,3CJ+3C2+3C3+3C4+3C5 ;初始化系統(tǒng){目號(hào)為正
常狀態(tài),即執(zhí)行system_signal=normal ;初始化所有故障對(duì)象的狀態(tài)為正常,即執(zhí)行Ni2=I,其中,i2=l,2,......, η ;初始化表示故障修復(fù)時(shí)刻的變量up_time,即執(zhí)行up_time=0 ;
[0013](3)初始化所有故障對(duì)象的狀態(tài),即在系統(tǒng)開(kāi)始運(yùn)行之時(shí)執(zhí)行Ni3=N_initial_Statei3 的操作,其中,i3=l,2,......,η;
[0014](4)向系統(tǒng)注入定時(shí)的故障,即在down_t ime對(duì)系統(tǒng)中的所有故障對(duì)象執(zhí)打Ni4=N_down_statei4的操作,計(jì)算故障修復(fù)時(shí)刻并向系統(tǒng)注入定時(shí)的故障恢復(fù),即執(zhí)行up_
time=down_time+down_period,并在 up_time 執(zhí)行 Ni4=N_upi4 的操作,其中,i4=l, 2,......,
η ;
[0015](5)獲取當(dāng)前執(zhí)行時(shí)刻current_time,并比較current_time是否小于product_end_time,若是,則執(zhí)行步驟(6);
[0016]否則,將“當(dāng)前執(zhí)行時(shí)刻到達(dá)生產(chǎn)結(jié)束時(shí)刻,仿真結(jié)束”字樣寫(xiě)入仿真結(jié)束原因記錄文件,執(zhí)行步驟(37);
[0017](6)以當(dāng)前執(zhí)行時(shí)刻作為流開(kāi)始時(shí)刻,即執(zhí)行new_flow_start_time=current_time,利用隨機(jī)數(shù)生成器產(chǎn)生本次新數(shù)據(jù)流的隨機(jī)信息,包括源節(jié)點(diǎn)編號(hào)new_flow_from_id e [30^302+303+304+305+1, 3c1+3c2+3c3+3c4+3c5+m]、目的服務(wù)器節(jié)點(diǎn)編號(hào) new_f low_to_id e [3(^+3(32+3(33+1, 3(^+3(32+3(33+(34]、數(shù)據(jù)流結(jié)束時(shí)刻 new_flow_end_time e [new_flow_start_time, product_end_time],以及應(yīng)用層協(xié)議編號(hào) new_f low_app_app_protocol_id e [I, p],同時(shí)系統(tǒng)從存儲(chǔ)開(kāi)始節(jié)點(diǎn)開(kāi)始尋找存儲(chǔ)節(jié)點(diǎn)id,滿足其剩余空間max_store_size-store(id)不小于當(dāng)前數(shù)據(jù)流產(chǎn)生的數(shù)據(jù)量的估算值,若能找到這樣的id,則將節(jié)點(diǎn)編號(hào)i作為此次數(shù)據(jù)流的存儲(chǔ)字段值,即執(zhí)行new_flow_store_id=id,執(zhí)行步驟(7);
[0018]否則,將“存儲(chǔ)設(shè)備不足,仿真結(jié)束”寫(xiě)入仿真結(jié)束原因記錄文件,并執(zhí)行步驟
(37);
[0019] (7)檢測(cè)故障對(duì)象1,2,……,nl的狀態(tài),若對(duì)于Vi5 e [I, nl],都有Ni5=I,則判定
本地?cái)?shù)據(jù)中心可以為用戶提供服務(wù),執(zhí)行步驟(10);
[0020]否則,執(zhí)行步驟(8);
[0021](8)檢測(cè)故障對(duì)象 nl+1, nl+2,......, nl+n2 的狀態(tài),若對(duì)于Vi6 G [nl + I, nl +
n2]邵有Ni6=I,則判定本地備份數(shù)據(jù)中心可以為用戶提供服務(wù),執(zhí)行步驟(34);否則,執(zhí)行步驟(9);
[0022](9)檢測(cè)故障對(duì)象nl+n2+l,nl+n2+2,……,η的狀態(tài),若對(duì)于Vi7 e[nl + n2 + l,nl + n2+ n3],都有Ni7=I,則判定異地備份數(shù)據(jù)中心可以為用戶提供服務(wù),
則執(zhí)行步驟(35);
[0023]否則,執(zhí)行步驟(36);
[0024](10)檢測(cè)系統(tǒng)信號(hào),若 system_signal=bad_state 或者 system_signal=replace_state,則將系統(tǒng)信號(hào)更新為正常狀態(tài),即執(zhí)行system_signal=normal_state,同時(shí)將本地?cái)?shù)據(jù)中心更新為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,將本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心更新為此時(shí)的兩個(gè)備份數(shù)據(jù)中心,同時(shí)更新當(dāng)前的生產(chǎn)數(shù)據(jù)中心和備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的個(gè)數(shù),即執(zhí)行 temp_product_num=local_product_num, templ_product_num=localbackup_product_num, temp2_product_num=remotebackup_product_num,并設(shè)置從當(dāng)前兩個(gè)備份數(shù)據(jù)中心切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)流的目的服務(wù)器節(jié)點(diǎn)編號(hào)的增加值,即執(zhí)行id_diff_l=-c4, id_diff_2=_2c4,執(zhí)行步驟(11);
[0025]否則,執(zhí)行步驟(30);
[0026](11)記錄當(dāng)前時(shí)刻 current_time,并比較 current_time 是否小于 rto_time 和rpo_time,若是,則執(zhí)行步驟(12);
[0027]否則,將“在RTO和RPO設(shè)置的時(shí)間內(nèi)找不到數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心為用戶提
供
[0028]服務(wù),仿真結(jié)束”字樣寫(xiě)入仿真結(jié)束原因記錄文件,并執(zhí)行步驟(37);
[0029](12)進(jìn)行切換數(shù)據(jù)流之前的數(shù)據(jù)有效性驗(yàn)證操作,即對(duì)本地?cái)?shù)據(jù)中心、本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心依次執(zhí)行在此數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中查找backup—or—product—fIag=I的記錄rl,并在另外兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中查找backup—or—product—flag=2且其他描述字段值均與記錄rI中對(duì)應(yīng)的字段值相同的記錄 r2,若記錄 r2 存在,則 validation—result—is—hit—num 加 I ;
[0030]否則,執(zhí)行validation—result—is—miss—num 加 I ;
[0031](13)將當(dāng)前執(zhí)行時(shí)刻 current—time 和驗(yàn)證結(jié)果 validation—result—is—hit—num λ vali dat i on_resu 11—i s—mi s s—num存儲(chǔ)到存儲(chǔ)驗(yàn)證結(jié)果的文件中,同時(shí)初始化計(jì)數(shù)器i8=0,初始化本次中心切換操作已被執(zhí)行切換數(shù)據(jù)流操作的數(shù)據(jù)中心的個(gè)數(shù)been—changed_datacenter_num=l ;
[0032](14)比較i8是否小于或等于templ_product_num,若是,則執(zhí)行步驟(15);
[0033]否則,執(zhí)行步驟(26);
[0034](15)獲取當(dāng)前時(shí)刻current_time,并比較current_time是否小于或等于templ_end_time (i8),若是,則執(zhí)行步驟(17);
[0035]否則,執(zhí)行i8加I,并執(zhí)行步驟(16);
[0036](16)檢測(cè) been_changed_datacenter_num 的值,若 been_changed_datacenter_num值為I,則執(zhí)行步驟(14);
[0037]否則,執(zhí)行步驟(27);
[0038](17)將此條數(shù)據(jù)流切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心,并建立新的傳輸層連接,同時(shí)從存儲(chǔ)開(kāi)始節(jié)點(diǎn)開(kāi)始尋找存儲(chǔ)節(jié) 點(diǎn)id,滿足其剩余空間max_store_size_store (id)不小于當(dāng)前數(shù)據(jù)流產(chǎn)生的數(shù)據(jù)量的估算值,若能找到這樣的id,則將此id選為當(dāng)前被切換的數(shù)據(jù)流的存儲(chǔ)服務(wù)器位置,執(zhí)行步驟(18);
[0039]否則,將“存儲(chǔ)設(shè)備不足,仿真結(jié)束”字樣寫(xiě)入仿真結(jié)束原因記錄文件,執(zhí)行步驟(37);
[0040](18)檢測(cè)本地?cái)?shù)據(jù)中心是否為當(dāng)前生產(chǎn)數(shù)據(jù)中心,即比較當(dāng)前生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流訪問(wèn)的應(yīng)用服務(wù)器編號(hào)是否小于或者等于本地?cái)?shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(^+3?+?,若是,確定本地?cái)?shù)據(jù)中心為當(dāng)前生產(chǎn)數(shù)據(jù)中心,設(shè)backup_or_product=l,獲得此數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte,此時(shí),對(duì)數(shù)據(jù)流的描述字段均已獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到本地?cái)?shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí)設(shè)backup_0r_product=2,構(gòu)成備份信息記錄寫(xiě)入到其他兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,temp_product_num加I,執(zhí)行步驟(19);否則,執(zhí)行步驟(21);
[0041](19)檢測(cè) been_changed_datacenter_num 的值,若 been_changed_datacenter_num值為1,則確定此條被切換的數(shù)據(jù)流來(lái)自本地備份數(shù)據(jù)中心,將此被切換的數(shù)據(jù)流在本地備份數(shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加1,并執(zhí)行步驟(16);
[0042]否則,執(zhí)行步驟(20 );
[0043](20)將此被切換的數(shù)據(jù)流在異地備份中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加1,執(zhí)行步驟(16);
[0044](21)檢測(cè)本地備份數(shù)據(jù)中心是否為當(dāng)前生產(chǎn)數(shù)據(jù)中心,即比較當(dāng)前生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流訪問(wèn)的應(yīng)用服務(wù)器編號(hào)是否大于本地?cái)?shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(^+3?+?且小于或等于本地備份數(shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(^+3(^+2?,若是,則確定本地備份數(shù)據(jù)中心為當(dāng)前生產(chǎn)數(shù)據(jù)中心,設(shè)backup_or_product=l,獲得此數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte,此時(shí),對(duì)數(shù)據(jù)流的描述字段均已獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到本地備份數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí)設(shè)backup_or_product=2,構(gòu)造備份信息記錄寫(xiě)入到其他數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,t emp_prο du c t_num加I,執(zhí)行步驟(22);
[0045]否則,異地備份數(shù)據(jù)中心為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,設(shè)backup_or_product=l,獲得此數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte,此時(shí)對(duì)數(shù)據(jù)流的描述字段均已經(jīng)獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到異地備份數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí)設(shè)backup_or_product=2,構(gòu)造備份信息記錄寫(xiě)入到其他數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,temp_product_num 加 I,執(zhí)行步驟(24);
[0046](22)檢測(cè) been_changed_datacenter_num 的值,若 been_changed_datacenter_num值為1,則確定此條被切換的數(shù)據(jù)流來(lái)自本地?cái)?shù)據(jù)中心,將此被切換的數(shù)據(jù)流在本地?cái)?shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加I,并執(zhí)行步驟(16);;
[0047]否則,確定此條被切換的數(shù)據(jù)流來(lái)自異地備份數(shù)據(jù)中心,執(zhí)行步驟(23);
[0048](23)將此被切換的數(shù)據(jù)流在異地備份數(shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加1,并執(zhí)行步驟(16);
[0049](24)檢測(cè) been_changed_datacenter_num 的值,若 been_changed_datacenter_num值為1,則確定此條被切換的數(shù)據(jù)流來(lái)自本地?cái)?shù)據(jù)中心,將此被切換的數(shù)據(jù)流在本地?cái)?shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加1,并執(zhí)行步驟(16);
[0050]否則,確定此條被切換的數(shù)據(jù)流來(lái)自本地備份數(shù)據(jù)中心,執(zhí)行步驟(25 );
[0051](25)將此被切換的數(shù)據(jù)流在本地備份數(shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加1,并執(zhí)行步驟(16);
[0052](26)將另一個(gè)數(shù)據(jù)中心的數(shù)據(jù)流切換到當(dāng)前的生產(chǎn)數(shù)據(jù)中心,更新本次中心切換中已被執(zhí)行切換數(shù)據(jù)流操作的數(shù)據(jù)中心的個(gè)數(shù)been_changed_datacenter_num=2,并執(zhí)行i8=0,templ_product_num=temp2_product_num, id_diff_l=id_diff_2 ;
[0053](27)比較i8是否小于或等于templ_product_num,若是,則執(zhí)行步驟(15);
[0054]否則,數(shù)據(jù)流切換完成,更新當(dāng)前數(shù)據(jù)中心的生產(chǎn)信息,即執(zhí)行步驟(28);
[0055](28)進(jìn)行切換數(shù)據(jù)流之后的數(shù)據(jù)有效性驗(yàn)證操作,即對(duì)本地?cái)?shù)據(jù)中心、本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心依次執(zhí)行在此數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中查找backup_or_product_flag=l的記錄r3,并在另外兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中查找backup_or_product_flag=2且其他描述字段值均與記錄r3中對(duì)應(yīng)的字段值相同的記錄 r4,若記錄 r4 存在,則 validation_result_is_hit_num 加 I ;
[0056]否則,執(zhí)行 validation_result_is_miss_num 加 I ;
[0057](29)將當(dāng)前執(zhí)行時(shí)刻 current_time 和驗(yàn)證結(jié)果 validation_result_is_hit_num、validation_result_is_miss_num存儲(chǔ)到存儲(chǔ)驗(yàn)證結(jié)果的文件中;
[0058](30)根據(jù)前面步驟(6)中新產(chǎn)生的數(shù)據(jù)流的信息對(duì)新數(shù)據(jù)流建立傳輸層和應(yīng)用層連接,同時(shí)記錄新數(shù)據(jù)流信息,temp_product_num加I ;[0059](31)檢測(cè)本地?cái)?shù)據(jù)中心是否為當(dāng)前生產(chǎn)數(shù)據(jù)中心,即比較當(dāng)前生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流訪問(wèn)的應(yīng)用服務(wù)器編號(hào)是否小于或者等于本地?cái)?shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3ci+3c2+3c3+c4,若是,則確定本地?cái)?shù)據(jù)中心為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,并更新本地?cái)?shù)據(jù)中心的生產(chǎn)的數(shù)據(jù)流信息,并更新其生產(chǎn)數(shù)目,即執(zhí)行l(wèi)ocal_product_num=temp_product_num, backup_or_product_f lag (i9) =1,獲得當(dāng)前數(shù)據(jù)流的實(shí)時(shí)字節(jié) real_byte (i9),此時(shí)對(duì)數(shù)據(jù)流的描述字段均已經(jīng)獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到當(dāng)前作為生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí),執(zhí)行backup_or_product_f lag (i9) =2,構(gòu)造備份信息記錄寫(xiě)入到其他兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,其中,i9=0,l,……,local_product_num,執(zhí)行步驟(5); [0060]否則,即執(zhí)行步驟(32);
[0061](32)檢測(cè)本地備份數(shù)據(jù)中心是否為當(dāng)前生產(chǎn)數(shù)據(jù)中心比較當(dāng)前生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流訪問(wèn)的應(yīng)用服務(wù)器編號(hào)是否大于本地?cái)?shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(^+3?+?且小于或等于本地備份數(shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(32+3(33+2(34,若是,則確定本地備份數(shù)據(jù)中心為當(dāng)前生產(chǎn)數(shù)據(jù)中心,更新本地備份數(shù)據(jù)中心的生產(chǎn)信息和其生產(chǎn)數(shù)目,即執(zhí)行l(wèi)ocalbackup_product_ _num=temp—product—num,backup_or_product_f lag (i 10)=1,獲得當(dāng)前數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte(ilO),此時(shí)對(duì)數(shù)據(jù)流的描述字段均已獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到本地?cái)?shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí)執(zhí)行backup_or_product_flag(il0)=2,構(gòu)造信息記錄寫(xiě)入到其他兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,其中,il0=0,1,......, localbackup_product_num,執(zhí)行步驟(5);
[0062]否則,確定異地備份數(shù)據(jù)中心為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,執(zhí)行步驟(33);
[0063](33)更新異地備份數(shù)據(jù)中心的生產(chǎn)信息和其生產(chǎn)數(shù)目,即執(zhí)行rem0tebaCkUp_pr ο due t_num=t emp_pr ο due t_num, backup_or_product_f lag (ill) =1,獲得當(dāng)前數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte (ill),此時(shí),對(duì)數(shù)據(jù)流的描述字段均已獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到本地?cái)?shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,執(zhí)行backup_or_product_flag(ill)=2,構(gòu)造備份信息記錄寫(xiě)入到其他兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,其中,ill=0,1,......, remotebackup_product_num,執(zhí)行步驟(5);
[0064](34)檢測(cè)系統(tǒng)信號(hào),若system_signal=bad_state,則將系統(tǒng)信號(hào)更新為中心替代信號(hào),即執(zhí)行system_signal=replace_state,同時(shí)將本地備份數(shù)據(jù)中心更新為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,將本地?cái)?shù)據(jù)中心和異地備份數(shù)據(jù)中心更新為當(dāng)前的備份數(shù)據(jù)中心,同時(shí)更新當(dāng)前的生產(chǎn)數(shù)據(jù)中心和備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的個(gè)數(shù),即執(zhí)行temp_(product_num)=localbackup_(product_num), templ_product_num=localbackup_product_num,templ_product_num=remotebackup_product_num,并設(shè)置從當(dāng)前兩個(gè)備份數(shù)據(jù)中心切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)流的目的服務(wù)器節(jié)點(diǎn)編號(hào)的增加值,即執(zhí)行id_diff_l=c4,id_diff_2=-c4,并執(zhí)行步驟(11);
[0065]否則,執(zhí)行步驟(30 );
[0066](35)檢測(cè)系統(tǒng)信號(hào),若system_signal=bad_state,則將系統(tǒng)信號(hào)更新為中心替代信號(hào),即執(zhí)行system_signal=replace_state,同時(shí)將異地備份數(shù)據(jù)中心更新為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,將本地?cái)?shù)據(jù)中心和本地備份數(shù)據(jù)中心更新為當(dāng)前的備份數(shù)據(jù)中心,同時(shí)更新當(dāng)前的生產(chǎn)數(shù)據(jù)中心和備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的個(gè)數(shù),即執(zhí)行temp_product_num=remotebackup_product_num, templ_product_num=local_product_num, temp2_product—num=localbackup—product—num,并設(shè)置從當(dāng)前兩個(gè)備份數(shù)據(jù)中心切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)流的目的服務(wù)器節(jié)點(diǎn)編號(hào)的增加值,即執(zhí)行id—diff—1=2c4,id—diff—2=c4,并執(zhí)行步驟(11);
[0067]否則,執(zhí)行步驟(30);
[0068](36)獲取當(dāng)前執(zhí)行時(shí)刻current_time,并將判斷current_time是否小于rto_time和rpo_time,若是,則系統(tǒng)繼續(xù)忍受,執(zhí)行步驟(5);
[0069]否則,將“在RTO和RPO設(shè)置的時(shí)間內(nèi)找不到數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心為用戶提供服務(wù),仿真結(jié)束”字樣寫(xiě)入仿真結(jié)束原因記錄文件,并執(zhí)行步驟(37);
[0070](37)仿真結(jié)束;
[0071]本發(fā)明的關(guān)鍵在于如何搭建災(zāi)備信息系統(tǒng)以及實(shí)現(xiàn)災(zāi)備過(guò)程。為此,通過(guò)給用戶提供配置接口控制搭建災(zāi)備信息系統(tǒng),并通過(guò)定時(shí)注入故障發(fā)生和故障修復(fù)來(lái)實(shí)現(xiàn)計(jì)劃性災(zāi)難的模擬,最后通過(guò)設(shè)定變量的控制,仿真實(shí)現(xiàn)了正常階段的本地?cái)?shù)據(jù)中心正常生產(chǎn)的過(guò)程、故障發(fā)生時(shí)切換到備用的數(shù)據(jù)中心過(guò)程、故障修復(fù)時(shí)回切到本地?cái)?shù)據(jù)中心的過(guò)程,并在整個(gè)災(zāi)備過(guò)程中實(shí)現(xiàn)了詳細(xì)的信息記錄以及數(shù)據(jù)有效性驗(yàn)證操作,從而既實(shí)現(xiàn)了對(duì)災(zāi)備信息系統(tǒng)的搭建過(guò)程又實(shí)現(xiàn)了災(zāi)備過(guò)程的說(shuō)明。
[0072]其主要?jiǎng)?chuàng)新點(diǎn)如下:
[0073]1.提供了充分的配置接口,可滿足不同用戶使用的需求。
[0074]2.提供了計(jì)劃性災(zāi)難的配置接口,方便用戶實(shí)現(xiàn)不同類型的計(jì)劃性災(zāi)難的注入。
[0075]3.實(shí)現(xiàn)了系統(tǒng)高度的自動(dòng)化管理,用戶配置參數(shù)之后無(wú)需參數(shù)到災(zāi)備過(guò)程中。
[0076]4.提供了災(zāi)難恢復(fù)數(shù)據(jù)有效性驗(yàn)證的功能,實(shí)現(xiàn)在中心切換和回切之后自動(dòng)進(jìn)行數(shù)據(jù)有效性驗(yàn)證的過(guò)程。
[0077]5.實(shí)現(xiàn)備份數(shù)據(jù)和生產(chǎn)數(shù)據(jù)的混合存儲(chǔ),大大節(jié)省了存儲(chǔ)空間;
(四)【專利附圖】
【附圖說(shuō)明】
[0078]圖1、災(zāi)備信息系統(tǒng)架示意圖
(五)【具體實(shí)施方式】
[0079]下面結(jié)合附圖舉例對(duì)本發(fā)明做更詳細(xì)地描述:
[0080]本發(fā)明所述方法的特征在于:
[0081]設(shè)災(zāi)備信息系統(tǒng)采用兩地三中心的架構(gòu),即包括本地?cái)?shù)據(jù)中心、本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心,且三個(gè)數(shù)據(jù)中心的軟硬件環(huán)境和網(wǎng)絡(luò)環(huán)境完全相同,假定系統(tǒng)中可能發(fā)生故障的一個(gè)組成部分稱為一個(gè)故障對(duì)象,在一個(gè)時(shí)刻一個(gè)故障對(duì)象可能是正常狀態(tài)也可能是故障狀態(tài),當(dāng)系統(tǒng)中的所有故障對(duì)象的狀態(tài)導(dǎo)致本地?cái)?shù)據(jù)中心不能正常提供服務(wù),則稱此種系統(tǒng)狀態(tài)為系統(tǒng)故障狀態(tài),第一次檢測(cè)到此種系統(tǒng)狀態(tài)的時(shí)間點(diǎn)稱為故障發(fā)生時(shí)刻,否則,稱系統(tǒng)狀態(tài)為系統(tǒng)正常狀態(tài);當(dāng)檢測(cè)到系統(tǒng)故障狀態(tài)之后,又檢測(cè)到本地?cái)?shù)據(jù)中心可以正常提供服務(wù),則稱此種系統(tǒng)狀態(tài)為系統(tǒng)修復(fù)狀態(tài),第一次檢測(cè)到此種狀態(tài)的時(shí)間點(diǎn)稱為故障修復(fù)時(shí)刻,否則,稱此種系統(tǒng)狀態(tài)為系統(tǒng)忍受狀態(tài);正常情況下,災(zāi)備信息系統(tǒng)維持一個(gè)數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心為用戶提供服務(wù),默認(rèn)的生產(chǎn)數(shù)據(jù)中心為本地?cái)?shù)據(jù)中心;在生產(chǎn)過(guò)程中,災(zāi)備信息系統(tǒng)存在的每個(gè)故障對(duì)象的狀態(tài)時(shí)刻發(fā)生變化,影響著系統(tǒng)狀態(tài)的改變,當(dāng)?shù)谝淮螜z測(cè)到系統(tǒng)狀態(tài)為系統(tǒng)故障狀態(tài),則更新系統(tǒng)信號(hào)為故障狀態(tài),即執(zhí)行system_signal=bad_state,此時(shí)災(zāi)備信息系統(tǒng)便會(huì)依次檢測(cè)本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心,若在RTO和RPO的限制內(nèi)檢測(cè)到本地備份數(shù)據(jù)中心可以提供服務(wù),則停止檢測(cè)并更新系統(tǒng)信號(hào)為中心替代狀態(tài),即執(zhí)行system_signal=replace_state,同時(shí)將數(shù)據(jù)流切換到本地備份數(shù)據(jù)中心并將本地備份數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心使用;若在RTO和RPO的限制內(nèi)檢測(cè)到異地備份數(shù)據(jù)中心可以提供服務(wù),則停止檢測(cè)并更新系統(tǒng)信號(hào)為中心替代狀態(tài),即執(zhí)行system_signal=replace_state,同時(shí)將數(shù)據(jù)流切換到異地備份數(shù)據(jù)中心,并將異地備份數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心使用;若在RTO和RPO的限制內(nèi)第一次檢測(cè)系統(tǒng)狀態(tài)為系統(tǒng)修復(fù)狀態(tài),更新系統(tǒng)信號(hào)為正常狀態(tài),即執(zhí)行syStem_signal=normal_state,重新將數(shù)據(jù)流切回到本地?cái)?shù)據(jù)中心并將本地?cái)?shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心使用;若到了 RTO和RPO限制的時(shí)間仍找不到可用的數(shù)據(jù)中心,則系統(tǒng)崩潰;本系統(tǒng)中采用源節(jié)點(diǎn)編號(hào)、目的服務(wù)器節(jié)點(diǎn)編號(hào)、流開(kāi)始時(shí)刻、流結(jié)束時(shí)刻、應(yīng)用層協(xié)議編號(hào)、實(shí)時(shí)字節(jié)、存儲(chǔ)節(jié)點(diǎn)編號(hào)、和標(biāo)識(shí)backup_or_product_flag八個(gè)字段構(gòu)成一條描述信息來(lái)描述一條數(shù)據(jù)流此刻的狀態(tài),其中,當(dāng)backup_or_product_flag值為I時(shí),表示此條描述信息描述的是當(dāng)前數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的生產(chǎn)信息,當(dāng)backup_or_product_flag值為2時(shí),表示此條描述信息是其他數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流在本中心保存的備份信息,生產(chǎn)過(guò)程中以被切換的數(shù)據(jù)流信息為基礎(chǔ)新創(chuàng)建的連接到當(dāng)前數(shù)據(jù)中心的數(shù)據(jù)流、本次生產(chǎn)中以隨機(jī)產(chǎn)生的信息為基礎(chǔ)新創(chuàng)建的連接到當(dāng)前數(shù)據(jù)中心的數(shù)據(jù)流,以及當(dāng)前數(shù)據(jù)中心中所有還未結(jié)束的數(shù)據(jù)流為描述對(duì)象,構(gòu)造描述信息記錄同步寫(xiě)入到三個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中;當(dāng)切換數(shù)據(jù)中心前后需要進(jìn)行數(shù)據(jù)有效性驗(yàn)證操作時(shí),即對(duì)每個(gè)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流執(zhí)行查找是否其他兩個(gè)數(shù)據(jù)中心均存在備份,則有效數(shù)據(jù)計(jì)數(shù)器validationresult_is_hit_num 加 I,否則,無(wú)效數(shù)據(jù)計(jì)數(shù)器 validation_result_is_miss_num 加 I的操作,最后將驗(yàn)證時(shí)刻和驗(yàn)證結(jié)果構(gòu)成驗(yàn)證結(jié)果描述信息記錄寫(xiě)入到驗(yàn)證結(jié)果存儲(chǔ)文件中,從而方便驗(yàn)證本系統(tǒng)中對(duì)零數(shù)據(jù)丟失的實(shí)現(xiàn);本系統(tǒng)中利用公式“估算存儲(chǔ)量=
(數(shù)據(jù)流結(jié)束時(shí)刻-數(shù)據(jù)流開(kāi)始時(shí)刻)*數(shù)據(jù)包極限大小” 士斗料 ^、,大認(rèn)十/,如認(rèn)+口 ΗΠ*十舍
-數(shù)據(jù)流發(fā)職據(jù)包間隔-1.—_戈 灘流白獅者_(dá)乍鳥(niǎo)絲
存儲(chǔ)設(shè)備的剩余空間不小于本次數(shù)據(jù)流的估算值,則存儲(chǔ),否則,系統(tǒng)警報(bào)存儲(chǔ)空間不足,系統(tǒng)崩潰;本系統(tǒng)中設(shè)置變量been_changed_datacenter_num,其值只有I和2,用來(lái)識(shí)別被切換的數(shù)據(jù)流的來(lái)源,假設(shè)當(dāng)前由本地?cái)?shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心,若been_Changed_datacenter_num=l,則此時(shí)被切換的數(shù)據(jù)流的來(lái)源為本地備份數(shù)據(jù)中心,否則,此時(shí)被切換的數(shù)據(jù)流的來(lái)源為異地備份數(shù)據(jù)中心;假設(shè)當(dāng)前由本地備份數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心,若been_changed_datacenter_num=l,則此時(shí)被切換的數(shù)據(jù)流的來(lái)源為本地?cái)?shù)據(jù)中心,否貝U,此時(shí)被切換的數(shù)據(jù)流的來(lái)源為異地備份數(shù)據(jù)中心;假設(shè)當(dāng)前由異地備份數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心,若been_changed_datacenter_num=l,則此時(shí)被切換的數(shù)據(jù)流的來(lái)源為本地?cái)?shù)據(jù)中心,否則,此時(shí)被切換的數(shù)據(jù)流的來(lái)源為本地備份數(shù)據(jù)中心;
[0082] 設(shè)用戶設(shè)置了參數(shù)包括生產(chǎn)結(jié)束時(shí)刻user_set_product_end_time、存儲(chǔ)服務(wù)器的最大存儲(chǔ)能力user_set_max_store_size和數(shù)據(jù)流發(fā)送的一個(gè)數(shù)據(jù)包的最大值user_set_max_packet_size ;設(shè)系統(tǒng)中存在三個(gè)數(shù)據(jù)流信息存儲(chǔ)文件用于分別存儲(chǔ)對(duì)應(yīng)的數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的信息,存在一個(gè)仿真結(jié)束原因記錄文件用于存儲(chǔ)仿真結(jié)束的原因,并且存在一個(gè)數(shù)據(jù)有效性驗(yàn)證結(jié)果存儲(chǔ)文件用于存儲(chǔ)系統(tǒng)中對(duì)數(shù)據(jù)進(jìn)行有效性驗(yàn)證的結(jié)果;設(shè)災(zāi)備信息系統(tǒng)中每個(gè)數(shù)據(jù)中心的出口路由器層設(shè)備個(gè)數(shù)為C1,核心交換機(jī)層設(shè)備個(gè)數(shù)為C2,匯聚交換機(jī)層設(shè)備個(gè)數(shù)為C3,服務(wù)器層應(yīng)用服務(wù)器設(shè)備個(gè)數(shù)為C4,服務(wù)器層存儲(chǔ)服務(wù)器設(shè)備個(gè)數(shù)為C5,則按照從出口路由器層到核心交換層到匯聚交換機(jī)層再到服務(wù)器層的順序,對(duì)于每一層的設(shè)備節(jié)點(diǎn)按照本地?cái)?shù)據(jù)中心到本地備份數(shù)據(jù)中心再到異地備份數(shù)據(jù)中心的順序遵循遞增規(guī)律設(shè)置整型編號(hào)后,則本地?cái)?shù)據(jù)中心的出口路由器編
號(hào)依次為1,2,......,C1,本地備份數(shù)據(jù)中心的出口路由器編號(hào)依次為Cl+1,Cl+2,......,
2c1;異地備份數(shù)據(jù)中心的出口路由器編號(hào)依次為2Cl+l,2Cl+2,......,3c1;本地?cái)?shù)據(jù)中
心的核心交換機(jī)編號(hào)依次為3Cl+l,3Cl+2,......, 3ci+c2,本地備份數(shù)據(jù)中心的核心交換
機(jī)編號(hào)依次為3ci+c2+l,3Cl+c2+2,......,3ci+2c2,異地本地備份數(shù)據(jù)中心的核心交換機(jī)
編號(hào)依次為3Cl+2c2+l,3Cl+2c2+2,......,3ci+3c2,本地?cái)?shù)據(jù)中心的匯聚交換機(jī)編號(hào)依次
為3Cl+3c2+l,3Cl+3c2+2,......,3ci+3c2+c3,本地備份數(shù)據(jù)中心的匯聚交換機(jī)編號(hào)依次為
3(^+3(32+(33+1, 3(^+3(32+(33+2,......, 3(^+3(32+2(33,異地備份數(shù)據(jù)中心的匯聚交換機(jī)編號(hào)依次
為3Cl+3c2+2c3+l,3Cl+3c2+2c3+2,……,3ci+3c2+3c3,本地?cái)?shù)據(jù)中心的應(yīng)用服務(wù)器編號(hào)依次
為3(^+3(32+3(33+1, 3CJ+3C2+3C3+2,......, 3(^+3(^+3?+?,本地備份數(shù)據(jù)中心的應(yīng)用服務(wù)器編
號(hào)依次為 3(^+3(32+3(^+(34+1, 3CJ+3C2+3C3+C4+2,......,3(^+3(32+3(^+2(34,異地備份數(shù)據(jù)中心 的應(yīng)用服務(wù)器編號(hào)依次為 3(^+3(^+3(^+2(34+1, 3(^+3(^+3(^+2(34+2,......, 3(^+3(^+3(^+3(?,
本地?cái)?shù)據(jù)中心的存儲(chǔ)服務(wù)器編號(hào)依次為3ci+3c2+3c3+3c4+l,3Cl+3c2+3c3+3c4+2,……,3(^+3(^+3(^+3(^+(^,本地備份數(shù)據(jù)中心的存儲(chǔ)服務(wù)器編號(hào)依次為3(^+3(^+3(^+3(^+(^+1,
3CJ+3C2+3C3+3C4+C5+2,......, 3(^+3(32+3(33+3(34+2(35,異地備份數(shù)據(jù)中心的存儲(chǔ)服務(wù)器編號(hào)
依次為 3(^+3(32+3(33+3(34++2(35+1,3(^+3(32+3(33+2(34+2(35+2,......,3(^+3(32+3(33+3(34+3(35,我
們?cè)O(shè)定三個(gè)數(shù)據(jù)中心中的每個(gè)硬件層次上編號(hào)差值為本層設(shè)備個(gè)數(shù)的硬件設(shè)備擁有的完全相同的服務(wù)能力;設(shè)該系統(tǒng)存在m個(gè)用戶節(jié)點(diǎn),編號(hào)依次為3C1+3C2+3C3+3C4+3C5+1,
3CJ+3C2+3C3+3C4+3C5+2,......, 3c1+3c2+3c3+3c4+3c5+m ;設(shè)系統(tǒng)中包括 p 種應(yīng)用層協(xié)議;設(shè)該
系統(tǒng)包含η個(gè)故障對(duì)象,故障對(duì)象i的狀態(tài)值表示為Ni,其中,i=l,2,......,n,且每個(gè)故障
對(duì)象的狀態(tài)值只有I和O兩種,I表示故障對(duì)象處于正常狀態(tài),O表示故障對(duì)象處于故障狀態(tài),當(dāng)故障對(duì)象1,2,……,nl的狀態(tài)值均為I時(shí)候,本地?cái)?shù)據(jù)中心可正常提供服務(wù),否則,本地?cái)?shù)據(jù)中心不能正常提供服務(wù);當(dāng)故障對(duì)象nl+l,nl+2,……,nl+n2的狀態(tài)值均為I時(shí)候,本地備份數(shù)據(jù)中心可正常提供服務(wù),否則,本地?cái)?shù)據(jù)中心不能正常提供服務(wù);當(dāng)故障對(duì)
象nl+n2+l,nl+n2+2,......,nl+n2+n3的狀態(tài)值均為I時(shí)候,異地備份數(shù)據(jù)中心可正常提供
服務(wù),否則,異地備份數(shù)據(jù)中心不能正常提供服務(wù),則基于兩地三中心的災(zāi)備信息系統(tǒng)仿真方法的具體方法步驟為:
[0083] (I)根據(jù)用戶設(shè)置參數(shù) user_set_product_end_time、user_set_max_packet_size和user_set_max_store_size,利用隨機(jī)數(shù)生成器生成隨機(jī)參數(shù),包括:生產(chǎn)結(jié)束時(shí)刻 product_end_time e [O, user_set_product_end_time]、數(shù)據(jù)包大小的極限值 max_packet_size e [O, user_set_max_packet_size]、RTO 極限值 rto_time e [O, product_end_time]、RPO 極限值 rpo_time e [O, product_end_time]、存儲(chǔ)服務(wù)器的存儲(chǔ)能力max_store_size e [O, user_set_max_store_size]、數(shù)據(jù)流發(fā)送間隔 send_interval_time e [0, product_end_time]、故障發(fā)生時(shí)刻 down_time e [O, product_end_time],故障維持時(shí)間down_period e [O, product_end_time],故障對(duì)象i在系統(tǒng)初始化時(shí)刻對(duì)應(yīng)的的狀態(tài)Njnitialstatei e {0,1},故障對(duì)象i在故障發(fā)生時(shí)刻對(duì)應(yīng)的狀態(tài)N_down_Statei e {0,1},以及故障對(duì)象i在故障修復(fù)時(shí)刻對(duì)應(yīng)的狀態(tài)N_up_statei e {0,1},其中,i=l,2,......, η ;
[0084](2)初始化表示本地?cái)?shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量local_product_num、本地備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量localbackup_product_num和異地備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量remotebackup_product_num,初始值均為O ;初始化表示當(dāng)前的生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量temp_product_num和分別表示當(dāng)前的兩個(gè)備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量templ_product_num、temp2_product_num,初始值均為
0;初始化表示從當(dāng)前兩個(gè)備份數(shù)據(jù)中心切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)流的目的服務(wù)器節(jié)點(diǎn)編號(hào)的增加值的變量id_diff_l和id_diff_2,均初始化為O ;初始化表示三個(gè)數(shù)據(jù)中心各自生產(chǎn)的數(shù)據(jù)流的源節(jié)點(diǎn)編號(hào)、目的服務(wù)器節(jié)點(diǎn)編號(hào)、流開(kāi)始時(shí)刻、流結(jié)束時(shí)刻、應(yīng)用層協(xié)議編號(hào)和存儲(chǔ)服務(wù)器編號(hào)信息的生產(chǎn)信息的數(shù)組變量,初始值均為O ;初始化表示各存儲(chǔ)服務(wù)器的已占空間大小的數(shù)組變量store,初始值均為O,即執(zhí)行store(il)=0,其中,
11=3(^+3(32+3(33+3(34+1,3CJ+3C2+3C3+3C4+11......,3CJ+3C2+3C3+3C4+3C5 ;初始化系統(tǒng){目號(hào)為正
常狀態(tài),即執(zhí)行system_signal=normal ;初始化所有故障對(duì)象的狀態(tài)為正常,即執(zhí)行Ni2=I,其中,i2=l,2,......, η ;初始化表示故障修復(fù)時(shí)刻的變量up_time,即執(zhí)行up_time=0 ;
[0085](3)初始化所有故障對(duì)象的狀態(tài),即在系統(tǒng)開(kāi)始運(yùn)行之時(shí)執(zhí)行Ni3=N_initial_Statei3 的操作,其中,i3=l,2,......,η;
[0086](4)向系統(tǒng)注入定時(shí)的故障,即在down_time對(duì)系統(tǒng)中的所有故障對(duì)象執(zhí)行Ni4=N_down_statei4的操作,計(jì)算故障修復(fù)時(shí)刻并向系統(tǒng)注入定時(shí)的故障恢復(fù),即執(zhí)行up_
time=down_time+down_period,并在 up_time 執(zhí)行 Ni4=N_upi4 的操作,其中,i4=l, 2,......,
η ;
[0087](5)獲取當(dāng)前執(zhí)行時(shí)刻current_time,并比較current_time是否小于product_end_time,若是,則執(zhí)行步驟(6);
[0088]否則,將“當(dāng)前執(zhí)行時(shí)刻到達(dá)生產(chǎn)結(jié)束時(shí)刻, 仿真結(jié)束”字樣寫(xiě)入仿真結(jié)束原因記錄文件,執(zhí)行步驟(37);
[0089](6)以當(dāng)前執(zhí)行時(shí)刻作為流開(kāi)始時(shí)刻,即執(zhí)行new_flow_start_time=current_time,利用隨機(jī)數(shù)生成器產(chǎn)生本次新數(shù)據(jù)流的隨機(jī)信息,包括源節(jié)點(diǎn)編號(hào)new_flow_from_id e [30^302+303+304+305+1, 3c1+3c2+3c3+3c4+3c5+m]、目的服務(wù)器節(jié)點(diǎn)編號(hào) new_f low_to_id e [3(^+3(32+3(33+1, 3(^+3(32+3(33+(34]、數(shù)據(jù)流結(jié)束時(shí)刻 new_flow_end_time e [new_flow_start_time, product_end_time],以及應(yīng)用層協(xié)議編號(hào) new_f low_app_app_protocol_id e [I, p],同時(shí)系統(tǒng)從存儲(chǔ)開(kāi)始節(jié)點(diǎn)開(kāi)始尋找存儲(chǔ)節(jié)點(diǎn)id,滿足其剩余空間max_store_size-store (id)不小于當(dāng)前數(shù)據(jù)流產(chǎn)生的數(shù)據(jù)量的估算值,若能找到這樣的id,則將節(jié)點(diǎn)編號(hào)i作為此次數(shù)據(jù)流的存儲(chǔ)字段值,即執(zhí)行new_flow_store_id=id,執(zhí)行步驟(7);
[0090]否則,將“存儲(chǔ)設(shè)備不足,仿真結(jié)束”寫(xiě)入仿真結(jié)束原因記錄文件,并執(zhí)行步驟(37);
[0091](7)檢測(cè)故障對(duì)象1,2,……,nl的狀態(tài),若對(duì)于Vi5 G [1,nl],都有Ni5=I,則判定本地?cái)?shù)據(jù)中心可以為用戶提供服務(wù),執(zhí)行步驟(10);
[0092]否則,執(zhí)行步驟(8);
[0093](8)檢測(cè)故障對(duì)象 nl+1,nl+2,......,nl+n2 的狀態(tài),若對(duì)于Vi6 e [ηI + 1,nl +
n2],都有Ni6=I,則判定本地備份數(shù)據(jù)中心可以為用戶提供服務(wù),執(zhí)行步驟(34);
[0094]否則,執(zhí)行步驟(9);
[0095](9)檢測(cè)故障對(duì)象nl+n2+l,nl+n2+2,......,η的狀態(tài),若對(duì)于Vi7 G
[nl + n2 + l,nl+n2 + η3]都有Ni7=I,則判定異地備份數(shù)據(jù)中心可以為用戶提供
[0096]服務(wù),則執(zhí)行步驟(35);
[0097]否則,執(zhí)行步驟(36);
[0098](10)檢測(cè)系統(tǒng)信號(hào),若 system_signal=bad_state 或者 system_signal=replace_state,則將系統(tǒng)信號(hào)更新為正常狀態(tài),即執(zhí)行system_signal=normal_state,同時(shí)將本地?cái)?shù)據(jù)中心更新為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,將本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心更新為此時(shí)的兩個(gè)備份數(shù)據(jù)中心,同時(shí)更新當(dāng)前的生產(chǎn)數(shù)據(jù)中心和備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的個(gè)數(shù),即執(zhí)行 temp_product_num=local_product_num, templ_product_num=localbackup_product_num, temp2_product_num=remotebackup_product_num,并設(shè)置從當(dāng)前兩個(gè)備份數(shù)據(jù)中心切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)流的目的服務(wù)器節(jié)點(diǎn)編號(hào)的增加值,即執(zhí)行id_diff_l=-c4, id_diff_2=_2c4,執(zhí)行步驟(11);
[0099]否則,執(zhí)行步驟(30);
[0100](11)記錄當(dāng)前時(shí)刻 current_time,并比較 current_time 是否小于 rto_time 和rp0_time,若是,則執(zhí)行步驟(12);否則,將“在RTO和RPO設(shè)置的時(shí)間內(nèi)找不到數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心為用戶提供服務(wù),仿真結(jié)束”字樣寫(xiě)入仿真結(jié)束原因記錄文件,并執(zhí)行步驟(37);
[0101](12)進(jìn)行切換數(shù)據(jù)流之前的數(shù)據(jù)有效性驗(yàn)證操作,即對(duì)本地?cái)?shù)據(jù)中心、本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心依次執(zhí)行在此數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中查找backup_or_product_flag=l的記錄rl,并在另外兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中查找backup_or_product_flag=2且其他描述字段值均與記錄rl中對(duì)應(yīng)的字段值相同的記錄 r2,若記錄 r2 存在,則 validation_result_is_hit_num 加 I ;
[0102]否則,執(zhí)行 validation_result_is_miss_num 加 I ;
[0103](13)將當(dāng)前執(zhí)行時(shí)刻 current_time 和驗(yàn)證結(jié)果 validation_result_is_hit_num、validation_result_is_miss_num存儲(chǔ)到存儲(chǔ)驗(yàn)證結(jié)果的文件中,同時(shí)初始化計(jì)數(shù)器i 8=O,初始化本次中心切換操作已被執(zhí)行切換數(shù)據(jù)流操作的數(shù)據(jù)中心的個(gè)數(shù)b e e n_changed_datacenter_num=l ;
[0104](14)比較i8是否小于或等于templ_product_num,若是,則執(zhí)行步驟(15);
[0105]否則,執(zhí)行步驟(26);
[0106](15)獲取當(dāng)前時(shí)刻current_time,并比較current_time是否小于或等于templ_end_time (i8),若是,則執(zhí)行步驟(17);
[0107]否則,執(zhí)行i8加I,并執(zhí)行步驟(16);
[0108](16)檢測(cè) been_changed_datacenter_num 的值,若 been_changed_datacenter_num值為I,則執(zhí)行步驟(14);
[0109]否則,執(zhí)行步驟(27);
[0110](17)將此條數(shù)據(jù)流切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心,并建立新的傳輸層連接,同時(shí)從存儲(chǔ)開(kāi)始
[0111]節(jié)點(diǎn)開(kāi)始尋找存儲(chǔ)節(jié)點(diǎn)id,滿足其剩余空間max_store_size-store (id)不小于當(dāng)前數(shù)據(jù)流產(chǎn)生的數(shù)據(jù)量的估算值,若能找到這樣的id,則將此id選為當(dāng)前被切換的數(shù)據(jù)流的存儲(chǔ)服務(wù)器位置,執(zhí)行步驟(18);
[0112]否則,將“存儲(chǔ)設(shè)備不足,仿真結(jié)束”字樣寫(xiě)入仿真結(jié)束原因記錄文件,執(zhí)行步驟
(37);
[0113](18)檢測(cè)本地?cái)?shù)據(jù)中心是否為當(dāng)前生產(chǎn)數(shù)據(jù)中心,即比較當(dāng)前生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流訪問(wèn)的應(yīng)用服務(wù)器編號(hào)是否小于或者等于本地?cái)?shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值,若是,確定本地?cái)?shù)據(jù)中心為當(dāng)前生產(chǎn)數(shù)據(jù)中心,設(shè)backup_or_product=l,獲得此數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte,此時(shí),對(duì)數(shù)據(jù)流的描述字段均已獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到本地?cái)?shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí)設(shè)backup_0r_product=2,構(gòu)成備份信息記錄寫(xiě)入到其他兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,temp_product_num 加 I,執(zhí)行步驟(19);
[0114]否則,執(zhí)行步驟(21);
[0115](19)檢測(cè) been_changed_datacenter_num 的值,若 been_changed_datacenter_num值為1,則確定此條被切換的數(shù)據(jù)流來(lái)自本地備份數(shù)據(jù)中心,將此被切換的數(shù)據(jù)流在本地備份數(shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加1,并執(zhí)行步驟(16);
[0116]否則,執(zhí)行步驟(20);
[0117](20)將此被切換的數(shù)據(jù)流在異地備份中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加1,執(zhí)行步驟(16);
[0118](21)檢測(cè)本地備份數(shù)據(jù)中心是否為當(dāng)前生產(chǎn)數(shù)據(jù)中心,即比較當(dāng)前生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流訪問(wèn)的應(yīng)用服務(wù)器編號(hào)是否大于本地?cái)?shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(^+3?+?且小于或等于本地備份數(shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(^+3(^+2?,若是,則確定本地備份數(shù)據(jù)中心為當(dāng)前生產(chǎn)數(shù)據(jù)中心,設(shè)backup_or_product=l,獲得此數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte,此時(shí),對(duì)數(shù)據(jù)流的描述字段均已獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到本地備份數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí)設(shè)backup_or_product=2,構(gòu)造備份信息記錄寫(xiě)入到其他數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,t emp_pr ο du c t_num加I,執(zhí)行步驟(22);
[0119]否則,異地備份數(shù)據(jù)中心為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,設(shè)backup_or_product=l,獲得此數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte,此時(shí)對(duì)數(shù)據(jù)流的描述字段均已經(jīng)獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到異地備份數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí)設(shè)backup_or_pr ο due t=2,構(gòu)造備份信息記錄寫(xiě)入到其他數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,t emp_product_num 加 I,執(zhí)行步驟(24);
[0120](22)檢測(cè) been_changed_datacenter_num 的值,若 been_changed_datacenter_num值為1,則確定此條被切換的數(shù)據(jù)流來(lái)自本地?cái)?shù)據(jù)中心,將此被切換的數(shù)據(jù)流在本地?cái)?shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加I,并執(zhí)行步驟(16);;
[0121]否則,確定此條被切換的數(shù)據(jù)流來(lái)自異地備份數(shù)據(jù)中心,執(zhí)行步驟(23);
[0122](23)將此被切換的數(shù)據(jù)流在異地備份數(shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加1,并執(zhí)行步驟(16);
[0123](24)檢測(cè) been_changed_datacenter_num 的值,若 been_changed_datacenter_num值為1,則確定此條被切換的數(shù)據(jù)流來(lái)自本地?cái)?shù)據(jù)中心,將此被切換的數(shù)據(jù)流在本地?cái)?shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加1,并執(zhí)行步驟(16);
[0124]否則,確定此條被切換的數(shù)據(jù)流來(lái)自本地備份數(shù)據(jù)中心,執(zhí)行步驟(25);
[0125](25)將此被切換的數(shù)據(jù)流在本地備份數(shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加1,并執(zhí)行步驟(16);
[0126](26)將另一個(gè)數(shù)據(jù)中心的數(shù)據(jù)流切換到當(dāng)前的生產(chǎn)數(shù)據(jù)中心,更新本次中心切換中已被執(zhí)行切換數(shù)據(jù)流操作的數(shù)據(jù)中心的個(gè)數(shù)been_changed_datacenter_num=2,并執(zhí)行i8=0,templ_product_num=temp2_product_num, id_diff_l=id_diff_2 ;
[0127] (27)比較i8是否小于或等于templ_product_num,若是,則執(zhí)行步驟(15);
[0128]否則,數(shù)據(jù)流切換完成,更新當(dāng)前數(shù)據(jù)中心的生產(chǎn)信息,即執(zhí)行步驟(28);
[0129](28)進(jìn)行切換數(shù)據(jù)流之后的數(shù)據(jù)有效性驗(yàn)證操作,即對(duì)本地?cái)?shù)據(jù)中心、本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心依次執(zhí)行在此數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中查找backup_or_product_fIag=I的記錄r3,并在另外兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中查找backup_or_product_flag=2且其他描述字段值均與記錄r3中對(duì)應(yīng)的字段值相同的記錄 r4,若記錄 r4 存在,則 validation_result_is_hit_num 加 I ;
[0130]否則,執(zhí)行 validation_result_is_miss_num 加 I ;
[0131](29)將當(dāng)前執(zhí)行時(shí)刻 current_time 和驗(yàn)證結(jié)果 validation_result_is_hit_num、validation_result_is_miss_num存儲(chǔ)到存儲(chǔ)驗(yàn)證結(jié)果的文件中;
[0132](30)根據(jù)前面步驟(6)中新產(chǎn)生的數(shù)據(jù)流的信息對(duì)新數(shù)據(jù)流建立傳輸層和應(yīng)用層連接,同時(shí)記錄新數(shù)據(jù)流信息,temp_product_num加I ;
[0133](31)檢測(cè)本地?cái)?shù)據(jù)中心是否為當(dāng)前生產(chǎn)數(shù)據(jù)中心,即比較當(dāng)前生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流訪問(wèn)的應(yīng)用服務(wù)器編號(hào)是否小于或者等于本地?cái)?shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3ci+3c2+3c3+c4,若是,則確定本地?cái)?shù)據(jù)中心為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,并更新本地?cái)?shù)據(jù)中心的生產(chǎn)的數(shù)據(jù)流信息,并更新其生產(chǎn)數(shù)目,即執(zhí)行l(wèi)ocal_product_num=temp_product_num, backup_or_product_f lag (i9) =1,獲得當(dāng)前數(shù)據(jù)流的實(shí)時(shí)字節(jié) real_byte (i9),此時(shí)對(duì)數(shù)據(jù)流的描述字段均已經(jīng)獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到當(dāng)前作為生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí),執(zhí)行backup_or_product_f lag (i9) =2,構(gòu)造備份信息記錄寫(xiě)入到其他兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,其中,i9=0,l,……,local_product_num,執(zhí)行步驟(5);否則,即執(zhí)行步驟(32);
[0134](32)檢測(cè)本地備份數(shù)據(jù)中心是否為當(dāng)前生產(chǎn)數(shù)據(jù)中心比較當(dāng)前生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流訪問(wèn)的應(yīng)用服務(wù)器編號(hào)是否大于本地?cái)?shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(^+3?+?且小于或等于本地備份數(shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(32+3(33+2(34,若是,則確定本地備份數(shù)據(jù)中心為當(dāng)前生產(chǎn)數(shù)據(jù)中心,更新本地備份數(shù)據(jù)中心的生產(chǎn)信息和其生產(chǎn)數(shù)目,即執(zhí)行l(wèi)ocalbackup—product_ _num=temp—product—num,backup_or_product_flag (i 10)=1,獲得當(dāng)前數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte(ilO),此時(shí)對(duì)數(shù)據(jù)流的描述字段均已獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到本地?cái)?shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí)執(zhí)行backup_or_product_flag(il0)=2,構(gòu)造信息記錄寫(xiě)入到其他兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,其中,il0=0,1,......, localbackup_product_num,執(zhí)行步驟(5);
[0135]否則,確定異地備份數(shù)據(jù)中心為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,執(zhí)行步驟(33);
[0136](33)更新異地備份數(shù)據(jù)中心的生產(chǎn)信息和其生產(chǎn)數(shù)目,即執(zhí)行rem0tebaCkUp_pr ο due t_num=t emp_pr ο due t_num, backup_or_product_f lag (ill) =1,獲得當(dāng)前數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte (ill),此時(shí),對(duì)數(shù)據(jù)流的描述字段均已獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到本地?cái)?shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,執(zhí)行backup_or_product_flag(ill)=2,構(gòu)造備份信息記錄寫(xiě)入到其他兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,其中,ill=0,l,......, remotebackup_product_num,執(zhí)行步驟(5);
[0137](34)檢測(cè)系統(tǒng)信號(hào),若system_signal=bad_state,則將系統(tǒng)信號(hào)更新為中心替代信號(hào),即執(zhí)行system_signal=replace_state,同時(shí)將本地備份數(shù)據(jù)中心更新為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,將本地?cái)?shù)據(jù)中心和異地備份數(shù)據(jù)中心更新為當(dāng)前的備份數(shù)據(jù)中心,同時(shí)更新當(dāng)前的生產(chǎn)數(shù)據(jù)中心和備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的個(gè)數(shù),即執(zhí)行temp_(product_num)=localbackup_(product_num), templ_produet_num=localbackup_product_num,templ_product_num=remotebackup_product_num,并設(shè)置從當(dāng)前兩個(gè)備份數(shù)據(jù)中心切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)流的目的服務(wù)器節(jié)點(diǎn)編號(hào)的增加值,即執(zhí)行id_diff_l=c4,id_diff_2=-c4,并執(zhí)行步驟(11);
[0138]否則,執(zhí)行步驟(30);
[0139](35)檢測(cè)系統(tǒng)信號(hào),若system_signal=bad_state,則將系統(tǒng)信號(hào)更新為中心替代信號(hào),即執(zhí)行system_signal=replace_state,同時(shí)將異地備份數(shù)據(jù)中心更新為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,將本地?cái)?shù)據(jù)中心和本地備份數(shù)據(jù)中心更新為當(dāng)前的備份數(shù)據(jù)中心,同時(shí)更新當(dāng)前的生產(chǎn)數(shù)據(jù)中心和備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的個(gè)數(shù),即執(zhí)行temp_product_num=remotebackup_product_num, templ_product_num=local_product_num, temp2_product—num=localbackup—product—num,并設(shè)置從當(dāng)前兩個(gè)備份數(shù)據(jù)中心切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)流的目的服務(wù)器節(jié)點(diǎn)編號(hào)的增加值,即執(zhí)行id—diff—1=2c4,id—diff—2=c4,并執(zhí)行步驟(11);
[0140]否則,執(zhí)行步驟(30);
[0141](36)獲取當(dāng)前執(zhí)行時(shí)刻current_time,并將判斷current_time是否小于rto_time和rpo_time,若是,則系統(tǒng)繼續(xù)忍受,執(zhí)行步驟(5);
[0142]否則,將“在RTO和RPO設(shè)置的時(shí)間內(nèi)找不到數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心為用戶提供服務(wù),仿真結(jié)束”字樣寫(xiě)入仿真結(jié)束原因記錄文件,并執(zhí)行步驟(37);
[0143](37)仿真結(jié)束;
[0144]其具體實(shí)施模式是這樣的:
[0145]整個(gè)的仿真過(guò)程分為三個(gè)階段,第一個(gè)階段為文件準(zhǔn)備階段,【具體實(shí)施方式】是為用戶創(chuàng)建配置接口文件,并寫(xiě)入默認(rèn)的配置,同時(shí)為仿真過(guò)程中創(chuàng)建所需要的有存儲(chǔ)作用、日志作用以及監(jiān)控作用的文件;第二個(gè)階段為用戶設(shè)置參數(shù)階段,用戶打開(kāi)第一個(gè)階段生產(chǎn)的配置接口文件中按照默認(rèn)配置方式修改參數(shù)值即可;第三個(gè)階段為災(zāi)備信息系統(tǒng)仿真運(yùn)行階段,此過(guò)程中實(shí)現(xiàn)根據(jù)用戶的配置搭建災(zāi)備信息系統(tǒng)、實(shí)現(xiàn)注入定時(shí)的故障發(fā)生和故障修復(fù),并以循環(huán)實(shí)現(xiàn)檢測(cè)數(shù)據(jù)流、故障檢測(cè)、生產(chǎn)數(shù)據(jù)流過(guò)程的方式實(shí)現(xiàn)生產(chǎn)過(guò)程,直到運(yùn)行時(shí)刻到達(dá)用戶配置的生產(chǎn)截止時(shí)刻。
[0146]其中,檢測(cè)數(shù)據(jù)流過(guò)程具體的實(shí)施方式為檢測(cè)是否存在現(xiàn)存數(shù)據(jù)流,若檢測(cè)到存在,則記錄數(shù)據(jù)流的信息,若檢測(cè)到不存在,跳過(guò)此過(guò)程。故障檢測(cè)過(guò)程具體的實(shí)施方式為檢測(cè)故障對(duì)象的狀態(tài),若檢測(cè)結(jié)果是本地?cái)?shù)據(jù)中心不能繼續(xù)作為生產(chǎn)數(shù)據(jù)中心提供服務(wù),則需判斷是否是第一次檢測(cè)到此狀態(tài),若是第一次,則發(fā)出故障信號(hào),若不是第一次發(fā)現(xiàn),則將消除故障信號(hào)并發(fā)出故障修復(fù)信號(hào),最后需將原來(lái)的數(shù)據(jù)流切換到根據(jù)事先制定的優(yōu)先級(jí)排列中優(yōu)先級(jí)最高且能支持生產(chǎn)的數(shù)據(jù)中心,由此數(shù)據(jù)中心代替作為生產(chǎn)數(shù)據(jù)中心,若沒(méi)有能支持生產(chǎn)的數(shù)據(jù)中心,則與用戶設(shè)置的忍受時(shí)間相比較,若超過(guò),則系統(tǒng)崩潰,仿真結(jié)束,否則,正常進(jìn)行下一次的檢測(cè)數(shù)據(jù)流過(guò)程;若檢測(cè)結(jié)果是非本地?cái)?shù)據(jù)中心故障且本地?cái)?shù)據(jù)中心可以正常生產(chǎn),則進(jìn)行下一次的檢測(cè)數(shù)據(jù)流過(guò)程。生產(chǎn)數(shù)據(jù)流的過(guò)程的【具體實(shí)施方式】為隨機(jī)產(chǎn)生數(shù)據(jù)流的源節(jié)點(diǎn)編號(hào)、目的服務(wù)器節(jié)點(diǎn)編號(hào)、流結(jié)束時(shí)刻,應(yīng)用層協(xié)議編號(hào),以當(dāng)前執(zhí)行時(shí)刻為流開(kāi)始時(shí)刻,并尋找到存儲(chǔ)節(jié)點(diǎn),這些信息構(gòu)成數(shù)據(jù)流的相關(guān)信息,此過(guò)程記錄這些信息,并通過(guò)建立傳輸層連接和應(yīng)用層連接實(shí)現(xiàn)數(shù)據(jù)流的生產(chǎn)。
【權(quán)利要求】
1.一種基于兩地三中心的災(zāi)備信息系統(tǒng)仿真方法,其特征在于:設(shè)災(zāi)備信息系統(tǒng)米用兩地三中心的架構(gòu),即包括本地?cái)?shù)據(jù)中心、本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心,且三個(gè)數(shù)據(jù)中心的軟硬件環(huán)境和網(wǎng)絡(luò)環(huán)境完全相同,假定系統(tǒng)中可能發(fā)生故障的一個(gè)組成部分稱為一個(gè)故障對(duì)象,在一個(gè)時(shí)刻一個(gè)故障對(duì)象可能是正常狀態(tài)也可能是故障狀態(tài),當(dāng)系統(tǒng)中的所有故障對(duì)象的狀態(tài)導(dǎo)致本地?cái)?shù)據(jù)中心不能正常提供服務(wù),則稱此種系統(tǒng)狀態(tài)為系統(tǒng)故障狀態(tài),第一次檢測(cè)到此種系統(tǒng)狀態(tài)的時(shí)間點(diǎn)稱為故障發(fā)生時(shí)刻,否則,稱系統(tǒng)狀態(tài)為系統(tǒng)正常狀態(tài);當(dāng)檢測(cè)到系統(tǒng)故障狀態(tài)之后,又檢測(cè)到本地?cái)?shù)據(jù)中心可以正常提供服務(wù),則稱此種系統(tǒng)狀態(tài)為系統(tǒng)修復(fù)狀態(tài),第一次檢測(cè)到此種狀態(tài)的時(shí)間點(diǎn)稱為故障修復(fù)時(shí)刻,否則,稱此種系統(tǒng)狀態(tài)為系統(tǒng)忍受狀態(tài);正常情況下,災(zāi)備信息系統(tǒng)維持一個(gè)數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心為用戶提供服務(wù),默認(rèn)的生產(chǎn)數(shù)據(jù)中心為本地?cái)?shù)據(jù)中心;在生產(chǎn)過(guò)程中,災(zāi)備信息系統(tǒng)存在的每個(gè)故障對(duì)象的狀態(tài)時(shí)刻發(fā)生變化,影響著系統(tǒng)狀態(tài)的改變,當(dāng)?shù)谝淮螜z測(cè)到系統(tǒng)狀態(tài)為系統(tǒng)故障狀態(tài),則更新系統(tǒng)信號(hào)為故障狀態(tài),即執(zhí)行system_signal=bad_state,此時(shí)災(zāi)備信息系統(tǒng)便會(huì)依次檢測(cè)本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心,若在RTO和RPO的限制內(nèi)檢測(cè)到本地備份數(shù)據(jù)中心可以提供服務(wù),則停止檢測(cè)并更新系統(tǒng)信號(hào)為中心替代狀態(tài),即執(zhí)行system_signal=replace_state,同時(shí)將數(shù)據(jù)流切換到本地備份數(shù)據(jù)中心并將本地備份數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心使用;若在RTO和RPO的限制內(nèi)檢測(cè)到異地備份數(shù)據(jù)中心可以提供服務(wù),則停止檢測(cè)并更新系統(tǒng)信號(hào)為中心替代狀態(tài),即執(zhí)行SyStem_signal=replace_state,同時(shí)將數(shù)據(jù)流切換到異地備份數(shù)據(jù)中心,并將異地備份數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心使用;若在RTO和RPO的限制內(nèi)第一次檢測(cè)系統(tǒng)狀態(tài)為系統(tǒng)修復(fù)狀態(tài),更新系統(tǒng)信號(hào)為正常狀態(tài),即執(zhí)行system_signal=normal_state,重新將數(shù)據(jù)流切回到本地?cái)?shù)據(jù)中心并將本地?cái)?shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心使用;若到了 RTO和RPO限制的時(shí)間仍找不到可用的數(shù)據(jù)中心,則系統(tǒng)崩潰;本系統(tǒng)中采用源節(jié)點(diǎn)編號(hào)、目的服務(wù)器節(jié)點(diǎn)編號(hào)、流開(kāi)始時(shí)刻、流結(jié)束時(shí)刻、應(yīng)用層協(xié)議編號(hào)、實(shí)時(shí)字節(jié)、存儲(chǔ)節(jié)點(diǎn)編號(hào)、和標(biāo)識(shí)backup_or_product_flag八個(gè)字段構(gòu)成一條描述信息來(lái)描述一條數(shù)據(jù)流此刻的狀態(tài),其中,當(dāng)backup_or_product_flag值為I時(shí),表示此條描述信息描述的是當(dāng)前數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的生產(chǎn)信息,當(dāng)backup_or_product_flag值為2時(shí),表示此條描述信息是其他數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流在本中心保存的備份信息,生產(chǎn)過(guò)程中以被切換的數(shù)據(jù)流信息為基礎(chǔ)新創(chuàng)建的連接到當(dāng)前數(shù)據(jù)中心的數(shù)據(jù).流、本次生產(chǎn)中以隨機(jī)產(chǎn)生的信息為基礎(chǔ)新創(chuàng)建的連接到當(dāng)前數(shù)據(jù)中心的數(shù)據(jù)流,以及當(dāng)前數(shù)據(jù)中心中所有還未結(jié)束的數(shù)據(jù)流為描述對(duì)象,構(gòu)造描述信息記錄同步寫(xiě)入到三個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中;當(dāng)切換數(shù)據(jù)中心前后需要進(jìn)行數(shù)據(jù)有效性驗(yàn)證操作時(shí),即對(duì)每個(gè)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流執(zhí)行查找是否其他兩個(gè)數(shù)據(jù)中心均存在備份,則有效數(shù)據(jù)計(jì)數(shù)器validation_result_is_hit_num加I,否則,無(wú)效數(shù)據(jù)計(jì)數(shù)器validation_result_is_miss_num加I的操作,最后將驗(yàn)證時(shí)刻和驗(yàn)證結(jié)果構(gòu)成驗(yàn)證結(jié)果描述信息記錄寫(xiě)入到驗(yàn)證結(jié)果存儲(chǔ)文件中,從而方便驗(yàn)證本系統(tǒng)中對(duì)零數(shù)據(jù)丟失的實(shí)現(xiàn);本系統(tǒng)中利用公式“估算存儲(chǔ)量=(數(shù)據(jù)流結(jié)束時(shí):據(jù)限大小,,來(lái)估算一次尋找數(shù)據(jù)流的存儲(chǔ)的操作,即若存在存儲(chǔ)設(shè)備的剩余空間不小于本次數(shù)據(jù)流的估算值,則存儲(chǔ),否則,系統(tǒng)警報(bào)存儲(chǔ)空間不足,系統(tǒng)崩潰;本系統(tǒng)中設(shè)置變量been_Changed_dataCenter_num,其值只有I和2,用來(lái)識(shí)別被切換的數(shù)據(jù)流的來(lái)源,假設(shè)當(dāng)前由本地?cái)?shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心,若been_changed_datacenter_num= I,則此時(shí)被切換的數(shù)據(jù)流的來(lái)源為本地備份數(shù)據(jù)中心,否則,此時(shí)被切換的數(shù)據(jù)流的來(lái)源為異地備份數(shù)據(jù)中心;假設(shè)當(dāng)前由本地備份數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心,若been_changed_datacenter_num=l,則此時(shí)被切換的數(shù)據(jù)流的來(lái)源為本地?cái)?shù)據(jù)中心,否則,此時(shí)被切換的數(shù)據(jù)流的來(lái)源為異地備份數(shù)據(jù)中心;假設(shè)當(dāng)前由異地備份數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心,若been_changed_datacenter_num=l,則此時(shí)被切換的數(shù)據(jù)流的來(lái)源為本地?cái)?shù)據(jù)中心,否則,此時(shí)被切換的數(shù)據(jù)流的來(lái)源為本地備份數(shù)據(jù)中心; 設(shè)用戶設(shè)置了參數(shù)包括生產(chǎn)結(jié)束時(shí)刻user_set_product_end_time、存儲(chǔ)服務(wù)器的最大存儲(chǔ)能力user_set_max_store_size和數(shù)據(jù)流發(fā)送的一個(gè)數(shù)據(jù)包的最大值user_set_max_packet_size ;設(shè)系統(tǒng)中存在三個(gè)數(shù)據(jù)流信息存儲(chǔ)文件用于分別存儲(chǔ)對(duì)應(yīng)的數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的信息,存在一個(gè)仿真結(jié)束原因記錄文件用于存儲(chǔ)仿真結(jié)束的原因,并且存在一個(gè)數(shù)據(jù)有效性驗(yàn)證結(jié)果存儲(chǔ)文件用于存儲(chǔ)系統(tǒng)中對(duì)數(shù)據(jù)進(jìn)行有效性驗(yàn)證的結(jié)果;設(shè)災(zāi)備信息系統(tǒng)中每個(gè)數(shù)據(jù)中心的出口路由器層設(shè)備個(gè)數(shù)為C1,核心交換機(jī)層設(shè)備個(gè)數(shù)為C2,匯聚交換機(jī)層設(shè)備個(gè)數(shù)為C3,服務(wù)器層應(yīng)用服務(wù)器設(shè)備個(gè)數(shù)為C4,服務(wù)器層存儲(chǔ)服務(wù)器設(shè)備個(gè)數(shù)為C5,則按照從出口路由器層到核心交換層到匯聚交換機(jī)層再到服務(wù)器層的順序,對(duì)于每一層的設(shè)備節(jié)點(diǎn)按照本地?cái)?shù)據(jù)中心到本地備份數(shù)據(jù)中心再到異地備份數(shù)據(jù)中心的順序遵循遞 增規(guī)律設(shè)置整型編號(hào)后,則本地?cái)?shù)據(jù)中心的出口路由器編號(hào)依次為1,2,......,C1,本地備份數(shù)據(jù)中心的出口路由器編號(hào)依次為Cl+1,Cl+2,......,2c1;異地備份數(shù)據(jù)中心的出口路由器編號(hào)依次為2Cl+l,2Cl+2,......,3c1;本地?cái)?shù)據(jù)中心的核心交換機(jī)編號(hào)依次為3Cl+l,3Cl+2,......, 3ci+c2,本地備份數(shù)據(jù)中心的核心交換 機(jī)編號(hào)依次為3ci+c2+l,3Cl+c2+2,......,3ci+2c2,異地本地備份數(shù)據(jù)中心的核心交換機(jī)編號(hào)依次為3Cl+2c2+l,3Cl+2c2+2,......,3ci+3c2,本地?cái)?shù)據(jù)中心的匯聚交換機(jī)編號(hào)依次為3ci+3c2+l,3ci+ 3c2+2,......,3ci+3c2+c3,本地備份數(shù)據(jù)中心的匯聚交換機(jī)編號(hào)依次為3(^+3(32+(33+1, 3(^+3(32+(33+2,......, 3(^+3(32+2(33,異地備份數(shù)據(jù)中心的匯聚交換機(jī)編號(hào)依次為3Cl+3c2+2c3+l,3Cl+3c2+2c3+2,……,3ci+3c2+3c3,本地?cái)?shù)據(jù)中心的應(yīng)用服務(wù)器編號(hào)依次為3(^+3(32+3(33+1, 3CJ+3C2+3C3+2,......, 3(^+3(^+3?+?,本地備份數(shù)據(jù)中心的應(yīng)用服務(wù)器編號(hào)依次為 3(^+3(32+3(^+(34+1, 3CJ+3C2+3C3+C4+2,......,3(^+3(32+3(^+2(34,異地備份數(shù)據(jù)中心的應(yīng)用服務(wù)器編號(hào)依次為 3(^+3(^+3(^+2(34+1, 3(^+3(^+3(^+2(34+2,......, 3(^+3(^+3(^+3(?,本地?cái)?shù)據(jù)中心的存儲(chǔ)服務(wù)器編號(hào)依次為3ci+3c2+3c3+3c4+l,3Cl+3c2+3c3+3c4+2,……,3(^+3(^+3(^+3(^+(^,本地備份數(shù)據(jù)中心的存儲(chǔ)服務(wù)器編號(hào)依次為3(^+3(^+3(^+3(^+(^+1,3CJ+3C2+3C3+3C4+C5+2,......, 3(^+3(32+3(33+3(34+2(35,異地備份數(shù)據(jù)中心的存儲(chǔ)服務(wù)器編號(hào)依次為 3(^+3(32+3(33+3(34++2(35+1,3(^+3(32+3(33+2(34+2(35+2,......,3(^+3(32+3(33+3(34+3(35,我們?cè)O(shè)定三個(gè)數(shù)據(jù)中心中的每個(gè)硬件層次上編號(hào)差值為本層設(shè)備個(gè)數(shù)的硬件設(shè)備擁有的完全相同的服務(wù)能力;設(shè)該系統(tǒng)存在m個(gè)用戶節(jié)點(diǎn),編號(hào)依次為3C1+3C2+3C3+3C4+3C5+1,3CJ+3C2+3C3+3C4+3C5+2,......, 3c1+3c2+3c3+3c4+3c5+m ;設(shè)系統(tǒng)中包括 p 種應(yīng)用層協(xié)議;設(shè)該系統(tǒng)包含η個(gè)故障對(duì)象,故障對(duì)象i的狀態(tài)值表示為Ni,其中,i=l,2,......,n,且每個(gè)故障對(duì)象的狀態(tài)值只有I和O兩種,I表示故障對(duì)象處于正常狀態(tài),O表示故障對(duì)象處于故障狀態(tài),當(dāng)故障對(duì)象1,2,……,nl的狀態(tài)值均為I時(shí)候,本地?cái)?shù)據(jù)中心可正常提供服務(wù),否則,本地?cái)?shù)據(jù)中心不能正常提供服務(wù);當(dāng)故障對(duì)象nl+l,nl+2,……,nl+n2的狀態(tài)值均為I時(shí)候,本地備份數(shù)據(jù)中心可正常提供服務(wù),否則,本地?cái)?shù)據(jù)中心不能正常提供服務(wù);當(dāng)故障對(duì)象nl+n2+l,nl+n2+2,......,nl+n2+n3的狀態(tài)值均為I時(shí)候,異地備份數(shù)據(jù)中心可正常提供服務(wù),否則,異地備份數(shù)據(jù)中心不能正常提供服務(wù),則基于兩地三中心的災(zāi)備信息系統(tǒng)仿真方法的具體方法步驟為: (1)根據(jù)用戶設(shè)置參數(shù)user_set_product_end_time、user_set_max_packet_size和user_set_max_store_size,利用隨機(jī)數(shù)生成器生成隨機(jī)參數(shù),包括:生產(chǎn)結(jié)束時(shí)刻 product_end_time e [O, user_set_product_end_time]、數(shù)據(jù)包大小的極限值 max_packet_size e [O, user_set_max_packet_size]、RTO 極限值 rto_time e [O, product_end_time]、RPO 極限值 rpo_time e [O, product_end_time]、存儲(chǔ)服務(wù)器的存儲(chǔ)能力max_store_size e [O, user_set_max_store_size]、數(shù)據(jù)流發(fā)送間隔 send_interval_time e [O, product_end_time]、故障發(fā)生時(shí)刻 down_time e [O, product_end_time],故障維持時(shí)間down_period e [O, product_end_time],故障對(duì)象i在系統(tǒng)初始化時(shí)刻對(duì)應(yīng)的的狀態(tài)Njnitialstatei e {0,1},故障對(duì)象i在故障發(fā)生時(shí)刻對(duì)應(yīng)的狀態(tài)N_down_Statei e {0,1},以及故障對(duì)象i在故障修復(fù)時(shí)刻對(duì)應(yīng)的狀態(tài)N_up_statei e {0,1},其中,i=l,2,......, η ; (2)初始化表示本地?cái)?shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量local_product_num、本地備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量localbackup_product_num和異地備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量remotebackup_product_num,初始值均為O ;初始化表示當(dāng)前的生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量temp_product_num和分別表示當(dāng)前的兩個(gè)備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流個(gè)數(shù)的變量templ_product_num、temp2_product_num,初始值均為O ;初始化表示從當(dāng)前兩個(gè)備份數(shù)據(jù)中心切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)流的目的服務(wù)器節(jié)點(diǎn)編號(hào)的增加值的變量id_diff_l和id_diff_2,均初始化為O ;初始化表示三個(gè)數(shù)據(jù)中心各自生產(chǎn)的數(shù)據(jù)流的源節(jié)點(diǎn)編號(hào)、目的服務(wù)器節(jié)點(diǎn)編號(hào)、流開(kāi)始時(shí)刻、流結(jié)束時(shí)刻、應(yīng)用層協(xié)議編號(hào)和存儲(chǔ)服務(wù)器編號(hào)信息的生產(chǎn)信息的數(shù)組變量,初始值均為O ;初始化表示各存儲(chǔ)服務(wù)器的已占空間大小的數(shù)組變量store,初始值均為O,即執(zhí)行store(il)=0,其中,i 1=3(^+3(32+3(33+3(34+1,3CJ+3C2+3C3+3C4+11......,3CJ+3C2+3C3+3C4+3C5 ;初始化系統(tǒng){目號(hào)為正常狀態(tài),即執(zhí)行system_signal=normal ;初始化所有故障對(duì)象的狀態(tài)為正常,即執(zhí)行Ni2=I,其中,i2=l,2,......, η ;初始化表示故障修復(fù)時(shí)刻的變量up_time,即執(zhí)行up_time=0 ; (3)初始化所有故障對(duì)象的狀態(tài),即在系統(tǒng)開(kāi)始運(yùn)行之時(shí)執(zhí)行Ni3=N_initial_statei3的操作,其中,i3=l,2,……,n; (4)向系統(tǒng)注入定時(shí)的故障,即在down_time對(duì)系統(tǒng)中的所有故障對(duì)象執(zhí)彳丁Ni4= N_down_statei4的操作,計(jì)算故障修復(fù)時(shí)刻并向系統(tǒng)注入定時(shí)的故障恢復(fù),即執(zhí)行up_time=down_time+down_period,并在 up_time 執(zhí)行 Ni4=N_upi4 的操作,其中,i4=l,2,......,η ; (5)獲取當(dāng)前執(zhí)行時(shí)刻current_time,并比較current_time是否小于product_end_time,若是,則執(zhí)行步驟(6); 否則,將“當(dāng)前執(zhí)行時(shí)刻到達(dá)生產(chǎn)結(jié)束時(shí)刻,仿真結(jié)束”字樣寫(xiě)入仿真結(jié)束原因記錄文件,執(zhí)行步驟(37); (6)以當(dāng)前執(zhí)行時(shí)刻作為流開(kāi)始時(shí)刻,即執(zhí)行new_flow_start_time=current_time,利用隨機(jī)數(shù)生成器產(chǎn)生本次新數(shù)據(jù)流的隨機(jī)信息,包括源節(jié)點(diǎn)編號(hào)new_f low_from_id e [30^302+303+304+305+1, 3c1+3c2+3c3+3c4+3c5+m]、目的服務(wù)器節(jié)點(diǎn)編號(hào) new_f low_to_id e [3(^+3(32+3(33+1, 3(^+3(32+3(33+(34]、數(shù)據(jù)流結(jié)束時(shí)刻 new_flow_end_time e [new_flow_start_time, product_end_time],以及應(yīng)用層協(xié)議編號(hào) new_f low_app_app_protocol_id e [I, p],同時(shí)系統(tǒng)從存儲(chǔ)開(kāi)始節(jié)點(diǎn)開(kāi)始尋找存儲(chǔ)節(jié)點(diǎn)id,滿足其剩余空間max_store_size-store (id)不小于當(dāng)前數(shù)據(jù)流產(chǎn)生的數(shù)據(jù)量的估算值,若能找到這樣的id,則將節(jié)點(diǎn)編號(hào)i作為此次數(shù)據(jù)流的存儲(chǔ)字段值,即執(zhí)行new_flow_store_id=id,執(zhí)行步驟(7); 否則,將“存儲(chǔ)設(shè)備不足,仿真結(jié)束”寫(xiě)入仿真結(jié)束原因記錄文件,并執(zhí)行步驟(37); (7)檢測(cè)故障對(duì)象1,2,……,nl的狀態(tài),若對(duì)于Vi5G [1,nl],都有Ni5=I,則判定本地?cái)?shù)據(jù)中心可以為用戶提供服務(wù),執(zhí)行步驟(10);否則,執(zhí)行步驟(8); (8)檢測(cè)故障對(duì)象nl+1, nl+2,......, nl+n2 的狀態(tài),若對(duì)于 Vi6 E [nl + 1,nl+n2],都有Ni6=I,則判定本地備份數(shù)據(jù)中心可以為用戶提供服務(wù),執(zhí)行步驟(34);否則,執(zhí)行步驟(9); (9)檢測(cè)故障對(duì)象nl+n2+l,nl+n2+2,……,η的狀態(tài),若對(duì)于Vi7e[nl + n2 + l,nl + n2 + η3],都有Ni7=I,則判定異地備份數(shù)據(jù)中心可以為用戶提供服務(wù),則執(zhí)行步驟(35); 否則,執(zhí)行步驟(36); (10)檢測(cè)系統(tǒng)信號(hào),若system_signal=bad_state 或者 system_signal=replace_state,則將系統(tǒng)信號(hào)更新為正常狀態(tài),即執(zhí)行system_signal=normal_state,同時(shí)將本地?cái)?shù)據(jù)中心更新為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,將本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心更新為此時(shí)的兩個(gè)備份數(shù)據(jù)中心,同時(shí)更新當(dāng)前的生產(chǎn)數(shù)據(jù)中心和備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的個(gè)數(shù),即執(zhí)行 temp_product_num=local_product_num, templ_product_num=localbackup_product_num, temp2_product_num=remotebackup_product_num,并設(shè)置從當(dāng)前兩個(gè)備份數(shù)據(jù)中心切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)流的目的服務(wù)器節(jié)點(diǎn)編號(hào)的增加值,即執(zhí)行id_diff_l=-c4, id_diff_2=_2c4,執(zhí)行步驟(11); 否則,執(zhí)行步驟(30); (11)記錄當(dāng)前時(shí)刻current_time,并比較current_time是否小于rto_time和rpo_time,若是,則執(zhí)行步驟(12); 否則,將“在RTO和RPO設(shè)置的時(shí)間內(nèi)找不到數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心為用戶提供服務(wù),仿真結(jié)束”字樣寫(xiě)入仿真結(jié)束原因記錄文件,并執(zhí)行步驟(37); (12)進(jìn)行切換數(shù)據(jù)流之前的數(shù)據(jù)有效性驗(yàn)證操作,即對(duì)本地?cái)?shù)據(jù)中心、本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心依次執(zhí)行在此數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中查找backup_or_product_flag=l的記錄rl,并在另外兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中查找backup_or_product_flag=2且其他描述字段值均與記錄rI中對(duì)應(yīng)的字段值相同的記錄r2,若記錄 r2 存在,則 validation_result_is_hit_num 加 I ;
否則,執(zhí)行 validation_result_is_miss_num 加 I ; (13)將當(dāng)前執(zhí)行時(shí)刻current_time 和驗(yàn)證結(jié)果 validation_result_is_hit_num、validation_resuIt_i s_mi ss_num存儲(chǔ)到存儲(chǔ)驗(yàn)證結(jié)果的文件中,同時(shí)初始化計(jì)數(shù)器i8=0,初始化本次中心切換操作已被執(zhí)行切換數(shù)據(jù)流操作的數(shù)據(jù)中心的個(gè)數(shù)been_changed_datacenter_num=l ; (14)比較i8是否小于或等于templ_product_num,若是,則執(zhí)行步驟(15); 否則,執(zhí)行步驟(26); (15)獲取當(dāng)前時(shí)刻current_time,并比較current_time是否小于或等于templ_end_time (i8),若是,則執(zhí)行步驟(17); 否則,執(zhí)行i8加I,并執(zhí)行步驟(16);
(16)檢測(cè)been_changed_datacenter_num 的值,若 been_changed_datacenter_num 值為I,則執(zhí)行步驟(14); 否則,執(zhí)行步驟(27); (17)將此條數(shù)據(jù)流切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心,并建立新的傳輸層連接,同時(shí)從存儲(chǔ)開(kāi)始節(jié)點(diǎn)開(kāi)始尋找存儲(chǔ)節(jié)點(diǎn)id,滿足其剩余空間max_store_size_store (id)不小于當(dāng)前數(shù)據(jù)流產(chǎn)生的數(shù)據(jù)量的估算值,若能找到這樣的id,則將此id選為當(dāng)前被切換的數(shù)據(jù)流的存儲(chǔ)服務(wù)器位置,執(zhí)行步驟(18); 否則,將“存儲(chǔ)設(shè)備不足,仿真結(jié)束”字樣寫(xiě)入仿真結(jié)束原因記錄文件,執(zhí)行步驟(37); (18)檢測(cè)本地?cái)?shù)據(jù)中心是否為當(dāng)前生產(chǎn)數(shù)據(jù)中心,即比較當(dāng)前生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流訪問(wèn)的應(yīng)用服務(wù)器編號(hào)是否小于或者等于本地?cái)?shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(^+3?+?,若是,確定本地?cái)?shù)據(jù)中心為當(dāng)前生產(chǎn)數(shù)據(jù)中心,設(shè)backup_or_product=l,獲得此數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte,此時(shí),對(duì)數(shù)據(jù)流的描述字段均已獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到本地?cái)?shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí)設(shè)backup_0r_product=2,構(gòu)成備份信息記錄寫(xiě)入到其他兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,temp_product_num 加 I,執(zhí)行步驟(19); 否則,執(zhí)行步驟(21);
(19)檢測(cè)been_changed_datacenter_num 的值,若 been_changed_datacenter_num 值為1,則確定此條被切換的數(shù)據(jù)流來(lái)自本地備份數(shù)據(jù)中心,將此被切換的數(shù)據(jù)流在本地備份數(shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)亥IJ,執(zhí)行i8加I,并執(zhí)行步驟(16); 否則,執(zhí)行步驟(20); (20)將此被切換的數(shù)據(jù)流在異地備份中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加1,執(zhí)行步驟(16); (21)檢測(cè)本地備份數(shù)據(jù)中心是否為當(dāng)前生產(chǎn)數(shù)據(jù)中心,即比較當(dāng)前生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流訪問(wèn)的應(yīng)用服務(wù)器編號(hào)是否大于本地?cái)?shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(^+3?+?且小于或等于本地備份數(shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(32+3(33+2(34,若是,則確定本地備份數(shù)據(jù)中心為當(dāng)前生產(chǎn)數(shù)據(jù)中心,設(shè)backup_or_product=l,獲得此數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte,此時(shí),對(duì)數(shù)據(jù)流的描述字段均已獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到本地備份數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí)設(shè)backup_or_product=2,構(gòu)造備份信息記錄寫(xiě)入到其他數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,temp_product_num加I,執(zhí)行步驟(22); 否則,異地備份數(shù)據(jù)中心為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,設(shè)backup_or_product=l,獲得此數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte,此時(shí)對(duì)數(shù)據(jù)流的描述字段均已經(jīng)獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到異地備份數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí)設(shè)backup_or_pr ο due t=2,構(gòu)造備份信息記錄寫(xiě)入到其他數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,t emp_product_num 加 I,執(zhí)行步驟(24);
(22)檢測(cè)been_changed_datacenter_num 的值,若 been_changed_datacenter_num 值為1,則確定此條被切換的數(shù)據(jù)流來(lái)自本地?cái)?shù)據(jù)中心,將此被切換的數(shù)據(jù)流在本地?cái)?shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加I,并執(zhí)行步驟(16);; 否則,確定此條被切換的數(shù)據(jù)流來(lái)自異地備份數(shù)據(jù)中心,執(zhí)行步驟(23); (23)將此被切換的數(shù)據(jù)流在異地備份數(shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加1,并執(zhí)行步驟(16);
(24)檢測(cè)been_changed_datacenter_num 的值,若 been_changed_datacenter_num 值為1,則確定此條被切換的數(shù)據(jù)流來(lái)自本地?cái)?shù)據(jù)中心,將此被切換的數(shù)據(jù)流在本地?cái)?shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加I,并執(zhí)行步驟(16); 否則,確定此條被切換的數(shù)據(jù)流來(lái)自本地備份數(shù)據(jù)中心,執(zhí)行步驟(25); (25)將此被切換的數(shù)據(jù)流在本地備份數(shù)據(jù)中心的生產(chǎn)信息和在其他兩個(gè)數(shù)據(jù)中心的備份信息中的結(jié)束時(shí)刻字段更新為當(dāng)前時(shí)刻,執(zhí)行i8加1,并執(zhí)行步驟(16); (26)將另一個(gè)數(shù)據(jù)中心的數(shù)據(jù)流切換到當(dāng)前的生產(chǎn)數(shù)據(jù)中心,更新本次中心切換中已被執(zhí)行切換數(shù)據(jù)流操作的數(shù)據(jù)中心的個(gè)數(shù)been_changed_datacenter_num=2,并執(zhí)行i8=0, templ_product_num=.temp2_product_num, id_diff_l=id_diff_2 ; (27)比較i8是否小于或等于templ_product_num,若是,則執(zhí)行步驟(15); 否則,數(shù)據(jù)流切換完成,更新當(dāng)前數(shù)據(jù)中心的生產(chǎn)信息,即執(zhí)行步驟(28); (28)進(jìn)行切換數(shù)據(jù)流之后的數(shù)據(jù)有效性驗(yàn)證操作,即對(duì)本地?cái)?shù)據(jù)中心、本地備份數(shù)據(jù)中心和異地備份數(shù)據(jù)中心依次執(zhí)行在此數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中查找backup_or_product_flag=l的記錄r3,并在另外兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中查找backup_or_product_flag=2且其他描述字段值均與記錄r3中對(duì)應(yīng)的字段值相同的記錄r4,若記錄 r4 存在,則 validation_result_is_hit_num 加 I ;
否則,執(zhí)行 validation_result_is_miss_num 加 I ; (29)將當(dāng)前執(zhí)行時(shí)刻current_time 和驗(yàn)證結(jié)果 validation_result_is_hit_num、validation_result_is_miss_num存儲(chǔ)到存儲(chǔ)驗(yàn)證結(jié)果的文件中; (30)根據(jù)前面步驟(6)中新產(chǎn)生的數(shù)據(jù)流的信息對(duì)新數(shù)據(jù)流建立傳輸層和應(yīng)用層連接,同時(shí)記錄新數(shù)據(jù)流信息,temp_product_num加I ; (31)檢測(cè)本地?cái)?shù)據(jù)中心是否為當(dāng)前生產(chǎn)數(shù)據(jù)中心,即比較當(dāng)前生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流訪問(wèn)的應(yīng)用服務(wù)器編號(hào)是否小于或者等于本地?cái)?shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3ci+3c2+3c3+c4,若是,則確定本地?cái)?shù)據(jù)中心為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,并更新本地?cái)?shù)據(jù)中心的生產(chǎn)的數(shù)據(jù)流信息,并更新其生產(chǎn)數(shù)目,即執(zhí)行l(wèi)ocal_product_num=temp_product_num,backup_or_product_flag(i9) =1,獲得當(dāng)前數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte (i9),此時(shí)對(duì)數(shù)據(jù)流的描述字段均已經(jīng)獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到當(dāng)前作為生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí),執(zhí)行backup_or_product_flag(i9)=2,構(gòu)造備份信息記錄寫(xiě)入到其他兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,其中,i9=0,l,……,local_product_num,執(zhí)行步驟(5); 否則,即執(zhí)行步驟(32); (32)檢測(cè)本地備份數(shù)據(jù)中心是否為當(dāng)前生產(chǎn)數(shù)據(jù)中心比較當(dāng)前生產(chǎn)數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流訪問(wèn)的應(yīng)用服務(wù)器編號(hào)是否大于本地?cái)?shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(^+3?+?且小于或等于本地備份數(shù)據(jù)中心應(yīng)用服務(wù)器編號(hào)最大值3(^+3(^+3(^+2?,若是,則確定本地備份數(shù)據(jù)中心為當(dāng)前生產(chǎn)數(shù)據(jù)中心,更新本地備份數(shù)據(jù)中心的生產(chǎn)信息和其生產(chǎn)數(shù)目,即執(zhí)行l(wèi)ocalbackup_product_ _num=temp—product—num,backup_or_product_f lag (i 10)=1,獲得當(dāng)前數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte(ilO),此時(shí)對(duì)數(shù)據(jù)流的描述字段均已獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到本地?cái)?shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,同時(shí)執(zhí)行backup_or_product_flag(il0)=2,構(gòu)造信息記錄寫(xiě)入到其他兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,其中,il0=0,1,......, localbackup_product_num,執(zhí)行步驟(5); 否則,確定異地備份數(shù)據(jù)中心為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,執(zhí)行步驟(33); (33)更新異地備份數(shù)據(jù)中心的生產(chǎn)信息和其生產(chǎn)數(shù)目,即執(zhí)行remotebackup_pr ο due t_num=t emp_pr ο due t_num, backup_or_product_f lag (ill) =1,獲得當(dāng)前數(shù)據(jù)流的實(shí)時(shí)字節(jié)real_byte (ill),此時(shí),對(duì)數(shù)據(jù)流的描述字段均已獲得,則構(gòu)造一條數(shù)據(jù)流描述信息記錄寫(xiě)入到本地?cái)?shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,執(zhí)行backup_or_product_flag(ill)=2,構(gòu)造備份信息記錄寫(xiě)入到其他兩個(gè)數(shù)據(jù)中心的數(shù)據(jù)流信息存儲(chǔ)文件中,其中,ill=0,l,......, remotebackup_product_num,執(zhí)行步驟(5); (34)檢測(cè)系統(tǒng)信號(hào),若system_signal=bad_state,則將系統(tǒng)信號(hào)更新為中心替代信號(hào),即執(zhí)行system_signal=replace_state,同時(shí)將本地備份數(shù)據(jù)中心更新為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,將本地?cái)?shù)據(jù)中.心和異地備份數(shù)據(jù)中心更新為當(dāng)前的備份數(shù)據(jù)中心,同時(shí)更新當(dāng)前的生產(chǎn)數(shù)據(jù)中心和備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的個(gè)數(shù),即執(zhí)行temp_(product_num)=localbackup_(product_num), templ_product_num=localbackup_product_num,templ_product_num=remotebackup_product_num,并設(shè)置從當(dāng)前兩個(gè)備份數(shù)據(jù)中心切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)流的目的服務(wù)器節(jié)點(diǎn)編號(hào)的增加值,即執(zhí)行id_diff_l=c4,id_diff_2=-c4,并執(zhí)行步驟(11); 否則,執(zhí)行步驟(30); (35)檢測(cè)系統(tǒng)信號(hào),若system_signal=bad_state,則將系統(tǒng)信號(hào)更新為中心替代信號(hào),即執(zhí)行system_signal=replace_state,同時(shí)將異地備份數(shù)據(jù)中心更新為當(dāng)前的生產(chǎn)數(shù)據(jù)中心,將本地?cái)?shù)據(jù)中心和本地備份數(shù)據(jù)中心更新為當(dāng)前的備份數(shù)據(jù)中心,同時(shí)更新當(dāng)前的生產(chǎn)數(shù)據(jù)中心和備份數(shù)據(jù)中心生產(chǎn)的數(shù)據(jù)流的個(gè)數(shù),即執(zhí)行temp_product_num=remotebackup_product_num, templ_product_num=local_product_num, temp2_product—num=localbackup—product—num,并設(shè)置從當(dāng)前兩個(gè)備份數(shù)據(jù)中心切換到當(dāng)前生產(chǎn)數(shù)據(jù)中心的數(shù)據(jù)流的目的服務(wù)器節(jié)點(diǎn)編號(hào)的增加值,即執(zhí)行id—diff—1=2c4,id—diff—2=c4,并執(zhí)行步驟(11);否則,執(zhí)行步驟(30); (36)獲取當(dāng)前執(zhí)行時(shí)刻current—time,并將判斷current—time是否小于rto—time和rpo_time,若是,則系統(tǒng)繼續(xù)忍受,執(zhí)行步驟(5);否則,將“在RTO和RPO設(shè)置的時(shí)間內(nèi)找不到數(shù)據(jù)中心作為生產(chǎn)數(shù)據(jù)中心為用戶提供服務(wù),仿真結(jié)束”字樣寫(xiě)入仿真結(jié)束原因記錄文件,并執(zhí)行步驟(37); (37)仿真結(jié)束。
【文檔編號(hào)】G06F9/455GK103473112SQ201310396291
【公開(kāi)日】2013年12月25日 申請(qǐng)日期:2013年9月3日 優(yōu)先權(quán)日:2013年9月3日
【發(fā)明者】姚文斌, 趙玲, 姚翔, 王真, 韓司 申請(qǐng)人:北京郵電大學(xué)