本發(fā)明涉及大規(guī)模集群系統(tǒng)管理領(lǐng)域,特別涉及一種數(shù)據(jù)更新系統(tǒng)及方法。
背景技術(shù):
集群系統(tǒng)是一組相互獨(dú)立的、通過(guò)高速網(wǎng)絡(luò)互聯(lián)的服務(wù)器所構(gòu)成一個(gè)設(shè)備組,并以單一系統(tǒng)的模式加以管理。當(dāng)客戶(hù)端與集群系統(tǒng)相互作用時(shí),集群系統(tǒng)中的多個(gè)服務(wù)器相當(dāng)于是一個(gè)獨(dú)立的服務(wù)器。在集群系統(tǒng)中的每一個(gè)服務(wù)器上都存儲(chǔ)有處理不同業(yè)務(wù)的應(yīng)用,即業(yè)務(wù)單元,當(dāng)有新的應(yīng)用加入或者要對(duì)舊的應(yīng)用進(jìn)行修改時(shí),就需要對(duì)集群系統(tǒng)進(jìn)行更新。
現(xiàn)有技術(shù)中,在對(duì)集群系統(tǒng)進(jìn)行數(shù)據(jù)更新時(shí),比如對(duì)某個(gè)應(yīng)用進(jìn)行更新時(shí),首先需要在該集群系統(tǒng)相應(yīng)的服務(wù)器中停止運(yùn)行舊應(yīng)用,即停止該舊應(yīng)用提供的服務(wù),之后刪除該舊應(yīng)用并添加新應(yīng)用,重啟相應(yīng)的服務(wù)器后便可運(yùn)行更新后的新應(yīng)用,即提供更新后的服務(wù),進(jìn)而完成數(shù)據(jù)的更新。
在實(shí)現(xiàn)本發(fā)明的過(guò)程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問(wèn)題:
由于數(shù)據(jù)更新的過(guò)程中需要停止提供服務(wù),之后還需重啟相應(yīng)的服務(wù)器才能完成更新,使服務(wù)器能夠提供更新后的服務(wù)。而為了不影響對(duì)業(yè)務(wù)請(qǐng)求的處理,通常情況下會(huì)在0點(diǎn)進(jìn)行更新,因此上述數(shù)據(jù)更新方式限制性強(qiáng)、更新時(shí)間長(zhǎng)且操作繁瑣。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有技術(shù)的問(wèn)題,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)更新系統(tǒng)及方法。所述技術(shù)方案如下:
第一方面,提供了一種數(shù)據(jù)更新系統(tǒng),所述系統(tǒng)包括文件服務(wù)器、至少一個(gè)業(yè)務(wù)服務(wù)器和業(yè)務(wù)管理服務(wù)器;
所述文件服務(wù)器用于存儲(chǔ)待更新數(shù)據(jù)包,所述待更新數(shù)據(jù)包中包括待更新業(yè)務(wù)模塊;
業(yè)務(wù)服務(wù)器包括容器和掛載至所述容器的至少一個(gè)業(yè)務(wù)模塊,每一個(gè)業(yè)務(wù)模塊包括至少一個(gè)業(yè)務(wù)單元,所述容器至少包括業(yè)務(wù)響應(yīng)模塊;
所述業(yè)務(wù)管理服務(wù)器用于在檢測(cè)到更新指令后,向目標(biāo)業(yè)務(wù)服務(wù)器轉(zhuǎn)發(fā)所述更新指令,所述更新指令至少包括所述待更新業(yè)務(wù)模塊的業(yè)務(wù)標(biāo)識(shí),所述目標(biāo)業(yè)務(wù)服務(wù)器用于提供與所述業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的業(yè)務(wù)處理;
所述目標(biāo)業(yè)務(wù)服務(wù)器用于在接收到所述更新指令后,根據(jù)所述業(yè)務(wù)標(biāo)識(shí)從所述文件服務(wù)器獲取所述待更新業(yè)務(wù)模塊,并對(duì)所述待更新業(yè)務(wù)模塊進(jìn)行解析,得到新業(yè)務(wù)單元的標(biāo)識(shí)信息、調(diào)用信息和版本信息;根據(jù)所述新業(yè)務(wù)單元的標(biāo)識(shí)信息將所述調(diào)用信息注冊(cè)至所述目標(biāo)業(yè)務(wù)服務(wù)器中容器的業(yè)務(wù)響應(yīng)模塊,以替換與所述新業(yè)務(wù)單元的標(biāo)識(shí)信息相同的舊業(yè)務(wù)單元的調(diào)用信息,使得后續(xù)響應(yīng)業(yè)務(wù)請(qǐng)求時(shí)直接調(diào)用所述新業(yè)務(wù)單元。
可選地,所述容器和所述至少一個(gè)業(yè)務(wù)模塊均采用開(kāi)放服務(wù)網(wǎng)關(guān)協(xié)議OSGI規(guī)范進(jìn)行打包,使得所述容器和所述至少一個(gè)業(yè)務(wù)模塊之間不存在耦合。
可選地,所述系統(tǒng)還包括分布式管理服務(wù)器,所述分布式管理服務(wù)器中存儲(chǔ)有所述至少一個(gè)業(yè)務(wù)服務(wù)器的節(jié)點(diǎn)信息,節(jié)點(diǎn)信息至少包括業(yè)務(wù)服務(wù)器的標(biāo)識(shí)信息、端口信息、容器的標(biāo)識(shí)信息和版本信息、業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息、業(yè)務(wù)單元的調(diào)用次數(shù);
在所述新業(yè)務(wù)單元的調(diào)用信息注冊(cè)至所述目標(biāo)業(yè)務(wù)服務(wù)器的業(yè)務(wù)響應(yīng)模塊后,將所述新業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息注冊(cè)至所述分布式管理服務(wù)器中,并刪除所述分布式管理服務(wù)器中與所述舊業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息。
可選地,所述目標(biāo)業(yè)務(wù)服務(wù)器在檢測(cè)到所述舊業(yè)務(wù)單元處于未被調(diào)用狀態(tài)后,刪除所述舊業(yè)務(wù)單元。
可選地,所述目標(biāo)業(yè)務(wù)服務(wù)器的容器中還包括業(yè)務(wù)管理模塊,所述業(yè)務(wù)管理模塊用于根據(jù)所述更新指令解析所述待更新業(yè)務(wù)模塊中業(yè)務(wù)單元的灰度值,所述灰度值指示了所述業(yè)務(wù)單元對(duì)與指定號(hào)碼段對(duì)應(yīng)的業(yè)務(wù)請(qǐng)求進(jìn)行響應(yīng)。
可選地,所述系統(tǒng)還包顯示裝置,
所述顯示裝置用于顯示業(yè)務(wù)監(jiān)控頁(yè)面,所述業(yè)務(wù)監(jiān)控頁(yè)面至少展示了所述系統(tǒng)中全部業(yè)務(wù)服務(wù)器的標(biāo)識(shí)信息和端口信息、容器的標(biāo)識(shí)信息和版本信息、業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息、業(yè)務(wù)單元的調(diào)用次數(shù);
在所述新業(yè)務(wù)單元的調(diào)用信息注冊(cè)至所述目標(biāo)業(yè)務(wù)服務(wù)器的業(yè)務(wù)響應(yīng)模塊 后,在所述業(yè)務(wù)監(jiān)控頁(yè)面上展示所述新業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息。
第二方面,提供了一種數(shù)據(jù)更新方法,所述方法包括:
業(yè)務(wù)管理服務(wù)器在檢測(cè)到更新指令后,向目標(biāo)業(yè)務(wù)服務(wù)器轉(zhuǎn)發(fā)所述更新指令,所述更新指令至少包括待更新業(yè)務(wù)模塊的業(yè)務(wù)標(biāo)識(shí),所述目標(biāo)業(yè)務(wù)服務(wù)器用于提供與所述業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的業(yè)務(wù)處理;
所述目標(biāo)業(yè)務(wù)服務(wù)器在接收到所述更新指令后,根據(jù)所述業(yè)務(wù)標(biāo)識(shí)從文件服務(wù)器獲取所述待更新業(yè)務(wù)模塊,并對(duì)所述待更新業(yè)務(wù)模塊進(jìn)行解析,得到新業(yè)務(wù)單元的標(biāo)識(shí)信息、調(diào)用信息和版本信息;
所述目標(biāo)業(yè)務(wù)服務(wù)器根據(jù)所述新業(yè)務(wù)單元的標(biāo)識(shí)信息將所述調(diào)用信息注冊(cè)至所述目標(biāo)業(yè)務(wù)服務(wù)器中容器的業(yè)務(wù)響應(yīng)模塊,以替換與所述標(biāo)識(shí)信息相同的舊業(yè)務(wù)單元的調(diào)用信息,使得后續(xù)響應(yīng)業(yè)務(wù)請(qǐng)求時(shí)直接調(diào)用所述新業(yè)務(wù)單元。
可選地,所述方法還包括:
所述目標(biāo)業(yè)務(wù)服務(wù)器在檢測(cè)到所述舊業(yè)務(wù)單元處于未被調(diào)用狀態(tài)后,刪除所述舊業(yè)務(wù)單元。
可選地,所述方法還包括:
所述目標(biāo)業(yè)務(wù)服務(wù)器容器中的業(yè)務(wù)管理模塊根據(jù)所述更新指令,解析所述待更新業(yè)務(wù)模塊中所述新業(yè)務(wù)單元的灰度值,所述灰度值指示了所述新業(yè)務(wù)單元對(duì)與指定號(hào)碼段對(duì)應(yīng)的業(yè)務(wù)請(qǐng)求進(jìn)行響應(yīng)。
可選地,所述方法還包括:
在業(yè)務(wù)監(jiān)控頁(yè)面上,至少展示系統(tǒng)中全部業(yè)務(wù)服務(wù)器的標(biāo)識(shí)信息和端口信息、容器的標(biāo)識(shí)信息和版本信息、業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息、業(yè)務(wù)單元的調(diào)用次數(shù);
在所述新業(yè)務(wù)單元的調(diào)用信息注冊(cè)至所述目標(biāo)業(yè)務(wù)服務(wù)器中容器的業(yè)務(wù)響應(yīng)模塊后,在所述業(yè)務(wù)監(jiān)控頁(yè)面上展示所述新業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息。
本發(fā)明實(shí)施例提供的技術(shù)方案帶來(lái)的有益效果是:
業(yè)務(wù)管理服務(wù)器在檢測(cè)到更新指令后,向目標(biāo)業(yè)務(wù)服務(wù)器轉(zhuǎn)發(fā)更新指令,更新指令至少包括待更新業(yè)務(wù)模塊的業(yè)務(wù)標(biāo)識(shí),目標(biāo)業(yè)務(wù)服務(wù)器用于提供與業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的業(yè)務(wù)處理;目標(biāo)業(yè)務(wù)服務(wù)器在接收到更新指令后,根據(jù)業(yè)務(wù)標(biāo)識(shí)從文件服務(wù)器獲取待更新業(yè)務(wù)模塊,并對(duì)待更新業(yè)務(wù)模塊進(jìn)行解析,得到新業(yè) 務(wù)單元的標(biāo)識(shí)信息、調(diào)用信息和版本信息;目標(biāo)業(yè)務(wù)服務(wù)器根據(jù)新業(yè)務(wù)單元的標(biāo)識(shí)信息將調(diào)用信息注冊(cè)至目標(biāo)業(yè)務(wù)服務(wù)器中容器的業(yè)務(wù)響應(yīng)模塊,以替換與標(biāo)識(shí)信息相同的舊業(yè)務(wù)單元的調(diào)用信息,使得后續(xù)響應(yīng)業(yè)務(wù)請(qǐng)求時(shí)直接調(diào)用新業(yè)務(wù)單元。由于在更新業(yè)務(wù)單元時(shí),可在不停止服務(wù)的情況下完成更新,不會(huì)對(duì)相應(yīng)的業(yè)務(wù)請(qǐng)求造成影響,因此該種數(shù)據(jù)更新方式可在任意時(shí)間段進(jìn)行更新,靈活性高、更新時(shí)間短且步驟簡(jiǎn)便。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1A是本發(fā)明實(shí)施例提供的一種數(shù)據(jù)更新系統(tǒng)的結(jié)構(gòu)示意圖;
圖1B是本發(fā)明實(shí)施例提供的一種業(yè)務(wù)服務(wù)器中的內(nèi)部結(jié)構(gòu)示意圖;
圖1C是本發(fā)明實(shí)施例提供的一種數(shù)據(jù)更新系統(tǒng)的結(jié)構(gòu)示意圖;
圖2是本發(fā)明實(shí)施例提供的一種數(shù)據(jù)交互流程圖;
圖3是本發(fā)明實(shí)施例提供的一種服務(wù)器的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
圖1A是本發(fā)明實(shí)施例提供的一種數(shù)據(jù)更新系統(tǒng)的結(jié)構(gòu)示意圖。如圖1A所示,該系統(tǒng)包括:文件服務(wù)器、至少一個(gè)業(yè)務(wù)服務(wù)器和業(yè)務(wù)管理服務(wù)器。
其中,文件服務(wù)器用于存儲(chǔ)待更新數(shù)據(jù)包,待更新數(shù)據(jù)包中包括待更新業(yè)務(wù)模塊;
業(yè)務(wù)服務(wù)器包括具有不同版本信息的多個(gè)容器和掛載至每一個(gè)容器上的至少一個(gè)業(yè)務(wù)模塊,每一個(gè)業(yè)務(wù)模塊包括至少一個(gè)業(yè)務(wù)單元,每一個(gè)容器中至少包括業(yè)務(wù)響應(yīng)模塊。業(yè)務(wù)服務(wù)器的容器中還包括業(yè)務(wù)管理模塊、上下文管理模 塊,該業(yè)務(wù)服務(wù)器還包括業(yè)務(wù)通用組件,該業(yè)務(wù)通信組件與業(yè)務(wù)模塊均處于系統(tǒng)中的業(yè)務(wù)環(huán)境。其中,該業(yè)務(wù)管理模塊為容器的核心功能包,可為feinno-app-master組件,提供對(duì)外的命令行接入控制,用于對(duì)容器內(nèi)包含的其他模塊進(jìn)行逐一啟動(dòng)并注冊(cè)至容器中的上下文管理模塊。當(dāng)容器啟動(dòng)完成后,該業(yè)務(wù)管理模塊還用于啟動(dòng)業(yè)務(wù)模塊以及業(yè)務(wù)通用組件,并將二者注冊(cè)至容器中的上下文管理器中,該業(yè)務(wù)通用組件可為feinno-imps組件。該上下文管理模塊可為containercontext組件,用于管理業(yè)務(wù)單元的上下文對(duì)接,即其中存儲(chǔ)了該容器中所有業(yè)務(wù)單元的調(diào)用關(guān)系,明確了每一個(gè)業(yè)務(wù)單元的上游業(yè)務(wù)和下游業(yè)務(wù),保證了業(yè)務(wù)流程可正確執(zhí)行。此外該容器中的全部業(yè)務(wù)單元的標(biāo)識(shí)信息和調(diào)用信息均需注冊(cè)至業(yè)務(wù)響應(yīng)模塊中,以為業(yè)務(wù)請(qǐng)求提供對(duì)應(yīng)業(yè)務(wù)單元的調(diào)用入口。在進(jìn)行數(shù)據(jù)更新時(shí),業(yè)務(wù)管理模塊用于根據(jù)更新指令解析待更新業(yè)務(wù)模塊中業(yè)務(wù)單元的灰度值,灰度值指示了業(yè)務(wù)單元對(duì)與指定號(hào)碼段對(duì)應(yīng)的業(yè)務(wù)請(qǐng)求進(jìn)行響應(yīng)。
需要說(shuō)明的是,業(yè)務(wù)服務(wù)器的容器中還包括庫(kù)模塊、協(xié)議處理模塊、注冊(cè)管理模塊、業(yè)務(wù)引擎模塊和同步模塊,該五個(gè)模塊為業(yè)務(wù)管理模塊(feinno-app-master)和上下文管理模塊(containercontex)提供底層支撐,保證了業(yè)務(wù)服務(wù)器中各模塊的正常運(yùn)行。其中,該庫(kù)模塊可為feinno-lib組件,用于存儲(chǔ)函數(shù)的調(diào)用信息;該協(xié)議處理模塊可為feinno-common組件,用于對(duì)業(yè)務(wù)請(qǐng)求進(jìn)行協(xié)議處理;該注冊(cè)管理模塊可為feinno-ha組件,用于支撐業(yè)務(wù)管理模塊執(zhí)行對(duì)業(yè)務(wù)模塊和業(yè)務(wù)單元的注冊(cè)操作;業(yè)務(wù)引擎模塊可為feinno-app-engine,用于為系統(tǒng)中其他模塊的實(shí)現(xiàn)提供支撐;該同步模塊可為feinno-synczk,用于控制系統(tǒng)中的業(yè)務(wù)流程。如圖1B所示為業(yè)務(wù)服務(wù)器中的內(nèi)部結(jié)構(gòu)示意圖。
業(yè)務(wù)管理服務(wù)器具有配置管理、遠(yuǎn)程執(zhí)行、監(jiān)控等功能,可通過(guò)部署SaltStack實(shí)現(xiàn),提供命令行接口,通過(guò)獲取管理員在命令行輸入窗口中輸入的命令,便可執(zhí)行對(duì)系統(tǒng)業(yè)務(wù)的更新部署。業(yè)務(wù)管理服務(wù)器上配置有一個(gè)主控端(maser端)和多個(gè)被控端(minion端),每一個(gè)被控端與一個(gè)業(yè)務(wù)服務(wù)器對(duì)接。業(yè)務(wù)管理服務(wù)器用于通過(guò)主控端向任一被控端發(fā)送指令,進(jìn)而由任一被控端將指令傳送至與其對(duì)接的業(yè)務(wù)服務(wù)器。其中,業(yè)務(wù)服務(wù)器通過(guò)業(yè)務(wù)管理模塊接收業(yè)務(wù)管理服務(wù)器發(fā)送的指令。業(yè)務(wù)管理服務(wù)器還用于在檢測(cè)到更新指令后,向目標(biāo)業(yè)務(wù)服務(wù)器轉(zhuǎn)發(fā)該更新指令,該更新指令至少包括該待更新業(yè)務(wù)模塊的業(yè)務(wù)標(biāo)識(shí),目 標(biāo)業(yè)務(wù)服務(wù)器用于提供與業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的業(yè)務(wù)處理。
目標(biāo)業(yè)務(wù)服務(wù)器,即正在更新業(yè)務(wù)模塊的業(yè)務(wù)服務(wù)器,用于在業(yè)務(wù)管理模塊接收到更新指令后,根據(jù)業(yè)務(wù)標(biāo)識(shí)從文件服務(wù)器獲取待更新業(yè)務(wù)模塊,并對(duì)待更新業(yè)務(wù)模塊進(jìn)行解析,得到新業(yè)務(wù)單元(即應(yīng)用)的標(biāo)識(shí)信息、調(diào)用信息和版本信息。業(yè)務(wù)管理模塊根據(jù)新業(yè)務(wù)單元的標(biāo)識(shí)信息將調(diào)用信息注冊(cè)至目標(biāo)業(yè)務(wù)服務(wù)器中容器的業(yè)務(wù)響應(yīng)模塊,以替換與新業(yè)務(wù)單元的標(biāo)識(shí)信息相同的舊業(yè)務(wù)單元的調(diào)用信息,使得后續(xù)響應(yīng)業(yè)務(wù)請(qǐng)求時(shí)直接調(diào)用新業(yè)務(wù)單元,該業(yè)務(wù)響應(yīng)模塊可為appcontainer。需要說(shuō)明的是,目標(biāo)業(yè)務(wù)服務(wù)器在檢測(cè)到舊業(yè)務(wù)單元處于未被調(diào)用狀態(tài)后,可刪除舊業(yè)務(wù)單元,以減少內(nèi)存的占用。
需要說(shuō)明的是,本發(fā)明實(shí)施例提供的系統(tǒng)為集群系統(tǒng),系統(tǒng)中的每一個(gè)業(yè)務(wù)服務(wù)器可包括多個(gè)容器,該多個(gè)容器分別具有不同的版本信息,為業(yè)務(wù)模塊提供處理不同業(yè)務(wù)請(qǐng)求的能力,比如若業(yè)務(wù)請(qǐng)求符合HTTP(HyperText Transfer Protocol,超文本傳輸協(xié)議)協(xié)議規(guī)范,則該請(qǐng)求需要通過(guò)具有HTTP協(xié)議處理能力的容器來(lái)調(diào)用相應(yīng)的業(yè)務(wù)模塊進(jìn)行處理。每一個(gè)容器和每一個(gè)業(yè)務(wù)模塊均采用OSGI(Open Service Gateway Initiative,開(kāi)放服務(wù)網(wǎng)關(guān)協(xié)議)規(guī)范進(jìn)行打包,得到容器bundle和業(yè)務(wù)bundle,每一個(gè)bundle由一個(gè)獨(dú)立的ClassLoader加載,使得在編碼階段就會(huì)保證不會(huì)有任何容器級(jí)bundle依賴(lài)業(yè)務(wù)bundle,這樣在更新業(yè)務(wù)模塊時(shí),不會(huì)對(duì)其他業(yè)務(wù)模塊和容器產(chǎn)生影響,進(jìn)而能夠在更新完成之后,徹底刪除舊業(yè)務(wù)模塊,減少內(nèi)存的占用,提高更新的效率。
在本發(fā)明實(shí)施例中,該系統(tǒng)還包括分布式管理服務(wù)器和顯示裝置,如圖1C所示為本發(fā)明實(shí)施例一種數(shù)據(jù)更新系統(tǒng)的結(jié)構(gòu)示意圖,其中包括分布式管理服務(wù)器和顯示裝置。其中,該分布式管理服務(wù)器可通過(guò)部署分布式協(xié)調(diào)服務(wù)zookeeper來(lái)實(shí)現(xiàn),該分布式管理服務(wù)器中存儲(chǔ)有至少一個(gè)業(yè)務(wù)服務(wù)器的節(jié)點(diǎn)信息,節(jié)點(diǎn)信息至少包括業(yè)務(wù)服務(wù)器的標(biāo)識(shí)信息、端口信息、容器的標(biāo)識(shí)信息和版本信息、業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息、業(yè)務(wù)單元的調(diào)用次數(shù);當(dāng)更新業(yè)務(wù)模塊時(shí),在新業(yè)務(wù)單元的調(diào)用信息注冊(cè)至目標(biāo)業(yè)務(wù)服務(wù)器的業(yè)務(wù)響應(yīng)模塊后,將新業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息注冊(cè)至分布式管理服務(wù)器中,即注冊(cè)至zookeeper中,并刪除zookeeper中與新業(yè)務(wù)單元的標(biāo)識(shí)信息相同的舊業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息,終止該舊業(yè)務(wù)單元提供的服務(wù)。這樣,由于舊業(yè)務(wù)單元在zookeeper中沒(méi)有節(jié)點(diǎn)信息,因此系統(tǒng)對(duì)接的業(yè)務(wù)請(qǐng)求,訪問(wèn)的都是新業(yè)務(wù) 單元。當(dāng)對(duì)處于等待調(diào)用狀態(tài)或處于被調(diào)用狀態(tài)的舊業(yè)務(wù)單元的調(diào)用都結(jié)束后,刪除該舊業(yè)務(wù)單元。之后再?gòu)纳舷挛墓芾砥鱟ontainercontext中刪除該舊業(yè)務(wù)單元的注冊(cè)信息。
其中該顯示裝置用于顯示業(yè)務(wù)監(jiān)控頁(yè)面,業(yè)務(wù)監(jiān)控頁(yè)面至少展示了系統(tǒng)中全部業(yè)務(wù)服務(wù)器的標(biāo)識(shí)信息、端口信息、容器的標(biāo)識(shí)信息和版本信息、業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息、業(yè)務(wù)單元的調(diào)用次數(shù);在新業(yè)務(wù)單元的調(diào)用信息注冊(cè)至目標(biāo)業(yè)務(wù)服務(wù)器的業(yè)務(wù)響應(yīng)模塊后,在業(yè)務(wù)監(jiān)控頁(yè)面上展示新業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息。
圖2是結(jié)合圖1A、圖1B和圖1C所示的數(shù)據(jù)更新系統(tǒng)提供的一種數(shù)據(jù)交互流程圖,參見(jiàn)圖2,本發(fā)明實(shí)施例提供的數(shù)據(jù)交互流程包括:
201、業(yè)務(wù)管理服務(wù)器在檢測(cè)到更新指令后,向目標(biāo)業(yè)務(wù)服務(wù)器轉(zhuǎn)發(fā)該更新指令。
在本發(fā)明實(shí)施例中,在對(duì)系統(tǒng)管理的過(guò)程中,需要對(duì)系統(tǒng)中原有的業(yè)務(wù)單元進(jìn)行修改、替換或者添加新的業(yè)務(wù)單元,比如系統(tǒng)中出現(xiàn)漏洞、業(yè)務(wù)邏輯發(fā)生變化、傳輸協(xié)議發(fā)生變化、添加新的功能等,本發(fā)明實(shí)施例對(duì)此不進(jìn)行具體限定。為了區(qū)分不同的業(yè)務(wù)單元并便于管理,一般會(huì)對(duì)每一個(gè)業(yè)務(wù)單元標(biāo)注其版本信息,具有同一個(gè)標(biāo)識(shí)信息的業(yè)務(wù)單元可具有不同的版本信息。
在進(jìn)行數(shù)據(jù)更新時(shí),首先需要開(kāi)發(fā)人員通過(guò)計(jì)算機(jī)將待更新數(shù)據(jù)包上傳至文件服務(wù)器,該待更新數(shù)據(jù)包中可包含多個(gè)待更新業(yè)務(wù)模塊。之后,運(yùn)維人員可通過(guò)顯示設(shè)備調(diào)用業(yè)務(wù)管理服務(wù)的命令行輸入窗口,并在其中輸入更新指令,該更新指令中包括待更新數(shù)據(jù)包的標(biāo)識(shí)信息,該待更新數(shù)據(jù)包的標(biāo)識(shí)信息中至少包括該待更新數(shù)據(jù)包的包名和存儲(chǔ)路徑。業(yè)務(wù)管理服務(wù)器在檢測(cè)到更新指令后,根據(jù)其中包含的待更新數(shù)據(jù)包的包名和存儲(chǔ)路徑,讀取文件服務(wù)器中對(duì)應(yīng)的待更新數(shù)據(jù)包。之后,對(duì)該待更新數(shù)據(jù)包進(jìn)行解析,得到多個(gè)業(yè)務(wù)模塊的業(yè)務(wù)標(biāo)識(shí)。對(duì)于每一個(gè)業(yè)務(wù)模塊的業(yè)務(wù)標(biāo)識(shí),業(yè)務(wù)管理服務(wù)器會(huì)在配置管理列表中獲取與該業(yè)務(wù)模塊的業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)業(yè)務(wù)服務(wù)器的標(biāo)識(shí)信息,并向該目標(biāo)業(yè)務(wù)服務(wù)器的標(biāo)識(shí)信息對(duì)應(yīng)的目標(biāo)業(yè)務(wù)服務(wù)器轉(zhuǎn)發(fā)更新指令。其中配置管理列表中存儲(chǔ)了業(yè)務(wù)服務(wù)器的標(biāo)識(shí)信息和業(yè)務(wù)模塊的業(yè)務(wù)標(biāo)識(shí)之間的對(duì)應(yīng)關(guān)系。
需要說(shuō)明的是,在業(yè)務(wù)管理服務(wù)器獲取到與業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的目標(biāo)業(yè)務(wù)服務(wù) 器的標(biāo)識(shí)信息后,將該業(yè)務(wù)標(biāo)識(shí)添加至上述更新指令中,其中該業(yè)務(wù)標(biāo)識(shí)中至少包括該待更新業(yè)務(wù)模塊的存儲(chǔ)路徑。之后,業(yè)務(wù)管理服務(wù)器通過(guò)與該目標(biāo)業(yè)務(wù)服務(wù)器的標(biāo)識(shí)信息匹配的被控端,向目標(biāo)業(yè)務(wù)服務(wù)器轉(zhuǎn)發(fā)該更新指令。若待更新數(shù)據(jù)包中的待更新業(yè)務(wù)模塊為新添加的業(yè)務(wù)模塊,即當(dāng)前全部業(yè)務(wù)管理服務(wù)器上均不存在與該待更新業(yè)務(wù)模塊的業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的業(yè)務(wù)模塊,則可在該待更新業(yè)務(wù)模塊中直接添加與其對(duì)應(yīng)的業(yè)務(wù)服務(wù)器的標(biāo)識(shí)信息,也可在業(yè)務(wù)管理服務(wù)器中預(yù)先添加該待更新業(yè)務(wù)模塊的業(yè)務(wù)標(biāo)識(shí)與業(yè)務(wù)服務(wù)器的標(biāo)識(shí)信息之間的對(duì)應(yīng)關(guān)系,本發(fā)明實(shí)施例對(duì)此不進(jìn)行具體限定。
需要說(shuō)明的是,由于待更新數(shù)據(jù)包中可能包含多個(gè)待更新業(yè)務(wù)模塊,而該多個(gè)待更新業(yè)務(wù)模塊可能需要更新到不同的業(yè)務(wù)服務(wù)器,即該多個(gè)待更新業(yè)務(wù)模塊對(duì)應(yīng)不同的目標(biāo)業(yè)務(wù)服務(wù)器,本發(fā)明實(shí)施例僅以一個(gè)目標(biāo)業(yè)務(wù)服務(wù)器的數(shù)據(jù)更新過(guò)程為例進(jìn)行解釋說(shuō)明。
202、目標(biāo)業(yè)務(wù)服務(wù)器在接收到更新指令后,根據(jù)業(yè)務(wù)標(biāo)識(shí)從文件服務(wù)器中獲取對(duì)應(yīng)的待更新業(yè)務(wù)模塊,并對(duì)該待更新業(yè)務(wù)模塊進(jìn)行解析,得到新業(yè)務(wù)單元的標(biāo)識(shí)信息、調(diào)用信息和版本信息。
在本發(fā)明實(shí)施例中,目標(biāo)業(yè)務(wù)服務(wù)器通過(guò)容器中的業(yè)務(wù)管理模塊接收業(yè)務(wù)管理服務(wù)器發(fā)送的更新指令,并根據(jù)更新指令中業(yè)務(wù)標(biāo)識(shí)指示的待更新業(yè)務(wù)模塊的存儲(chǔ)路徑,從文件服務(wù)器中下載相應(yīng)的待更新業(yè)務(wù)模塊至目標(biāo)業(yè)務(wù)服務(wù)器中。之后,業(yè)務(wù)管理模塊對(duì)該待更新業(yè)務(wù)模塊進(jìn)行解析,得到新業(yè)務(wù)單元的標(biāo)識(shí)信息、調(diào)用信息和版本信息。其中,待更新業(yè)務(wù)模塊中可包括多個(gè)新業(yè)務(wù)單元也可包括一個(gè)新業(yè)務(wù)單元,本發(fā)明實(shí)施例對(duì)此不進(jìn)行具體限定。業(yè)務(wù)單元的調(diào)用信息用于提供該業(yè)務(wù)單元的調(diào)用入口,版本信息用于區(qū)分具有相同標(biāo)識(shí)信息的業(yè)務(wù)單元。
203、目標(biāo)業(yè)務(wù)服務(wù)器根據(jù)新業(yè)務(wù)單元的標(biāo)識(shí)信息將該調(diào)用信息注冊(cè)至業(yè)務(wù)響應(yīng)模塊,并將新業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息注冊(cè)至分布式管理服務(wù)器。
在本發(fā)明實(shí)施例中,在業(yè)務(wù)管理模塊對(duì)待更新業(yè)務(wù)模塊進(jìn)行解析后,對(duì)于待更新模塊中的每一個(gè)新業(yè)務(wù)單元,將該新業(yè)務(wù)單元的調(diào)用信息注冊(cè)至業(yè)務(wù)響應(yīng)模塊,以替換與該新業(yè)務(wù)單元的標(biāo)識(shí)信息相同的舊業(yè)務(wù)單元的調(diào)用信息,使得后續(xù)響應(yīng)業(yè)務(wù)請(qǐng)求時(shí)直接調(diào)用該新業(yè)務(wù)單元。在根據(jù)新業(yè)務(wù)單元進(jìn)行更新時(shí),業(yè)務(wù)管理模塊首先在業(yè)務(wù)響應(yīng)模塊中查找,是否存在與該新業(yè)務(wù)單元匹配的注 冊(cè)信息,即是否存在與該新業(yè)務(wù)單元的標(biāo)識(shí)信息匹配的舊業(yè)務(wù)單元的調(diào)用信息。若存在,則將新業(yè)務(wù)單元的調(diào)用信息直接將該舊業(yè)務(wù)單元的調(diào)用信息替換掉。由于在業(yè)務(wù)響應(yīng)模塊中,與業(yè)務(wù)單元匹配的調(diào)用信息是唯一的,因此當(dāng)新業(yè)務(wù)單元的調(diào)用信息注冊(cè)至業(yè)務(wù)響應(yīng)模塊后,若接收到相應(yīng)的業(yè)務(wù)請(qǐng)求,則可直接調(diào)用該新業(yè)務(wù)單元進(jìn)行響應(yīng),因此該業(yè)務(wù)單元的更新過(guò)程中無(wú)需先停止該業(yè)務(wù)單元提供的服務(wù),再通過(guò)重啟提供新的服務(wù),此過(guò)程對(duì)用戶(hù)來(lái)說(shuō)是無(wú)感知的,不會(huì)影響用戶(hù)的使用。其中,業(yè)務(wù)響應(yīng)模塊中存儲(chǔ)的注冊(cè)信息可通過(guò)一一映射的Map函數(shù)實(shí)現(xiàn),也可通過(guò)其他方式實(shí)現(xiàn),本發(fā)明實(shí)施例對(duì)此不進(jìn)行具體限定。
需要說(shuō)明的是,若業(yè)務(wù)管理模塊未在業(yè)務(wù)響應(yīng)模塊中查找到與某一新業(yè)務(wù)單元的標(biāo)識(shí)信息匹配的舊業(yè)務(wù)單元的調(diào)用信息,則確定該新業(yè)務(wù)單元為新添加的業(yè)務(wù)單元,直接將該新業(yè)務(wù)單元的調(diào)用信息添加至業(yè)務(wù)響應(yīng)模塊中。
需要說(shuō)明的是,目標(biāo)業(yè)務(wù)服務(wù)器在將新業(yè)務(wù)單元注冊(cè)至業(yè)務(wù)響應(yīng)模塊后,為了便于系統(tǒng)的分布式管理,還需將該新業(yè)務(wù)單元注冊(cè)至分布式管理服務(wù)器,即:目標(biāo)業(yè)務(wù)服務(wù)器在將新業(yè)務(wù)單元注冊(cè)至業(yè)務(wù)響應(yīng)模塊后,將該新業(yè)務(wù)單元的添加消息發(fā)送至分布式管理服務(wù)器,其中該添加消息中至少包括該新業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息;分布式管理服務(wù)器根據(jù)接收到的添加消息,將新業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息作為注冊(cè)信息存儲(chǔ)起來(lái)。
需要說(shuō)明的是,在對(duì)系統(tǒng)中的業(yè)務(wù)單元進(jìn)行更新時(shí),為了保證新業(yè)務(wù)單元能夠正確響應(yīng)業(yè)務(wù)請(qǐng)求,可先對(duì)該新業(yè)務(wù)單元的功能進(jìn)行測(cè)試,即將該新業(yè)務(wù)單元對(duì)應(yīng)的服務(wù)先提供給部分用戶(hù),待該部分用戶(hù)的業(yè)務(wù)請(qǐng)求均得到正確響應(yīng)后,在將該新業(yè)務(wù)單元對(duì)應(yīng)的服務(wù)提供給全部用戶(hù)。為了實(shí)現(xiàn)上述需求,本發(fā)明實(shí)施例提供了灰度機(jī)制,即開(kāi)發(fā)人員可在新業(yè)務(wù)單元中設(shè)置該新業(yè)務(wù)單元的灰度值,該灰度值可為指定號(hào)碼段,指示了該新業(yè)務(wù)單元僅對(duì)與指定號(hào)碼段對(duì)應(yīng)的業(yè)務(wù)請(qǐng)求進(jìn)行響應(yīng)。在業(yè)務(wù)管理模塊對(duì)待更新業(yè)務(wù)模塊進(jìn)行解析時(shí),若新業(yè)務(wù)單元中包含灰度值,則將該灰度值進(jìn)行存儲(chǔ)。當(dāng)業(yè)務(wù)服務(wù)器在接收到業(yè)務(wù)請(qǐng)求后,若檢測(cè)到與該業(yè)務(wù)請(qǐng)求對(duì)應(yīng)的新業(yè)務(wù)單元設(shè)置了灰度值,則判斷該業(yè)務(wù)請(qǐng)求對(duì)應(yīng)的號(hào)碼是否包含在灰度值指示的指定號(hào)碼段中,若是,則對(duì)該業(yè)務(wù)請(qǐng)求進(jìn)行響應(yīng);若不是,則不對(duì)該業(yè)務(wù)請(qǐng)求進(jìn)行響應(yīng)。
204、顯示裝置在新業(yè)務(wù)單元的調(diào)用信息注冊(cè)至目標(biāo)業(yè)務(wù)服務(wù)器中容器的業(yè)務(wù)響應(yīng)模塊后,從分布式管理服務(wù)器獲取該新業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息, 并在業(yè)務(wù)監(jiān)控頁(yè)面上展示該新業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息。
在本發(fā)明實(shí)施例中,為了實(shí)時(shí)監(jiān)控系統(tǒng)的狀態(tài),以便更好的對(duì)系統(tǒng)進(jìn)行管理和維護(hù),提供了顯示裝置,并且在該顯示裝置的業(yè)務(wù)監(jiān)控頁(yè)面上,展示了系統(tǒng)中全部業(yè)務(wù)服務(wù)器的標(biāo)識(shí)信息和端口信息、容器的標(biāo)識(shí)信息和版本信息、業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息、業(yè)務(wù)單元的調(diào)用次數(shù)。其中,業(yè)務(wù)服務(wù)器的標(biāo)識(shí)信息可為業(yè)務(wù)服務(wù)器的物理地址;通過(guò)業(yè)務(wù)服務(wù)器的端口信息可獲知該業(yè)務(wù)服務(wù)器在進(jìn)行不同的數(shù)據(jù)傳輸時(shí)使用的不同端口;業(yè)務(wù)單元的調(diào)用次數(shù)指示了該業(yè)務(wù)單元響應(yīng)業(yè)務(wù)請(qǐng)求的次數(shù),可包括響應(yīng)成功的次數(shù)和響應(yīng)失敗的次數(shù)。
需要說(shuō)明的是,該顯示裝置可與分布式管理服務(wù)器相連接,該業(yè)務(wù)監(jiān)控頁(yè)面上展示的信息,可通過(guò)讀取分布式管理服務(wù)器中存儲(chǔ)的業(yè)務(wù)服務(wù)器的節(jié)點(diǎn)信息來(lái)獲取。當(dāng)新業(yè)務(wù)單元的調(diào)用信息注冊(cè)至目標(biāo)業(yè)務(wù)服務(wù)器中容器的業(yè)務(wù)響應(yīng)模塊后,根據(jù)步驟203可知,分布式管理服務(wù)器中會(huì)注冊(cè)該新業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息,該顯示裝置可向分布式服務(wù)器讀取新業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息,并將讀取的信息展示在業(yè)務(wù)監(jiān)控頁(yè)面上。此外,在該業(yè)務(wù)監(jiān)控頁(yè)面上還可提供查詢(xún)功能,通過(guò)該查詢(xún)功能獲取指定業(yè)務(wù)服務(wù)器的信息或指定業(yè)務(wù)單元的信息,本發(fā)明實(shí)施例對(duì)此不進(jìn)行具體限定。當(dāng)顯示裝置檢測(cè)到業(yè)務(wù)監(jiān)控頁(yè)面上查詢(xún)按鈕的點(diǎn)擊操作時(shí),獲取待查詢(xún)信息;該顯示裝置將該待查詢(xún)信息發(fā)送至分布式管理服務(wù)器,由分布式管理服務(wù)器返回與該待查詢(xún)信息匹配的結(jié)果。其中該待查詢(xún)信息可為業(yè)務(wù)單元的標(biāo)識(shí)信息,業(yè)務(wù)服務(wù)器的端口信息等,本發(fā)明實(shí)施例對(duì)此不進(jìn)行具體限定。比如,若該待查詢(xún)信息為業(yè)務(wù)單元的標(biāo)識(shí)信息,則分布式管理服務(wù)器返回與該標(biāo)識(shí)信息匹配的業(yè)務(wù)單元的標(biāo)識(shí)信息、版本信息、調(diào)用次數(shù)等。
205、目標(biāo)業(yè)務(wù)服務(wù)器在檢測(cè)到舊業(yè)務(wù)單元處于未被調(diào)用狀態(tài)后,刪除該舊業(yè)務(wù)單元。
在本發(fā)明實(shí)施例中,在將新業(yè)務(wù)單元的調(diào)用信息注冊(cè)到業(yè)務(wù)響應(yīng)模塊之后,與其對(duì)應(yīng)的舊業(yè)務(wù)單元可能還處于被調(diào)用的狀態(tài),此時(shí)為了保證能夠正常響應(yīng)業(yè)務(wù)請(qǐng)求,還需在業(yè)務(wù)服務(wù)器中保留該舊業(yè)務(wù)單元。當(dāng)業(yè)務(wù)服務(wù)器檢測(cè)到該舊業(yè)務(wù)單元由被調(diào)用狀態(tài)轉(zhuǎn)換為未被調(diào)用狀態(tài)后,將該舊業(yè)務(wù)單元?jiǎng)h除,以保證該舊業(yè)務(wù)單元不占用內(nèi)存,避免在業(yè)務(wù)單元不斷更新的過(guò)程中造成內(nèi)存的不斷增加,進(jìn)而影響更新的效率。
需要說(shuō)明的是,在目標(biāo)業(yè)務(wù)服務(wù)器刪除該舊業(yè)務(wù)模塊后,還需在分布式管理服務(wù)器中將該舊業(yè)務(wù)模塊的注冊(cè)信息刪除,即:目標(biāo)業(yè)務(wù)服務(wù)器在刪除該舊業(yè)務(wù)模塊后,將該舊業(yè)務(wù)單元的刪除消息發(fā)送至分布式管理服務(wù)器,其中刪除消息中至少包括該舊業(yè)務(wù)單元的標(biāo)識(shí)信息和版本信息;分布式管理服務(wù)器在接收到刪除消息后,根據(jù)刪除消息中包含的舊業(yè)務(wù)單元的標(biāo)識(shí)信息,將該舊業(yè)務(wù)單元的注冊(cè)信息刪除。
本發(fā)明實(shí)施例提供的系統(tǒng)及方法,業(yè)務(wù)管理服務(wù)器在檢測(cè)到更新指令后,向目標(biāo)業(yè)務(wù)服務(wù)器轉(zhuǎn)發(fā)更新指令,更新指令至少包括待更新業(yè)務(wù)模塊的業(yè)務(wù)標(biāo)識(shí),目標(biāo)業(yè)務(wù)服務(wù)器用于提供與業(yè)務(wù)標(biāo)識(shí)對(duì)應(yīng)的業(yè)務(wù)處理;目標(biāo)業(yè)務(wù)服務(wù)器在接收到更新指令后,根據(jù)業(yè)務(wù)標(biāo)識(shí)從文件服務(wù)器獲取待更新業(yè)務(wù)模塊,并對(duì)待更新業(yè)務(wù)模塊進(jìn)行解析,得到新業(yè)務(wù)單元的標(biāo)識(shí)信息、調(diào)用信息和版本信息;目標(biāo)業(yè)務(wù)服務(wù)器根據(jù)新業(yè)務(wù)單元的標(biāo)識(shí)信息將調(diào)用信息注冊(cè)至目標(biāo)業(yè)務(wù)服務(wù)器中容器的業(yè)務(wù)響應(yīng)模塊,以替換與標(biāo)識(shí)信息相同的舊業(yè)務(wù)單元的調(diào)用信息,使得后續(xù)響應(yīng)業(yè)務(wù)請(qǐng)求時(shí)直接調(diào)用新業(yè)務(wù)單元。由于在更新業(yè)務(wù)單元時(shí),可在不停止服務(wù)的情況下完成更新,不會(huì)對(duì)相應(yīng)的業(yè)務(wù)請(qǐng)求造成影響,因此該種數(shù)據(jù)更新方式可在任意時(shí)間段進(jìn)行更新,靈活性高、更新時(shí)間短且步驟簡(jiǎn)便。
圖3是本發(fā)明實(shí)施例提供的一種服務(wù)器的結(jié)構(gòu)示意圖。參照?qǐng)D3,服務(wù)器300包括處理組件322,其進(jìn)一步包括一個(gè)或多個(gè)處理器,以及由存儲(chǔ)器332所代表的存儲(chǔ)器資源,用于存儲(chǔ)可由處理部件322的執(zhí)行的指令,例如應(yīng)用程序。存儲(chǔ)器332中存儲(chǔ)的應(yīng)用程序可以包括一個(gè)或一個(gè)以上的每一個(gè)對(duì)應(yīng)于一組指令的模塊。此外,處理組件322被配置為執(zhí)行指令,以執(zhí)行上述數(shù)據(jù)更新方法。
服務(wù)器300還可以包括一個(gè)電源組件326被配置為執(zhí)行服務(wù)器300的電源管理,一個(gè)有線或無(wú)線網(wǎng)絡(luò)接口350被配置為將服務(wù)器300連接到網(wǎng)絡(luò),和一個(gè)輸入輸出(I/O)接口358。服務(wù)器300可以操作基于存儲(chǔ)在存儲(chǔ)器332的操作系統(tǒng),例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,F(xiàn)reeBSDTM或類(lèi)似。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過(guò)硬件來(lái)完成,也可以通過(guò)程序來(lái)指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于 一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤(pán)或光盤(pán)等。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。