亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種微服務(wù)架構(gòu)可自動(dòng)伸縮的GIS服務(wù)裝置及其控制方法與流程

文檔序號(hào):12491601閱讀:359來(lái)源:國(guó)知局
一種微服務(wù)架構(gòu)可自動(dòng)伸縮的GIS服務(wù)裝置及其控制方法與流程

本發(fā)明涉及一種微服務(wù)架構(gòu)可自動(dòng)伸縮的GIS服務(wù)裝置。此外,本發(fā)明還涉及一種基于該GIS服務(wù)裝置進(jìn)行自動(dòng)伸縮的控制方法。



背景技術(shù):

GIS(Geographic Information System:地理信息系統(tǒng))應(yīng)用服務(wù)器作為WebGIS(網(wǎng)絡(luò)地理信息系統(tǒng))的核心組件,負(fù)責(zé)將各種GIS資源、例如GIS數(shù)據(jù)、地圖、三維場(chǎng)景等發(fā)布成相應(yīng)的GIS服務(wù),如地圖服務(wù)、數(shù)據(jù)服務(wù)、三維服務(wù)、空間分析服務(wù)、網(wǎng)絡(luò)分析服務(wù)、公交換乘服務(wù)、地理編碼服務(wù)等。同時(shí),GIS服務(wù)器還負(fù)責(zé)接收GIS服務(wù)請(qǐng)求,并根據(jù)請(qǐng)求參數(shù)來(lái)完成響應(yīng)。

由于一個(gè)完整GIS應(yīng)用系統(tǒng)往往需要發(fā)布多種GIS資源,并提供各種GIS功能。為此,一個(gè)全功能的GIS服務(wù)器通常要包含多個(gè)GIS服務(wù)。隨著GIS應(yīng)用走入大眾,GIS服務(wù)應(yīng)用系統(tǒng)服務(wù)的用戶數(shù)也越來(lái)越多,從而對(duì)應(yīng)的GIS服務(wù)負(fù)載也居高不下。

傳統(tǒng)的GIS應(yīng)用服務(wù)器是一個(gè)經(jīng)典的單體應(yīng)用程序,各種GIS服務(wù),包括不同數(shù)據(jù)來(lái)源,不同類型的服務(wù)都部署在一個(gè)進(jìn)程中。這種部署模式在項(xiàng)目實(shí)施時(shí)能帶來(lái)一些便利,但也帶來(lái)以下問(wèn)題。首先,GIS應(yīng)用服務(wù)器中可部署的服務(wù)數(shù)量受限。單進(jìn)程可使用的操作系統(tǒng)資源(例如文件句柄數(shù)、虛擬內(nèi)存等)是受限的,導(dǎo)致在單個(gè)進(jìn)程內(nèi)最多可打開(kāi)的GIS資源數(shù)量(比如地圖、符號(hào)庫(kù)等)也受到限制,進(jìn)而導(dǎo)致單個(gè)進(jìn)程內(nèi)可發(fā)布的服務(wù)數(shù)量也受到限制,一般不能超過(guò)100個(gè)服務(wù)。

GIS服務(wù)在響應(yīng)請(qǐng)求時(shí),往往需要做大量的運(yùn)算,在運(yùn)算的過(guò)程中會(huì)占用一些資源,比如CPU時(shí)間、Http線程等。對(duì)于單體式GIS服務(wù)器而言,所有GIS服務(wù)都部署在一個(gè)進(jìn)程中并且共享這些資源。當(dāng)某個(gè)GIS服務(wù)的負(fù)載較高時(shí),因?yàn)檎加幂^多共享資源,導(dǎo)致其他GIS服務(wù)分配不到?jīng)]有足夠的資源,進(jìn)而導(dǎo)致其他GIS服務(wù)性能下降甚至掛起。所以GIS服務(wù)之間互相影響,服務(wù)的可靠性不高。當(dāng)某個(gè)GIS服務(wù)發(fā)生嚴(yán)重錯(cuò)誤,導(dǎo)致進(jìn)程異常退出,會(huì)導(dǎo)致其他無(wú)關(guān)的服務(wù)也不可用。

此外,GIS服務(wù)在高并發(fā)場(chǎng)景下性能不好,并且隨著請(qǐng)求負(fù)載的增大,服務(wù)性能急劇下降。目前,廣泛采用GIS服務(wù)器群集技術(shù),GIS服務(wù)器群集技術(shù)是指通過(guò)復(fù)制多個(gè)GIS應(yīng)用服務(wù)器來(lái)擴(kuò)展GIS服務(wù)的能力,每個(gè)GIS應(yīng)用服務(wù)器獨(dú)立運(yùn)行在各自的進(jìn)程中,并通過(guò)獨(dú)立的負(fù)載均衡模塊對(duì)各GIS應(yīng)用服務(wù)器的服務(wù)進(jìn)行調(diào)度和負(fù)載均衡。GIS服務(wù)器群集技術(shù)從實(shí)現(xiàn)的角度比較容易,而且確實(shí)能有效提升整個(gè)GIS服務(wù)器的服務(wù)能力,但其存在GIS服務(wù)擴(kuò)展不夠方便的不利。因?yàn)橹荒芡ㄟ^(guò)復(fù)制整個(gè)GIS服務(wù)器來(lái)擴(kuò)展GIS服務(wù),所以擴(kuò)展的過(guò)程中需要實(shí)施人員做大量的部署、配置和調(diào)試工作,不僅很不方便而且容易出錯(cuò)。其次,無(wú)法實(shí)現(xiàn)針對(duì)不同服務(wù)實(shí)施不同的擴(kuò)展級(jí)別。在實(shí)際的應(yīng)用場(chǎng)景中,不同GIS服務(wù)的負(fù)載是有明顯差異的,因此,需要針對(duì)不同GIS服務(wù),實(shí)施不同的擴(kuò)展級(jí)別。GIS服務(wù)器集群技術(shù)是通過(guò)擴(kuò)展整個(gè)GIS服務(wù)器,擴(kuò)展的粒度太粗,無(wú)法實(shí)現(xiàn)精確控制特定服務(wù)的擴(kuò)展級(jí)別。再次,GIS服務(wù)做不到自動(dòng)伸縮。在一個(gè)時(shí)間段之內(nèi)(比如一天內(nèi)),GIS服務(wù)的負(fù)載存在一定的波動(dòng)。這種波動(dòng)有時(shí)候是有規(guī)律可循的(比如24點(diǎn)以后,負(fù)載逐漸降低),有時(shí)就毫無(wú)規(guī)律可言。由于GIS服務(wù)負(fù)載存在的波動(dòng)特性,在理想情況下GIS服務(wù)的擴(kuò)展級(jí)別應(yīng)該和服務(wù)的負(fù)載正相關(guān),即當(dāng)負(fù)載增大時(shí)需要自動(dòng)增加GIS服務(wù)的實(shí)例個(gè)數(shù)來(lái)提升GIS服務(wù)的處理能力。當(dāng)負(fù)載降低時(shí),需要自動(dòng)減少GIS服務(wù)的實(shí)例個(gè)數(shù)以釋放資源,從而減少資源占用。然而,GIS服務(wù)器集群技術(shù)無(wú)法滿足該需求。

針對(duì)上述問(wèn)題,本發(fā)明創(chuàng)造了一種微服務(wù)架構(gòu)可自動(dòng)伸縮的GIS服務(wù)裝置。突破了單個(gè)GIS服務(wù)器服務(wù)個(gè)數(shù)的限制,支持針對(duì)不同GIS服務(wù)設(shè)置不同擴(kuò)展級(jí)別,并自動(dòng)擴(kuò)展,并且可以根據(jù)GIS服務(wù)的負(fù)載情況,自動(dòng)調(diào)整GIS服務(wù)的擴(kuò)展級(jí)別,實(shí)現(xiàn)GIS服務(wù)的自動(dòng)伸縮。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明提供一種微服務(wù)架構(gòu)可自動(dòng)伸縮的GIS服務(wù)裝置,用于解決現(xiàn)有技術(shù)中存在的不利。該GIS服務(wù)裝置包括Master進(jìn)程模塊、Daemon進(jìn)程模塊和一個(gè)或多個(gè)Worker進(jìn)程模塊。

所述Master進(jìn)程模塊構(gòu)造用于啟動(dòng)Master進(jìn)程作為整個(gè)GIS服務(wù)裝置中GIS服務(wù)統(tǒng)一的訪問(wèn)入口,并且用于GIS服務(wù)管理以及Worker進(jìn)程管理。所述Daemon進(jìn)程模塊構(gòu)造用于運(yùn)行Daemon進(jìn)程,對(duì)所述Master進(jìn)程進(jìn)行后臺(tái)監(jiān)控,接收Master進(jìn)程的狀態(tài)報(bào)告,根據(jù)所述報(bào)告檢查所述Master進(jìn)程的運(yùn)行情況。當(dāng)所述Master進(jìn)程異常退出時(shí),Daemon進(jìn)程自動(dòng)啟動(dòng)一個(gè)新的Master進(jìn)程。所述一個(gè)或多個(gè)Worker進(jìn)程模塊構(gòu)造用于運(yùn)行Worker進(jìn)程,由Master進(jìn)程啟動(dòng)和管理,接收Master進(jìn)程的指令進(jìn)行服務(wù)發(fā)布、刪除和/或更新操作,定期向所述Master進(jìn)程報(bào)告所述一個(gè)或多個(gè)Work進(jìn)程的狀態(tài)。

根據(jù)本發(fā)明的一種優(yōu)選實(shí)施方式,Master進(jìn)程模塊包括以下子模塊:

- Worker進(jìn)程管理子模塊,其構(gòu)造用于一個(gè)或多個(gè)Worker進(jìn)程的管理,實(shí)施添加、刪除和/或修改所述一個(gè)或多個(gè)Worker進(jìn)程的操作。

- 狀態(tài)保持子模塊,其構(gòu)造用于收集Master進(jìn)程的健康狀況和/或一個(gè)或多個(gè)Worker進(jìn)程的狀態(tài)信息,上報(bào)到Daemon進(jìn)程,監(jiān)控Daemon進(jìn)程的健康狀況。當(dāng)檢測(cè)出Daemon進(jìn)程監(jiān)控狀況異常時(shí),重啟Daemon進(jìn)程,接收一個(gè)或多個(gè)Worker進(jìn)程上報(bào)的狀態(tài)信息,并根據(jù)這些狀態(tài)信息判斷一個(gè)或多個(gè)Worker進(jìn)程的監(jiān)控狀況。當(dāng)發(fā)現(xiàn)一個(gè)或多個(gè)Worker進(jìn)程運(yùn)行異常,通知Worker進(jìn)程管理子模塊和服務(wù)管理部署子模塊,重啟Worker進(jìn)程并且重新部署GIS服務(wù)。

- 服務(wù)管理部署子模塊,其構(gòu)造用于所述GIS服務(wù)的管理,對(duì)整個(gè)裝置的GIS服務(wù)進(jìn)行管理,包括:發(fā)布、刪除和/或修改GIS服務(wù),將GIS服務(wù)部署到各Worker進(jìn)程。該服務(wù)管理部署子模塊還構(gòu)造用于GIS服務(wù)的自動(dòng)伸縮,通過(guò)監(jiān)控各GIS服務(wù)的負(fù)載情況和請(qǐng)求響應(yīng)情況,對(duì)GIS服務(wù)進(jìn)行自動(dòng)伸縮。

- 服務(wù)調(diào)度子模塊,其構(gòu)造用于整合各Worker進(jìn)程所有服務(wù)以及服務(wù)請(qǐng)求的轉(zhuǎn)發(fā),將各Worker進(jìn)程的GIS服務(wù)進(jìn)行整合,生成服務(wù)目錄,提供統(tǒng)一的服務(wù)訪問(wèn)入口,將接到的服務(wù)請(qǐng)求調(diào)度到可用的Worker進(jìn)程進(jìn)行處理。

- 支撐子模塊,其構(gòu)造用于實(shí)施安全控制、許可控制和/或運(yùn)維監(jiān)控的操作;

- 配置管理子模塊,其構(gòu)造用于讀取、保存和/或修改所述Master進(jìn)程配置信息,其還構(gòu)造用于讀取、保存和/或修改GIS服務(wù)的配置信息。

根據(jù)本發(fā)明的一種優(yōu)選實(shí)施方式,Daemon進(jìn)程模塊包括以下子模塊:

- Master進(jìn)程管理子模塊,其構(gòu)造用于啟動(dòng)、停止和/或重啟Master進(jìn)程。

- 退出監(jiān)聽(tīng)子模塊,其構(gòu)造用于監(jiān)聽(tīng)所述GIS服務(wù)裝置的退出事件。當(dāng)監(jiān)聽(tīng)到退出事件時(shí),通知所述Master進(jìn)程管理子模塊實(shí)施停止所述Master進(jìn)程的操作,并停止當(dāng)前Daemon進(jìn)程的運(yùn)行,從而使當(dāng)前進(jìn)程正常退出。

- 健康檢查子模塊,其構(gòu)造用于接收所述Master進(jìn)程的狀態(tài)報(bào)告,分析所述Master進(jìn)程的健康狀況,并且根據(jù)所述Master進(jìn)程的健康狀況進(jìn)行以下處理:如果監(jiān)聽(tīng)到所述Master進(jìn)程的資源占用超過(guò)設(shè)定的閾值,則通知實(shí)施Master管理進(jìn)程模塊實(shí)施重啟所述Master進(jìn)程的操作;如果監(jiān)聽(tīng)到所述Master進(jìn)程已經(jīng)異常退出,則通知所述Master管理進(jìn)程模塊實(shí)施啟動(dòng)所述Master進(jìn)程的操作。

根據(jù)本發(fā)明的一種優(yōu)選實(shí)施方式,一個(gè)或多個(gè)Worker進(jìn)程模塊包括以下子模塊:

- 服務(wù)管理子模塊,其構(gòu)造用于GIS服務(wù)的管理,對(duì)本W(wǎng)orker進(jìn)程的GIS服務(wù)進(jìn)行發(fā)布、刪除和/或修改GIS服務(wù)的管理。

- GIS服務(wù)子模塊,其構(gòu)造用于提供GIS服務(wù)功能,其方式是,接收GIS請(qǐng)求,并選擇特定的GIS服務(wù)來(lái)響應(yīng)該請(qǐng)求,并返回響應(yīng)結(jié)果。

- 狀態(tài)上報(bào)子模塊,其構(gòu)造用于定期將本W(wǎng)orker進(jìn)程的狀態(tài)以及在本W(wǎng)orker進(jìn)程上的服務(wù)狀態(tài)上報(bào)到Master進(jìn)程。

根據(jù)本發(fā)明的另一方面,提供一種基于根據(jù)該GIS服務(wù)裝置進(jìn)行自動(dòng)伸縮的控制方法,所述控制方法包括以下工作流程:

- 啟動(dòng)所述GIS服務(wù)裝置的工作流程;

- 停止所述GIS服務(wù)裝置的工作流程;

- 通過(guò)Master進(jìn)程發(fā)布GIS服務(wù)的工作流程;

- Master進(jìn)程處理GIS服務(wù)請(qǐng)求的工作流程;

- Master進(jìn)程對(duì)GIS服務(wù)進(jìn)行自動(dòng)伸縮的工作流程;

- Master進(jìn)程判斷GIS服務(wù)是否需要自動(dòng)伸縮的工作流程。

根據(jù)本發(fā)明的一種優(yōu)選實(shí)施方式,啟動(dòng)該GIS服務(wù)裝置的工作流程包括以下步驟:

- 啟動(dòng)Daemon進(jìn)程,例如由系統(tǒng)管理員通過(guò)命令行的方式或者自動(dòng)化的方式。

- Daemon進(jìn)程初始化,初始化內(nèi)部的各子模塊,直到各子模塊初始化完畢。

- Daemon進(jìn)程內(nèi)的Master進(jìn)程管理子模塊啟動(dòng)Master進(jìn)程,并且判斷Master進(jìn)程是否啟動(dòng)成功。如果Master進(jìn)程啟動(dòng)成功,則Master進(jìn)程初始化。如果Master進(jìn)程啟動(dòng)失敗,則在控制臺(tái)和日志文件中給出提示信息,從而退出Daemon進(jìn)程。

- 初始化完成之后,判斷GIS服務(wù)裝置是否啟動(dòng)成功。如果GIS服務(wù)裝置啟動(dòng)成功并初始化完畢,則在控制臺(tái)和日志文件中給出提示信息。如果GIS服務(wù)裝置啟動(dòng)失敗,則同樣在控制臺(tái)和日志文件中給出提示信息。

根據(jù)本發(fā)明的一種優(yōu)選實(shí)施方式,停止GIS服務(wù)裝置的工作流程包括:

- 向Daemon進(jìn)程發(fā)送退出命令,例如由系統(tǒng)管理員通過(guò)命令行的方式或者自動(dòng)化的方式。

- Daemon進(jìn)程的退出監(jiān)聽(tīng)子模塊接收到退出命令后,退出監(jiān)聽(tīng)子模塊將接收到的退出命令轉(zhuǎn)發(fā)給Master進(jìn)程管理子模塊。

- Daemon進(jìn)程的Master進(jìn)程管理子模塊通過(guò)管道向Master進(jìn)程發(fā)出退出命令。

- Master進(jìn)程接收到退出命令后,銷毀Master進(jìn)程以及被Master進(jìn)程管理的相關(guān)Worker進(jìn)程。

- Master進(jìn)程的各子模塊都停止并銷毀后,Master進(jìn)程退出。

- Daemon進(jìn)程監(jiān)測(cè)到Master進(jìn)程徹底退出的事件后,開(kāi)始依次停止并銷毀Daemon進(jìn)程的各子模塊,直到所有子模塊被銷毀完畢,Daemon進(jìn)程退出。

- GIS服務(wù)裝置的所有相關(guān)進(jìn)程都正常退出,GIS服務(wù)裝置正常停止。

根據(jù)本發(fā)明的一種優(yōu)選實(shí)施方式,通過(guò)Master進(jìn)程發(fā)布GIS服務(wù)的工作流程包括以下步驟:

- 向Master進(jìn)程發(fā)送發(fā)布GIS服務(wù)的請(qǐng)求,例如由系統(tǒng)管理員通過(guò)REST API的方式或者自動(dòng)化的方式。

- Master進(jìn)程的服務(wù)管理部署子模塊接收到該請(qǐng)求,并響應(yīng)該請(qǐng)求。

- Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)服務(wù)配置信息,計(jì)算得到該服務(wù)的待部署實(shí)例個(gè)數(shù)。如果為N,則表示需要在N個(gè)Worker中部署該服務(wù)。

- Master進(jìn)程的服務(wù)管理部署子模塊向Worker進(jìn)程管理子模塊查詢當(dāng)前已啟動(dòng)的Worker進(jìn)程個(gè)數(shù),例如為M。如果當(dāng)前已啟動(dòng)的Worker進(jìn)程個(gè)數(shù)m小于該服務(wù)的待部署實(shí)例個(gè)數(shù)N,則通知Worker進(jìn)程管理子模塊新啟動(dòng)(N-M)個(gè)Worker進(jìn)程。如果M大于等于N,則Master進(jìn)程的服務(wù)管理部署子模塊向Worker進(jìn)程管理子模塊查詢部署服務(wù)最少的N個(gè)Worker進(jìn)程,得到N個(gè)Worker進(jìn)程的代理對(duì)象。

- 遍歷這N個(gè)Worker進(jìn)程的代理對(duì)象,依次將當(dāng)前的GIS服務(wù)通過(guò)Worker進(jìn)程代理對(duì)象部署到對(duì)應(yīng)的Worker進(jìn)程。

根據(jù)本發(fā)明的一種優(yōu)選實(shí)施方式,Master進(jìn)程處理GIS服務(wù)請(qǐng)求的工作流程包括以下步驟:

- GIS服務(wù)裝置的普通用戶向Master進(jìn)程發(fā)送GIS請(qǐng)求。

- Master進(jìn)程的服務(wù)調(diào)度子模塊接收到該請(qǐng)求,解析該請(qǐng)求,計(jì)算得到當(dāng)前GIS請(qǐng)求的對(duì)應(yīng)的服務(wù)名稱。

- Master進(jìn)程的服務(wù)調(diào)度子模塊根據(jù)服務(wù)名向服務(wù)管理部署子模塊查詢哪些Worker進(jìn)程部署了該服務(wù),并返回Worker進(jìn)程的名稱列表。

- Master進(jìn)程的服務(wù)調(diào)度子模塊根據(jù)Worker進(jìn)程的名稱列表向Worker進(jìn)程管理子模塊查詢并返回指定名稱的Worker進(jìn)程代理對(duì)象的列表。

- Master進(jìn)程的服務(wù)調(diào)度子模塊根據(jù)負(fù)載均衡算法從Worker進(jìn)程代理對(duì)象的列表獲取一個(gè)Worker進(jìn)程代理對(duì)象。

- Master進(jìn)程的服務(wù)調(diào)度子模塊通過(guò)Worker進(jìn)程代理對(duì)象處理該請(qǐng)求。

- Master進(jìn)程的服務(wù)調(diào)度子模塊判斷Worker進(jìn)程代理對(duì)象返回的響應(yīng)中的狀態(tài)標(biāo)志。如果標(biāo)志為服務(wù)暫不可用,則重新嘗試從Worker進(jìn)程代理對(duì)象的列表獲取一個(gè)Worker進(jìn)程代理對(duì)象,最多嘗試預(yù)先確定的次數(shù)、例如3次。否則,表示請(qǐng)求已經(jīng)得到響應(yīng),將Worker進(jìn)程代理對(duì)象返回的響應(yīng)信息回寫(xiě)到服務(wù)調(diào)度子模塊接收到的請(qǐng)求響應(yīng)中,請(qǐng)求處理完成。

根據(jù)本發(fā)明的一種優(yōu)選實(shí)施方式,Master進(jìn)程對(duì)GIS服務(wù)進(jìn)行自動(dòng)伸縮的工作流程包括以下步驟:

- 在Master進(jìn)程的支撐子模塊中包含有監(jiān)控與統(tǒng)計(jì)單元,所述監(jiān)控與統(tǒng)計(jì)單元設(shè)置用于監(jiān)控每個(gè)GIS服務(wù)負(fù)載、請(qǐng)求處理的耗時(shí)以及硬件資源的使用情況。

- Master進(jìn)程的服務(wù)管理部署子模塊定期向支撐子模塊的監(jiān)控與統(tǒng)計(jì)單元查詢每個(gè)GIS服務(wù)的負(fù)載以及硬件資源使用情況,來(lái)決定是否需要對(duì)其進(jìn)行自動(dòng)伸縮,其方式是,得到所有GIS服務(wù)是否需要擴(kuò)展或收縮實(shí)例的標(biāo)志以及每個(gè)GIS服務(wù)待擴(kuò)展或收縮的實(shí)例個(gè)數(shù),依次判斷這些標(biāo)志。如果某GIS服務(wù)需要擴(kuò)展實(shí)例個(gè)數(shù),得到待擴(kuò)展的服務(wù)實(shí)例個(gè)數(shù)E,則開(kāi)始擴(kuò)展服務(wù)實(shí)例,如果某GIS服務(wù)實(shí)例個(gè)數(shù)需要收縮,得到待收縮的服務(wù)實(shí)例個(gè)數(shù)S,則開(kāi)始收縮服務(wù)實(shí)例。

- 在將當(dāng)前GIS服務(wù)新部署到E個(gè)Worker進(jìn)程中之后,Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)當(dāng)前GIS服務(wù)名查詢得到部署過(guò)該GIS服務(wù)的Worker進(jìn)程的名稱列表(L1),從所述名稱列表中選取S個(gè)Worker進(jìn)程名稱,得到待卸載該GIS服務(wù)的Worker進(jìn)程的名稱列表(L2),據(jù)此從Worker進(jìn)程管理子模塊查詢得到S個(gè)Worker進(jìn)程的代理對(duì)象的列表(L3)。

- Master進(jìn)程的服務(wù)管理部署子模塊遍歷所述S個(gè)Worker進(jìn)程的代理對(duì)象的列表,每次遍歷過(guò)程中得到當(dāng)前的Worker進(jìn)程的代理對(duì)象,通過(guò)代理對(duì)象來(lái)卸載當(dāng)前GIS服務(wù)。

優(yōu)選地,在所述開(kāi)始擴(kuò)展服務(wù)實(shí)例中,Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)服務(wù)名查詢?cè)揋IS服務(wù)當(dāng)前已部署的實(shí)例個(gè)數(shù)N,服務(wù)管理部署子模塊從Worker進(jìn)程管理子模塊查詢當(dāng)前已啟動(dòng)的Worker進(jìn)程個(gè)數(shù)M,如果N+E≤M,表示當(dāng)前的Worker個(gè)數(shù)夠用,則將當(dāng)前GIS服務(wù)新部署到E個(gè)Worker進(jìn)程中,如果N+E>M,表示當(dāng)前的Worker個(gè)數(shù)不夠用,則重新啟動(dòng)(N+E-M)個(gè)Worker進(jìn)程。

優(yōu)選地,在將當(dāng)前GIS服務(wù)新部署到E個(gè)Worker進(jìn)程中的所述步驟中,Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)當(dāng)前GIS服務(wù)名查詢得到部署過(guò)該GIS服務(wù)的Worker進(jìn)程名稱列表,再向Worker進(jìn)程管理子模塊查詢所有Worker進(jìn)程名稱列表,根據(jù)這兩個(gè)列表,能夠得到?jīng)]有部署過(guò)當(dāng)前GIS服務(wù)的E個(gè)Worker名稱的列表,根據(jù)這個(gè)列表向Worker進(jìn)程管理子模塊查詢得到這個(gè)E個(gè)Worker進(jìn)程代理對(duì)象,然后依次調(diào)用這E個(gè)Worker進(jìn)程代理對(duì)象將當(dāng)前GIS服務(wù)部署對(duì)應(yīng)的Worker進(jìn)程中。

根據(jù)本發(fā)明的一種優(yōu)選實(shí)施方式,Master進(jìn)程判斷GIS服務(wù)是否需要自動(dòng)伸縮的工作流程包括以下步驟:

- Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)服務(wù)名從支撐子模塊的監(jiān)控與統(tǒng)計(jì)單元查詢,得到當(dāng)前的硬件資源使用情況以及該GIS服務(wù)在最近的一分鐘平均每秒接收到的并發(fā)請(qǐng)求數(shù)R。

- Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)服務(wù)名查詢,得到該GIS服務(wù)當(dāng)前已部署的實(shí)例個(gè)數(shù)N。

- Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)服務(wù)名從配置管理子模塊查詢,得到該GIS服務(wù)每服務(wù)實(shí)例最大處理的并發(fā)請(qǐng)求數(shù)RP。

- 借助公式E = ( N - R/RP )來(lái)計(jì)算待伸縮的服務(wù)實(shí)例個(gè)數(shù)E。根據(jù)計(jì)算結(jié)果,存在以下不同情況:

a)如果 E > 1,則表示當(dāng)前的服務(wù)實(shí)例個(gè)數(shù)夠用,且有較明顯的冗余,需要收縮服務(wù)實(shí)例個(gè)數(shù),返回服務(wù)需要收縮的標(biāo)志,且收縮的服務(wù)實(shí)例個(gè)數(shù)為E。

b) 如果E < -1,則表示當(dāng)前的服務(wù)實(shí)例個(gè)數(shù)不夠用,且有較大的缺口,需要擴(kuò)展服務(wù)實(shí)例個(gè)數(shù),返回服務(wù)需要擴(kuò)展的標(biāo)志,且擴(kuò)展的服務(wù)實(shí)例個(gè)數(shù)為-E。

c) 如果E≥-1且E≤1,則表示當(dāng)前的服務(wù)實(shí)例個(gè)數(shù)正好夠用,無(wú)需伸縮服務(wù)實(shí)例個(gè)數(shù)。

根據(jù)本發(fā)明的一種有利實(shí)施方式,所述GIS服務(wù)裝置可以硬件地或軟件地實(shí)現(xiàn)。它們可以具有可能按照硬件方式和/或按照軟件方式構(gòu)造的接口。當(dāng)按照硬件方式構(gòu)造時(shí),該接口例如可以是所謂的ASIC系統(tǒng)的一部分,其包含上述裝置的不同功能。然而,該接口也可能是單獨(dú)的集成電路或者至少部分由分立的組件組成。當(dāng)按照軟件方式構(gòu)造時(shí),該接口例如可以是在數(shù)據(jù)庫(kù)或微控制器中與其他軟件模塊并存的軟件模塊。

從屬權(quán)利要求是本發(fā)明的有利實(shí)施方式。盡管本發(fā)明已借助優(yōu)選實(shí)施例進(jìn)行了描述,但其不局限于此,而是可以在許多方面進(jìn)行修改。

附圖說(shuō)明

附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:

圖1:可自動(dòng)伸縮的GIS服務(wù)裝置的微服務(wù)架構(gòu)圖;

圖2:Master進(jìn)程模塊結(jié)構(gòu)圖;

圖3:Daemon進(jìn)程模塊結(jié)構(gòu)圖;

圖4:Worker進(jìn)程模塊結(jié)構(gòu)圖;

圖5:?jiǎn)?dòng)GIS服務(wù)裝置的工作流程;

圖6:Master進(jìn)程初始化的方法步驟;

圖7:?jiǎn)?dòng)各Worker進(jìn)程的方法步驟;

圖8:部署所有GIS服務(wù)的方法步驟;

圖9:停止GIS裝置的工作流程;

圖10:銷毀Master進(jìn)程和被Master進(jìn)程管理的相關(guān)Worker進(jìn)程的方法步驟;

圖11:通過(guò)Master進(jìn)程發(fā)布GIS服務(wù)的工作流程;

圖12:響應(yīng)發(fā)布GIS服務(wù)的請(qǐng)求的方法步驟;

圖13:將GIS服務(wù)部署到一個(gè)Worker進(jìn)程的方法步驟;

圖14:Master進(jìn)程處理GIS請(qǐng)求的工作流程;

圖15:Master進(jìn)程的服務(wù)調(diào)度子模塊通過(guò)Worker進(jìn)程代理對(duì)象處理GIS請(qǐng)求的具體方法步驟;

圖16:Master進(jìn)程對(duì)GIS服務(wù)進(jìn)行自動(dòng)伸縮的工作流程;

圖17:Worker代理對(duì)象卸載GIS服務(wù)的方法步驟;

圖18:Master進(jìn)程判斷GIS服務(wù)是否需要自動(dòng)伸縮的工作流程。

具體實(shí)施方式

為使本申請(qǐng)的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)的說(shuō)明。

在本申請(qǐng)的描述中,需要理解的是,“多個(gè)”的含義是兩個(gè)或兩個(gè)以上,除非另有明確具體的限定。術(shù)語(yǔ)“包括”、“包含”及類似術(shù)語(yǔ)應(yīng)該被理解為是開(kāi)放性的術(shù)語(yǔ),即“包括/包含但不限于”。術(shù)語(yǔ)“基于”是“至少部分地基于”。其他術(shù)語(yǔ)的相關(guān)定義將在下文描述中給出。

圖1示出一種可自動(dòng)伸縮的GIS服務(wù)裝置的微服務(wù)架構(gòu)圖,該GIS服務(wù)裝置由Master進(jìn)程模塊(又稱作GIS服務(wù)器主進(jìn)程模塊)、Daemon進(jìn)程模塊(又稱作GIS服務(wù)器備份進(jìn)程模塊)和一個(gè)或多個(gè)Worker進(jìn)程模塊(又稱作GIS服務(wù)工作進(jìn)程模塊)組成。

Master進(jìn)程模塊構(gòu)造為整個(gè)GIS服務(wù)裝置所有GIS服務(wù)的統(tǒng)一的訪問(wèn)入口。所述Master進(jìn)程模塊設(shè)置用于提供GIS服務(wù)管理的能力,包括發(fā)布、刪除服務(wù)以及修改GIS服務(wù)實(shí)例個(gè)數(shù)等。所述Master進(jìn)程模塊還設(shè)置用于提供Worker進(jìn)程管理能力,包括新增和減少工作進(jìn)程。

Daemon進(jìn)程模塊構(gòu)造為Master進(jìn)程的后臺(tái)監(jiān)控進(jìn)程模塊。所述Daemon進(jìn)程模塊構(gòu)造用于接收Master的狀態(tài)報(bào)告,并據(jù)此檢查Master進(jìn)程的健康狀況。當(dāng)Master進(jìn)程異常退出時(shí),Daemon進(jìn)程自動(dòng)啟動(dòng)一個(gè)新的Master進(jìn)程。

一個(gè)或多個(gè)Worker進(jìn)程模塊構(gòu)造為GIS服務(wù)工作進(jìn)程模塊。所述Worker進(jìn)程模塊由Master進(jìn)程啟動(dòng)和管理,并且構(gòu)造用于接收Master的指令進(jìn)行服務(wù)發(fā)布、刪除和更新操作。所述Worker進(jìn)程模塊還設(shè)置用于定期向Master報(bào)告自身的狀態(tài)信息,包括自身的監(jiān)控情況、部署的服務(wù)可用情況等。

圖2示出Master進(jìn)程模塊結(jié)構(gòu)圖。Master進(jìn)程模塊包括:

- Worker進(jìn)程管理子模塊,其設(shè)置為負(fù)責(zé)Worker進(jìn)程的管理。通過(guò)所述Worker進(jìn)程管理子模塊可以添加、刪除、修改Worker進(jìn)程;

- 狀態(tài)保持子模塊,其設(shè)置為負(fù)責(zé)收集Master進(jìn)程的健康狀況,例如將資源占用情況、GIS服務(wù)和Worker進(jìn)程的狀態(tài)信息上報(bào)到Daemon進(jìn)程。狀態(tài)保持子模塊還設(shè)置用于監(jiān)控Daemon進(jìn)程的健康狀況。當(dāng)檢測(cè)出Daemon進(jìn)程監(jiān)控狀況不良時(shí),及時(shí)重啟Daemon進(jìn)程。此外,狀態(tài)保持子模塊設(shè)置用于接收Worker進(jìn)程上報(bào)的狀態(tài)信息,并根據(jù)這些狀態(tài)信息判斷Worker進(jìn)程的監(jiān)控狀況。當(dāng)發(fā)現(xiàn)Worker進(jìn)程運(yùn)行不正常時(shí),及時(shí)通知Worker進(jìn)程管理子模塊和服務(wù)管理部署子模塊重啟Worker進(jìn)程并且重新部署GIS服務(wù);

- 服務(wù)管理部署子模塊,其設(shè)置為負(fù)責(zé)GIS服務(wù)的管理。通過(guò)服務(wù)管理部署子模塊可以對(duì)整個(gè)裝置的GIS服務(wù)進(jìn)行管理,包括發(fā)布、刪除或修改GIS服務(wù)以及將GIS服務(wù)部署到各Worker進(jìn)程。服務(wù)管理部署子模塊還設(shè)置為負(fù)責(zé)GIS服務(wù)的自動(dòng)伸縮。通過(guò)監(jiān)控各GIS服務(wù)的負(fù)載情況和請(qǐng)求響應(yīng)情況,對(duì)GIS服務(wù)進(jìn)行自動(dòng)伸縮。

- 服務(wù)調(diào)度子模塊,其設(shè)置為負(fù)責(zé)整合各Worker進(jìn)程所有服務(wù)以及服務(wù)請(qǐng)求的轉(zhuǎn)發(fā)。通過(guò)服務(wù)調(diào)度子模塊將各Worker進(jìn)程的GIS服務(wù)進(jìn)行整合,并提供服務(wù)目錄,從而提供統(tǒng)一的服務(wù)訪問(wèn)入口。服務(wù)調(diào)度子模塊還設(shè)置用于將接到的服務(wù)請(qǐng)求調(diào)度到到相應(yīng)的Worker進(jìn)程進(jìn)行處理。

- 支撐子模塊,其設(shè)置用于支撐整個(gè)GIS服務(wù)裝置的正常運(yùn)行,比如安全控制、許可控制、運(yùn)維監(jiān)控等等。

- 配置管理子模塊,其設(shè)置用于讀取、保存和修改Master進(jìn)程、GIS服務(wù)等的配置信息。

圖3示出Daemon進(jìn)程模塊結(jié)構(gòu)圖,Daemon進(jìn)程模塊包括:

- Master進(jìn)程管理子模塊,其設(shè)置為負(fù)責(zé)啟動(dòng)、停止和重啟Master進(jìn)程。

- 退出監(jiān)聽(tīng)子模塊,其設(shè)置為負(fù)責(zé)監(jiān)聽(tīng)GIS服務(wù)裝置的退出事件(例如從socket傳遞的信號(hào)量)。退出監(jiān)聽(tīng)子模塊還設(shè)置用于,當(dāng)監(jiān)聽(tīng)到退出事件時(shí),通知Master進(jìn)程管理子模塊實(shí)施停止Master進(jìn)程操作,并且停止當(dāng)前Daemon進(jìn)程的運(yùn)行,從而使當(dāng)前進(jìn)程正常退出。

- 健康檢查子模塊,其設(shè)置用于接收Master進(jìn)程的狀態(tài)報(bào)告,并且分析Master的健康狀況。健康檢查子模塊還設(shè)置用于根據(jù)Master的健康狀況進(jìn)行針對(duì)性處理。例如,如果發(fā)現(xiàn)Master進(jìn)程的資源占用超過(guò)特定的閾值,則通知Master管理進(jìn)程實(shí)施重啟Master進(jìn)程的操作。如果發(fā)現(xiàn)Master進(jìn)程已經(jīng)異常退出,則通知Master管理進(jìn)程實(shí)施啟動(dòng)Master進(jìn)程的操作等等。

圖4示出Worker進(jìn)程模塊結(jié)構(gòu)圖,Worker進(jìn)程模塊包括:

- 服務(wù)管理子模塊,其設(shè)置為負(fù)責(zé)GIS服務(wù)的管理。通過(guò)服務(wù)管理子模塊可以對(duì)本W(wǎng)orker進(jìn)程的GIS服務(wù)進(jìn)行管理,包括發(fā)布、刪除或修改GIS服務(wù)。

- GIS服務(wù)子模塊,其設(shè)置為負(fù)責(zé)提供GIS服務(wù)能力。通過(guò)接收GIS請(qǐng)求,并選擇特定的GIS服務(wù)來(lái)響應(yīng)該請(qǐng)求,并返回響應(yīng)結(jié)果。

- 狀態(tài)上報(bào)子模塊,其設(shè)置為負(fù)責(zé)定期將本W(wǎng)orker的狀態(tài)以及Worker上的服務(wù)狀態(tài)上報(bào)到Master進(jìn)程。

以下借助附圖5-18來(lái)描述上述模塊的工作流程。圖5示出啟動(dòng)GIS服務(wù)裝置的工作流程(流程一)。

在步驟1-1中,系統(tǒng)管理員通過(guò)命令行,啟動(dòng)Daemon進(jìn)程。

在步驟1-2中,Daemon進(jìn)程初始化,初始化內(nèi)部的各子模塊,直到各子模塊初始化完畢。

在步驟1-3中,Daemon進(jìn)程內(nèi)的Master進(jìn)程管理子模塊啟動(dòng)Master進(jìn)程,并且判斷Master進(jìn)程是否啟動(dòng)成功。如果Master進(jìn)程啟動(dòng)成功,則跳轉(zhuǎn)到步驟1-4。如果Master進(jìn)程啟動(dòng)失敗,則跳轉(zhuǎn)到步驟1-7,從而退出Daemon進(jìn)程。

在步驟1-4中,Master進(jìn)程初始化。初始化完成之后進(jìn)入步驟5。

在步驟1-5中,判斷GIS服務(wù)裝置是否啟動(dòng)成功。如果GIS服務(wù)裝置啟動(dòng)成功并初始化完畢,則在步驟1-6中在控制臺(tái)和日志文件中給出提示信息。如果GIS服務(wù)裝置啟動(dòng)失敗,則在步驟1-7中在控制臺(tái)和日志文件中給出提示信息。

具體地,參照?qǐng)D6,上述步驟1-4中的Master進(jìn)程初始化通過(guò)以下步驟實(shí)現(xiàn):

在步驟1-4-a中,初始化Master進(jìn)程的配置管理子模塊,在初始化過(guò)程中將讀取Master進(jìn)程的配置信息。

在步驟1-4-b中,Master進(jìn)程的服務(wù)支撐子模塊得到配置信息,初始化服務(wù)支撐子模塊,在初始化過(guò)程中將安全控制、日志、運(yùn)維和監(jiān)控等支撐功能初始化完畢。

在步驟1-4-c中,Master進(jìn)程的Worker進(jìn)程管理子模塊得到配置信息。Worker進(jìn)程管理子模塊根據(jù)配置信息中的Worker進(jìn)程全局配置,服務(wù)配置以及GIS服務(wù)裝置的硬件信息,得出各Worker進(jìn)程的詳細(xì)配置信息。初始化Worker進(jìn)程管理子模塊,Master進(jìn)程在初始化過(guò)程中啟動(dòng)各Worker進(jìn)程。當(dāng)各Worker進(jìn)程初始化完成后,進(jìn)入步驟1-4-d。

在步驟1-4-d中,Master進(jìn)程的服務(wù)管理部署子模塊得到配置信息,服務(wù)管理部署子模塊開(kāi)始初始化。在初始化過(guò)程中,部署相關(guān)的GIS服務(wù),所有GIS服務(wù)部署完成以后,進(jìn)入步驟1-4-e。

在步驟1-4-e中,Master進(jìn)程的服務(wù)調(diào)度子模塊得到配置信息,服務(wù)調(diào)度子模塊開(kāi)始初始化,直到初始化完畢。

在步驟1-4-f中,Master進(jìn)程的狀態(tài)保持子模塊得到配置信息,狀態(tài)保持子模塊開(kāi)始初始化,直到初始化完畢。狀態(tài)保持子模塊初始化完畢后,啟動(dòng)異步任務(wù)。異步任務(wù)實(shí)施以下操作:- 開(kāi)始收集當(dāng)前Master進(jìn)程的健康狀況,并將收集的信息上報(bào)給Daemon。- 開(kāi)始監(jiān)控Daemon進(jìn)程的監(jiān)控狀況,并根據(jù)監(jiān)控信息判斷是否需要重啟Daemon進(jìn)程。- 開(kāi)始接受所有Worker進(jìn)程上報(bào)的狀態(tài)信息,并根據(jù)這些狀態(tài)信息覺(jué)得是否需要重啟某些Worker進(jìn)程。

在步驟1-4-g中,Master進(jìn)程初始化完畢,Master進(jìn)程的狀態(tài)被設(shè)置為就緒狀態(tài),并返回Master初始化成功的標(biāo)志。

具體地,參照?qǐng)D7,在步驟1-4-c中各Worker進(jìn)程的啟動(dòng)通過(guò)以下步驟實(shí)現(xiàn):

在步驟1-4-c-1中,得到待啟動(dòng)的Worker進(jìn)程的配置信息列表。

在步驟1-4-c-2中,選擇一個(gè)待啟動(dòng)的Worker進(jìn)程的配置信息,啟動(dòng)該Worker進(jìn)程。如果啟動(dòng)失敗,則重試直至該Worker進(jìn)程啟動(dòng)成功。如果啟動(dòng)成功,則進(jìn)入步驟1-4-c-3。

在步驟1-4-c-3中,將啟動(dòng)成功的Worker進(jìn)程的配置信息從待啟動(dòng)的Worker進(jìn)程的配置信息列表中刪除。

在步驟1-4-c-4,檢查待啟動(dòng)的Worker進(jìn)程的配置信息列表中元素的個(gè)數(shù)。如果列表元素個(gè)數(shù)大于零,則跳轉(zhuǎn)到步驟1-4-c-1。如列表元素個(gè)數(shù)等于零,則表明各Worker進(jìn)程啟動(dòng)成功,進(jìn)入步驟1-4-c-5。

在步驟1-4-c-5中,返回成功標(biāo)志。

具體地,參照?qǐng)D8,在上述步驟1-4-d中所有GIS服務(wù)的部署通過(guò)以下步驟實(shí)現(xiàn):

在步驟1-4-d-1中,得到待部署的GIS服務(wù)的配置信息列表。

在步驟1-4-d-2中,選擇一個(gè)待部署的GIS服務(wù)的配置信息,根據(jù)GIS服務(wù)配置,得到該GIS服務(wù)需要部署的實(shí)例個(gè)數(shù),設(shè)若為N,表示該GIS服務(wù)需要在N個(gè)Worker進(jìn)程中進(jìn)行部署。將當(dāng)前GIS服務(wù)部署到N個(gè)Worker進(jìn)程的詳細(xì)過(guò)程見(jiàn)流程三的步驟3-4。當(dāng)前GIS服務(wù)部署完成后,進(jìn)入步驟1-4-d-3。

在步驟1-4-d-3中,將當(dāng)前部署成功的GIS服務(wù)的配置信息從待部署的GIS服務(wù)的配置信息列表中刪除。

在步驟1-4-d-4中,檢查待部署的GIS服務(wù)的配置信息列表中元素的個(gè)數(shù)。如果列表元素個(gè)數(shù)大于零,跳轉(zhuǎn)到步驟1-4-d-1。如列表元素個(gè)數(shù)等于零,則表明各GIS服務(wù)部署成功,進(jìn)入步驟1-4-d-5。

在步驟1-4-d-5中,返回成功標(biāo)志。

圖9示出停止GIS服務(wù)裝置的工作流程(流程二)。

在步驟2-1中,系統(tǒng)管理員通過(guò)命令行,向Daemon進(jìn)程發(fā)送退出命令。

在步驟2-2中,Daemon進(jìn)程的退出監(jiān)聽(tīng)子模塊接收到退出命令后,退出監(jiān)聽(tīng)子模塊將接收到的退出命令轉(zhuǎn)發(fā)給Master進(jìn)程管理子模塊。

在步驟2-3中,Daemon進(jìn)程的Master進(jìn)程管理子模塊通過(guò)管道向Master進(jìn)程發(fā)出退出命令。

在步驟2-4中,Master進(jìn)程接收到退出命令后,開(kāi)始銷毀Master進(jìn)程以及被Master進(jìn)程管理的相關(guān)Worker進(jìn)程。銷毀工作完成之后進(jìn)入步驟2-5。

在步驟2-5中,Master進(jìn)程的各子模塊都停止并銷毀后,Master進(jìn)程退出,進(jìn)入步驟2-6。

在步驟2-6中,Daemon進(jìn)程監(jiān)測(cè)到Master進(jìn)程徹底退出的事件后,開(kāi)始依次停止并銷毀Daemon進(jìn)程的各子模塊,直到所有子模塊被銷毀完畢,Daemon進(jìn)程退出。

在步驟2-7中,GIS服務(wù)裝置的所有相關(guān)進(jìn)程都正常退出,GIS服務(wù)裝置正常停止。

具體地,參照?qǐng)D10,在上述步驟2-4中Master進(jìn)程以及被Master進(jìn)程管理的相關(guān)Worker進(jìn)程銷毀的詳細(xì)步驟如下:

在步驟2-4-a中,Master進(jìn)程將自身的狀態(tài)設(shè)置為不可用狀態(tài),停止接收新的GIS請(qǐng)求,并通知各子模塊依次有序退出。

在步驟2-4-b中,Master進(jìn)程的配置管理子模塊接收到退出事件,將當(dāng)前的配置狀態(tài)持久化,然后配置管理子模塊開(kāi)始停止,并銷毀該模塊持有的相關(guān)資源。

在步驟2-4-c中,Master進(jìn)程的狀態(tài)保持子模塊接收到退出事件,狀態(tài)保持子模塊開(kāi)始停止,并銷毀該模塊持有的相關(guān)資源如定時(shí)器、緩存等。

在步驟2-4-d中,Master進(jìn)程的服務(wù)調(diào)度子模塊接收到退出事件,查看當(dāng)前調(diào)度的服務(wù)請(qǐng)求隊(duì)列是否為空。如果服務(wù)請(qǐng)求隊(duì)列不為空,則跳轉(zhuǎn)到步驟2-4-e。如果服務(wù)請(qǐng)求隊(duì)列為空,服務(wù)調(diào)度子模塊開(kāi)始停止,并銷毀該模塊持有的相關(guān)資源,進(jìn)入步驟2-4-f。

在步驟2-4-e中,等待一段時(shí)間(具體時(shí)間可配置),直到隊(duì)列清空。

在步驟2-4-f中,Master進(jìn)程的服務(wù)管理部署子模塊接收到退出事件,服務(wù)管理部署子模塊開(kāi)始退出,并銷毀該模塊持有的相關(guān)資源。

在步驟2-4-g中,Master進(jìn)程的Worker進(jìn)程管理子模塊接收到退出事件,查看當(dāng)前已啟動(dòng)的Worker進(jìn)程隊(duì)列是否為空。如果Worker進(jìn)程隊(duì)列不為空,則跳轉(zhuǎn)到步驟2-4-h。如果Worker進(jìn)程隊(duì)列為空,則進(jìn)入步驟2-4-i。

在步驟2-4-h中,依次停止Worker進(jìn)程,直到所有Worker進(jìn)程都停止并正常推出。

在步驟2-4-i中,Worker進(jìn)程管理子模塊開(kāi)始退出,并銷毀該模塊持有的相關(guān)資源。

在步驟2-4-j中,Master進(jìn)程的支撐子模塊接收到退出事件,支撐子模塊開(kāi)始退出,并銷毀該模塊持有的相關(guān)資源。

圖11示出通過(guò)Master進(jìn)程發(fā)布GIS服務(wù)的工作流程(流程三)。

在步驟3-1中,系統(tǒng)管理員通過(guò)REST API向Master進(jìn)程發(fā)送發(fā)布GIS服務(wù)的請(qǐng)求。

在步驟3-2中,Master進(jìn)程的服務(wù)管理部署子模塊接收到該請(qǐng)求,并響應(yīng)該請(qǐng)求。

在步驟3-3中,Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)服務(wù)配置信息,計(jì)算得到該服務(wù)的待部署實(shí)例個(gè)數(shù)。如果為N,則表示需要在N個(gè)Worker中部署該服務(wù)。

在步驟3-4中,Master進(jìn)程的服務(wù)管理部署子模塊向Worker進(jìn)程管理子模塊查詢當(dāng)前已啟動(dòng)的Worker進(jìn)程個(gè)數(shù),例如為M。如果當(dāng)前已啟動(dòng)的Worker進(jìn)程個(gè)數(shù)m小于該服務(wù)的待部署實(shí)例個(gè)數(shù)N,則進(jìn)入步驟3-5。如果M大于等于N,則直接進(jìn)入步驟3-6。

在步驟3-5中,通知Worker進(jìn)程管理子模塊新啟動(dòng)(N-M)個(gè)Worker進(jìn)程。

在步驟3-6中,Master進(jìn)程的服務(wù)管理部署子模塊向Worker進(jìn)程管理子模塊查詢部署服務(wù)最少的N個(gè)Worker進(jìn)程,得到N個(gè)Worker進(jìn)程的代理對(duì)象。

在步驟3-7中,遍歷這N個(gè)Worker進(jìn)程的代理對(duì)象,依次將當(dāng)前的GIS服務(wù)通過(guò)Worker進(jìn)程代理對(duì)象部署到對(duì)應(yīng)的Worker進(jìn)程。將GIS服務(wù)部署到一個(gè)Worker進(jìn)程的詳細(xì)過(guò)程如下(參見(jiàn)圖13):

在步驟3-7-a中,Master進(jìn)程的服務(wù)管理部署子模塊通過(guò)Worker進(jìn)程代理對(duì)象向Worker進(jìn)程發(fā)送部署服務(wù)請(qǐng)求。

在步驟3-7-b中,Worker進(jìn)程的服務(wù)管理子模塊接受到該請(qǐng)求,解析該請(qǐng)求,得到待部署的服務(wù)配置信息,開(kāi)始部署服務(wù)。

在步驟3-7-c中,判斷服務(wù)部署是否成功。如果服務(wù)部署成功,則返回成功標(biāo)志。如果服務(wù)部署失敗,返回失敗標(biāo)志,并且跳轉(zhuǎn)回步驟3-7-a進(jìn)行重新部署。Master進(jìn)程的服務(wù)管理部署子模塊通過(guò)Worker進(jìn)程代理對(duì)象得到GIS服務(wù)部署是否成功的標(biāo)志。

需要指出的是,通過(guò)Master進(jìn)程的服務(wù)管理部署子模塊在部署GIS服務(wù)到一個(gè)Worker進(jìn)程的過(guò)程中,如果某個(gè)Worker部署GIS服務(wù)失敗,則重新部署1次。如果重新部署預(yù)先確定的次數(shù)(例如3次)之后,到該Worker的部署GIS服務(wù)仍失敗,則退出整個(gè)部署過(guò)程,并添加某GIS服務(wù)部署失敗的日志。如果所有Worker進(jìn)程都成功部署該服務(wù),則該GIS服務(wù)部署成功,并添加某GIS服務(wù)部署成功的日志。

具體地,參照?qǐng)D12,在步驟3-2中響應(yīng)發(fā)布GIS服務(wù)的請(qǐng)求包括以下步驟:

在步驟3-2-a中,解析該請(qǐng)求,得到GIS服務(wù)配置信息。

在步驟3-2-b中,通知配置管理子模塊新增了一個(gè)GIS服務(wù),配置管理子模塊將新增的GIS服務(wù)配置持久化。

在步驟3-2-c中,啟動(dòng)一個(gè)異步任務(wù),開(kāi)始部署GIS服務(wù)到各Worker的過(guò)程,詳細(xì)過(guò)程見(jiàn)步驟3-3。

在步驟3-2-c中,返回當(dāng)前請(qǐng)求的響應(yīng),響應(yīng)體中包含待部署服務(wù)的狀態(tài)(正在部署),以及待部署服務(wù)的訪問(wèn)地址信息等。

圖14示出Master進(jìn)程處理GIS請(qǐng)求的工作流程(流程四)。

在步驟4-1中,GIS服務(wù)裝置的普通用戶向Master進(jìn)程發(fā)送GIS請(qǐng)求。

在步驟4-2中,Master進(jìn)程的服務(wù)調(diào)度子模塊接收到該請(qǐng)求,解析該請(qǐng)求,計(jì)算得到當(dāng)前GIS請(qǐng)求的對(duì)應(yīng)的服務(wù)名稱。

在步驟4-3中,Master進(jìn)程的服務(wù)調(diào)度子模塊根據(jù)服務(wù)名向服務(wù)管理部署子模塊查詢哪些Worker進(jìn)程部署了該服務(wù),并返回Worker進(jìn)程的名稱列表。

在步驟4-4中,Master進(jìn)程的服務(wù)調(diào)度子模塊根據(jù)Worker進(jìn)程的名稱列表向Worker進(jìn)程管理子模塊查詢并返回指定名稱的Worker進(jìn)程代理對(duì)象的列表。

在步驟4-5中,Master進(jìn)程的服務(wù)調(diào)度子模塊根據(jù)某種負(fù)載均衡算法、例如輪詢、加權(quán)或一致哈希算法等從Worker進(jìn)程代理對(duì)象的列表獲取一個(gè)Worker進(jìn)程代理對(duì)象。

在步驟4-6中,Master進(jìn)程的服務(wù)調(diào)度子模塊通過(guò)Worker進(jìn)程代理對(duì)象處理該請(qǐng)求。

在步驟4-7中,Master進(jìn)程的服務(wù)調(diào)度子模塊判斷Worker進(jìn)程代理對(duì)象返回的響應(yīng)中的狀態(tài)標(biāo)志。如果標(biāo)志為服務(wù)暫不可用,則返回到步驟4-5,重新嘗試,最多嘗試預(yù)先確定的次數(shù)、例如3次。否則,表示請(qǐng)求已經(jīng)得到響應(yīng),進(jìn)入步驟4-8。

在步驟4-8中,將Worker進(jìn)程代理對(duì)象返回的響應(yīng)信息回寫(xiě)到由服務(wù)調(diào)度子模塊接收到的請(qǐng)求響應(yīng)中,請(qǐng)求處理完成。

具體地,參照?qǐng)D15,在步驟4-6中通過(guò)Worker進(jìn)程代理對(duì)象處理該請(qǐng)求包括以下步驟:

在步驟4-6-a中,Worker進(jìn)程代理對(duì)象將該請(qǐng)求轉(zhuǎn)發(fā)到對(duì)應(yīng)的Worker進(jìn)程。

在步驟4-6-b中,Worker進(jìn)程的服務(wù)管理子模塊接收到該請(qǐng)求后,解析該請(qǐng)求,得到請(qǐng)求的服務(wù)名稱。

在步驟4-6-c中,Worker進(jìn)程的服務(wù)管理子模塊根據(jù)請(qǐng)求名稱獲取對(duì)應(yīng)服務(wù)對(duì)象,并且判斷當(dāng)前服務(wù)對(duì)象是否可用。如果可用,則調(diào)用該服務(wù)對(duì)象處理該請(qǐng)求,并返回響應(yīng)結(jié)果。如果不可用,則在響應(yīng)中設(shè)置服務(wù)暫不可用的標(biāo)志。

圖16示出Master進(jìn)程對(duì)GIS服務(wù)進(jìn)行自動(dòng)伸縮的工作流程(流程五)。該工作流程包括以下步驟:

在步驟5-1中,在Master進(jìn)程的支撐子模塊中包含有監(jiān)控與統(tǒng)計(jì)單元。該子模塊設(shè)置用于監(jiān)控每個(gè)GIS服務(wù)負(fù)載、請(qǐng)求處理的耗時(shí)以及硬件資源的使用情況、例如CPU使用率、內(nèi)存使用率等。

在步驟5-2中,Master進(jìn)程的服務(wù)管理部署子模塊定期向支撐子模塊的監(jiān)控與統(tǒng)計(jì)單元查詢每個(gè)GIS服務(wù)的負(fù)載以及硬件資源使用情況,來(lái)決定是否需要對(duì)其進(jìn)行自動(dòng)伸縮。得到所有GIS服務(wù)是否需要擴(kuò)展或收縮實(shí)例的標(biāo)志,以及每個(gè)GIS服務(wù)待擴(kuò)展或收縮的實(shí)例個(gè)數(shù),依次判斷這些標(biāo)志,然后對(duì)GIS服務(wù)進(jìn)行自動(dòng)伸縮。如果某GIS服務(wù)需要擴(kuò)展實(shí)例個(gè)數(shù),得到待擴(kuò)展的服務(wù)實(shí)例個(gè)數(shù)E,則跳轉(zhuǎn)到步驟5-3開(kāi)始擴(kuò)展服務(wù)實(shí)例;如果某GIS服務(wù)實(shí)例個(gè)數(shù)需要收縮,得到待收縮的服務(wù)實(shí)例個(gè)數(shù)S,則跳轉(zhuǎn)到步驟5-6開(kāi)始收縮服務(wù)實(shí)例。判斷某GIS服務(wù)是否需要伸縮的詳細(xì)過(guò)程見(jiàn)流程六。

在步驟5-3中,Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)服務(wù)名查詢?cè)揋IS服務(wù)當(dāng)前已部署的實(shí)例個(gè)數(shù),例如為N。服務(wù)管理部署子模塊從Worker進(jìn)程管理子模塊查詢當(dāng)前已啟動(dòng)的Worker進(jìn)程個(gè)數(shù),例如為M。如果N+E≤M,則表示當(dāng)前的Worker個(gè)數(shù)夠用,跳轉(zhuǎn)到步驟5-5開(kāi)始將當(dāng)前GIS服務(wù)新部署到E個(gè)Worker進(jìn)程中。如果N+E>M,則表示當(dāng)前的Worker個(gè)數(shù)不夠用,則跳轉(zhuǎn)到步驟5-4。

在步驟5-4中,重新啟動(dòng)(N+E-M)個(gè)Worker進(jìn)程。如果需要的Worker進(jìn)程啟動(dòng)失敗,則寫(xiě)日志并且提示該服務(wù)擴(kuò)展服務(wù)實(shí)例失敗,服務(wù)擴(kuò)展的過(guò)程結(jié)束。如果需要的Worker進(jìn)程啟動(dòng)成功,跳轉(zhuǎn)到步驟5-5將當(dāng)前GIS服務(wù)新部署到E個(gè)Worker進(jìn)程中。

在步驟5-5中,Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)當(dāng)前GIS服務(wù)名查詢得到部署過(guò)該GIS服務(wù)的Worker進(jìn)程名稱列表,再向Worker進(jìn)程管理子模塊查詢所有Worker進(jìn)程名稱列表。根據(jù)這兩個(gè)列表,可以得到?jīng)]有部署過(guò)當(dāng)前GIS服務(wù)的E個(gè)Worker名稱的列表。根據(jù)這個(gè)列表向Worker進(jìn)程管理子模塊查詢得到這個(gè)E個(gè)Worker進(jìn)程代理對(duì)象。然后依次調(diào)用這E個(gè)Worker進(jìn)程代理對(duì)象將當(dāng)前GIS服務(wù)部署對(duì)應(yīng)的Worker進(jìn)程中,詳細(xì)步驟見(jiàn)流程三的步驟3-7。

在步驟5-6中,Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)當(dāng)前GIS服務(wù)名查詢得到部署過(guò)該GIS服務(wù)的Worker進(jìn)程的名稱列表L1,從L1中選取S個(gè)Worker進(jìn)程名稱,得到待卸載該GIS服務(wù)的Worker進(jìn)程的名稱列表L2。根據(jù)L2從Worker進(jìn)程管理子模塊查詢得到S個(gè)Worker進(jìn)程的代理對(duì)象的列表L3。

在步驟5-7中,Master進(jìn)程的服務(wù)管理部署子模塊遍歷列表L3,每次遍歷過(guò)程中得到當(dāng)前的Worker進(jìn)程的代理對(duì)象,通過(guò)代理對(duì)象來(lái)卸載當(dāng)前GIS服務(wù)。

具體地,參照?qǐng)D17,Worker代理對(duì)象卸載GIS服務(wù)包括以下步驟:

在步驟5-7-a中,在Master進(jìn)程的服務(wù)管理部署子模塊調(diào)用Worker進(jìn)程代理對(duì)象發(fā)送卸載某GIS服務(wù)的命令。

在步驟5-7-b中,Worker進(jìn)程的服務(wù)管理子模塊接收到該命令,解析該命令,得到待卸載的GIS服務(wù)名稱。

在步驟5-7-c中,Worker進(jìn)程的服務(wù)管理子模塊開(kāi)始卸載GIS服務(wù),直到GIS服務(wù)卸載完畢,并返回卸載成果的消息。

在步驟5-7-d中,Worker進(jìn)程代理對(duì)象得到GIS服務(wù)卸載完成的消息后,完成當(dāng)前Worker進(jìn)程卸載當(dāng)前GIS服務(wù)的過(guò)程。

如此循環(huán),直到流程三中所有Worker進(jìn)程代理對(duì)象都完成卸載當(dāng)前GIS服務(wù)的過(guò)程,則當(dāng)前GIS服務(wù)收縮服務(wù)實(shí)例的過(guò)程完成。

圖18示出Master進(jìn)程判斷某GIS服務(wù)是否需要自動(dòng)伸縮的工作流程,該工作流程具有以下步驟:

在步驟6-1中,Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)服務(wù)名從支撐子模塊的監(jiān)控與統(tǒng)計(jì)單元查詢,得到當(dāng)前的硬件資源使用情況以及該GIS服務(wù)在最近的一分鐘平均每秒接收到的并發(fā)請(qǐng)求數(shù),例如R。

在步驟6-2中,Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)服務(wù)名查詢,得到該GIS服務(wù)當(dāng)前已部署的實(shí)例個(gè)數(shù),例如為N。

在步驟6-3中,Master進(jìn)程的服務(wù)管理部署子模塊根據(jù)服務(wù)名從配置管理子模塊查詢,得到該GIS服務(wù)每服務(wù)實(shí)例最大處理的并發(fā)請(qǐng)求數(shù),得到RP。

在步驟6-4中,借助公式E = ( N - R/RP )來(lái)計(jì)算待擴(kuò)展的服務(wù)實(shí)例個(gè)數(shù)E。根據(jù)計(jì)算結(jié)果,存在以下不同情況:

a)如果 E > 1,則表示當(dāng)前的服務(wù)實(shí)例個(gè)數(shù)夠用,且有較明顯的冗余,需要收縮服務(wù)實(shí)例個(gè)數(shù)。返回服務(wù)需要收縮的標(biāo)志,且收縮的服務(wù)實(shí)例個(gè)數(shù)為E。

b) 如果E < -1,則表示當(dāng)前的服務(wù)實(shí)例個(gè)數(shù)不夠用,且有較大的缺口,需要擴(kuò)展服務(wù)實(shí)例個(gè)數(shù)。返回服務(wù)需要擴(kuò)展的標(biāo)志,且擴(kuò)展的服務(wù)實(shí)例個(gè)數(shù)為-E。

c) 如果E≥-1且E≤1,則表示當(dāng)前的服務(wù)實(shí)例個(gè)數(shù)正好夠用,無(wú)需伸縮服務(wù)實(shí)例個(gè)數(shù)。

對(duì)于前述的各方法實(shí)施例,為了描述簡(jiǎn)單,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域的技術(shù)人員應(yīng)該知悉,本申請(qǐng)并不受所描述的動(dòng)作順序的限制,因?yàn)楦鶕?jù)本申請(qǐng),某些步驟可以采用其他順序或同時(shí)執(zhí)行;其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,上述方法實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本申請(qǐng)所必須的。

需要說(shuō)明的是,上述裝置實(shí)施例屬于優(yōu)選實(shí)施例,所涉及的單元和模塊并不一定是本申請(qǐng)所必須的。

本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可。對(duì)于本申請(qǐng)的裝置實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。

以上對(duì)本申請(qǐng)所提供的一種微服務(wù)架構(gòu)可自動(dòng)伸縮的GIS服務(wù)裝置以及一種基于根據(jù)該GIS服務(wù)裝置進(jìn)行自動(dòng)伸縮的控制方法,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本申請(qǐng)的控制方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請(qǐng)的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1