本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種應(yīng)用升級(jí)方法及裝置。
背景技術(shù):
一個(gè)系統(tǒng)提供給用戶的各種服務(wù)其實(shí)是由對(duì)應(yīng)的各種應(yīng)用來(lái)支持的。
通常,運(yùn)行中的應(yīng)用會(huì)一直接收其它數(shù)據(jù)源(如系統(tǒng)、應(yīng)用、客戶端等)回流的數(shù)據(jù)。以推薦場(chǎng)景為例,用戶a查看了一篇文章,那么該行為數(shù)據(jù)(即查看這篇文章)就會(huì)通過(guò)日志回流到系統(tǒng)中,該系統(tǒng)解析日中后,查詢用戶a的好友信息;接著將用戶a的行為數(shù)據(jù)和好友信息回流到推薦應(yīng)用中;這樣,推薦應(yīng)用就可以基于回流數(shù)據(jù)給用戶a的好友推薦類似于“您的好友a(bǔ)看過(guò)了xx文章”的信息。這種應(yīng)用由于需要實(shí)時(shí)地給用戶提供服務(wù),所以對(duì)可用性要求較高。但是,一個(gè)應(yīng)用不可避免的都會(huì)需要進(jìn)行升級(jí)。
現(xiàn)有技術(shù)中,應(yīng)用升級(jí)流程如圖1所示,在升級(jí)過(guò)程中,各個(gè)環(huán)節(jié)都需要人工確認(rèn)后進(jìn)行操作,包括:
a1:人工停止老應(yīng)用從數(shù)據(jù)源接收回流的數(shù)據(jù);
a2:在人工確認(rèn)所述老應(yīng)用內(nèi)未處理的數(shù)據(jù)處理完畢后,人工向應(yīng)用管理模塊提交關(guān)閉所述老應(yīng)用的命令(即kill命令);
a3:在人工確定應(yīng)用管理模塊完全關(guān)閉所述老應(yīng)用后,人工向應(yīng)用管理模塊提交啟動(dòng)新應(yīng)用的命令(即start命令);
a4:等待應(yīng)用管理模塊啟動(dòng)完畢所述新應(yīng)用。
如上所述,由于應(yīng)用是停機(jī)升級(jí),所以整個(gè)升級(jí)過(guò)程直到新應(yīng)用啟動(dòng)完畢之前都無(wú)法給用戶提供服務(wù)。而且,由于各個(gè)環(huán)節(jié)都需要人工參與,所以整個(gè)應(yīng)用升級(jí)所需時(shí)間比較多,如圖1中a1到a2之間耗時(shí)大于4分鐘,a2到a3之間耗時(shí)大于3分鐘,a3待a4之間耗時(shí)大于3分鐘,整個(gè)升級(jí)過(guò)程耗時(shí)需要10分鐘以上。
綜上所述,現(xiàn)有技術(shù)中存在有應(yīng)用升級(jí)耗時(shí)較多的問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)?zhí)峁┑囊环N應(yīng)用升級(jí)方法及裝置,以解決現(xiàn)有技術(shù)中應(yīng)用升級(jí)耗時(shí)較多的問(wèn)題。
根據(jù)本申請(qǐng)實(shí)施例提供的一種應(yīng)用升級(jí)方法,所述方法應(yīng)用于應(yīng)用管理模塊,所述方法包括:
獲取被提交應(yīng)用的應(yīng)用名;
在所述被提交應(yīng)用與已存在的應(yīng)用重名的情況下,觸發(fā)預(yù)設(shè)的關(guān)閉命令,從而調(diào)用所述已存在的應(yīng)用中各節(jié)點(diǎn)的結(jié)束函數(shù);
在接收到所述已存在的應(yīng)用返回的執(zhí)行完畢信息的情況下,回收所述各節(jié)點(diǎn)占用的進(jìn)程;
在回收完畢的情況下,觸發(fā)預(yù)設(shè)的啟動(dòng)命令,從而啟動(dòng)所述被提交應(yīng)用中各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。
可選的,在所述被提交應(yīng)用與已存在的應(yīng)用重名的情況下,觸發(fā)預(yù)設(shè)的關(guān)閉命令,從而調(diào)用所述已存在的應(yīng)用中各節(jié)點(diǎn)的結(jié)束函數(shù),具體包括:
在所述被提交應(yīng)用與已存在的應(yīng)用重名的情況下,判斷是否接收到提交的針對(duì)所述已存在的應(yīng)用的升級(jí)命令;
在接收到提交的針對(duì)所述已存在的應(yīng)用的升級(jí)命令的情況下,觸發(fā)預(yù)設(shè)的關(guān)閉命令,從而調(diào)用所述已存在的應(yīng)用中各節(jié)點(diǎn)的結(jié)束函數(shù)。
可選的,所述應(yīng)用包括jstorm應(yīng)用;
所述進(jìn)程包括jvm進(jìn)程。
根據(jù)本申請(qǐng)實(shí)施例提供的一種關(guān)閉應(yīng)用方法,所述方法應(yīng)用于待升級(jí)的應(yīng)用,所述方法包括:
在被應(yīng)用管理模塊調(diào)用節(jié)點(diǎn)的結(jié)束函數(shù)后,停止根節(jié)點(diǎn)接收回流的數(shù)據(jù),并將所述根節(jié)點(diǎn)確定為當(dāng)前節(jié)點(diǎn);
處理當(dāng)前節(jié)點(diǎn)內(nèi)的數(shù)據(jù)并發(fā)送到下游節(jié)點(diǎn);
在當(dāng)前節(jié)點(diǎn)內(nèi)的數(shù)據(jù)處理完畢并且接收到上游全部節(jié)點(diǎn)廣播的結(jié)束標(biāo)識(shí)后,向所述當(dāng)前節(jié)點(diǎn)的下游全部子節(jié)點(diǎn)廣播結(jié)束標(biāo)識(shí);
在當(dāng)前節(jié)點(diǎn)存在下一個(gè)節(jié)點(diǎn)的情況下,將下一個(gè)節(jié)點(diǎn)確定為當(dāng)前節(jié)點(diǎn),返回執(zhí)行所述處理當(dāng)前節(jié)點(diǎn)內(nèi)的數(shù)據(jù)并發(fā)送到下游節(jié)點(diǎn)的步驟;
在當(dāng)前節(jié)點(diǎn)為最后一個(gè)節(jié)點(diǎn)的情況下,所述根節(jié)點(diǎn)向所述應(yīng)用管理模塊返回執(zhí)行完畢信息,從而等待所述應(yīng)用管理模塊回收各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。
可選的,所述應(yīng)用包括jstorm應(yīng)用;
所述進(jìn)程包括jvm進(jìn)程。
根據(jù)本申請(qǐng)實(shí)施例提供的一種應(yīng)用升級(jí)裝置,所述裝置應(yīng)用于應(yīng)用管理模塊,所述裝置包括:
獲取單元,獲取被提交應(yīng)用的應(yīng)用名;
調(diào)用單元,在所述被提交應(yīng)用與已存在的應(yīng)用重名的情況下,觸發(fā)預(yù)設(shè)的關(guān)閉命令,從而調(diào)用所述已存在的應(yīng)用中各節(jié)點(diǎn)的結(jié)束函數(shù);
回收單元,在接收到所述已存在的應(yīng)用返回的執(zhí)行完畢信息的情況下,回收所述各節(jié)點(diǎn)占用的進(jìn)程;
啟動(dòng)單元,在回收完畢的情況下,觸發(fā)預(yù)設(shè)的啟動(dòng)命令,從而啟動(dòng)所述被提交應(yīng)用中各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。
可選的,所述調(diào)用單元,具體包括:
判斷子單元,在所述被提交應(yīng)用與已存在的應(yīng)用重名的情況下,判斷是否接收到提交的針對(duì)所述已存在的應(yīng)用的升級(jí)命令;
調(diào)用子單元,在接收到提交的針對(duì)所述已存在的應(yīng)用的升級(jí)命令的情況下,觸發(fā)預(yù)設(shè)的關(guān)閉命令,從而調(diào)用所述已存在的應(yīng)用中各節(jié)點(diǎn)的結(jié)束函數(shù)。
可選的,所述應(yīng)用包括jstorm應(yīng)用;
所述進(jìn)程包括jvm進(jìn)程。
根據(jù)本申請(qǐng)實(shí)施例提供的一種關(guān)閉應(yīng)用裝置,所述裝置應(yīng)用于待升級(jí)的應(yīng)用,所述裝置包括:
停止接收單元,在被應(yīng)用管理模塊調(diào)用節(jié)點(diǎn)的結(jié)束函數(shù)后,停止根節(jié)點(diǎn)接收回流的數(shù)據(jù),并將所述根節(jié)點(diǎn)確定為當(dāng)前節(jié)點(diǎn);
處理數(shù)據(jù)單元,處理當(dāng)前節(jié)點(diǎn)內(nèi)的數(shù)據(jù)并發(fā)送到下游節(jié)點(diǎn);
廣播標(biāo)識(shí)單元,在當(dāng)前節(jié)點(diǎn)內(nèi)的數(shù)據(jù)處理完畢并且接收到上游全部節(jié)點(diǎn)廣播的結(jié)束標(biāo)識(shí)后,向所述當(dāng)前節(jié)點(diǎn)的下游全部子節(jié)點(diǎn)廣播結(jié)束標(biāo)識(shí);
控制單元,在當(dāng)前節(jié)點(diǎn)存在下一個(gè)節(jié)點(diǎn)的情況下,將下一個(gè)節(jié)點(diǎn)確定為當(dāng)前節(jié)點(diǎn)后輸入到所述處理數(shù)據(jù)單元中;
返回信息單元,在當(dāng)前節(jié)點(diǎn)為最后一個(gè)節(jié)點(diǎn)的情況下,所述根節(jié)點(diǎn)向所述應(yīng)用管理模塊返回執(zhí)行完畢信息,從而等待所述應(yīng)用管理模塊回收各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。
可選的,所述應(yīng)用包括jstorm應(yīng)用;
所述進(jìn)程包括jvm進(jìn)程。
本申請(qǐng)實(shí)施例中,對(duì)應(yīng)用管理模塊(topologymanager,tm)進(jìn)行改造,使得所述應(yīng)用管理模塊可以允許用戶提交重名的應(yīng)用。如此,在所述應(yīng)用管理模塊檢測(cè)到用戶提交了重名應(yīng)用時(shí),可以自動(dòng)地對(duì)已存在的重名應(yīng)用進(jìn)行升級(jí)。這樣,避免了現(xiàn)有技術(shù)中應(yīng)用升級(jí)過(guò)程中需要人為參與所造成的耗時(shí)較多的問(wèn)題,從而大大減少了應(yīng)用升級(jí)所消耗的時(shí)間。本申請(qǐng)實(shí)施例還對(duì)應(yīng)用的結(jié)束流程進(jìn)行改造,使得任意節(jié)點(diǎn)在處理完畢其內(nèi)的數(shù)據(jù)以及在接收到全部上游節(jié)點(diǎn)廣播的結(jié)束標(biāo)識(shí)的情況下,需要向下游全部節(jié)點(diǎn)廣播結(jié)束標(biāo)識(shí);在全部節(jié)點(diǎn)都處理完數(shù)據(jù)后,根節(jié)點(diǎn)才可以向應(yīng)用管理模塊返回執(zhí)行完畢信息,從而等待應(yīng)用管理模塊回收各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。如此,通過(guò)結(jié)束標(biāo)識(shí)可以確保應(yīng)用的每一個(gè)節(jié)點(diǎn)內(nèi)的數(shù)據(jù)都處理完畢,保證了數(shù)據(jù)處理的完整性,避免人為確定數(shù)據(jù)處理完畢時(shí)可能遺漏的情況,而且由于沒(méi)有人為參與,因此大大減少了應(yīng)用升級(jí)所消耗的時(shí)間。
附圖說(shuō)明
圖1是現(xiàn)有技術(shù)中應(yīng)用升級(jí)方法的流程圖;
圖2是本申請(qǐng)一實(shí)施例提供的應(yīng)用升級(jí)方法的流程圖;
圖3是本申請(qǐng)一實(shí)施例提供的提示信息示意圖;
圖4是本申請(qǐng)一實(shí)施例提供的應(yīng)用中的各節(jié)點(diǎn)示意圖;
圖5是本申請(qǐng)一實(shí)施例提供的關(guān)閉應(yīng)用方法的流程圖;
圖6是本申請(qǐng)?zhí)峁┑膽?yīng)用升級(jí)裝置所在設(shè)備的一種硬件結(jié)構(gòu)圖;
圖7是本申請(qǐng)一實(shí)施例提供的應(yīng)用升級(jí)裝置的模塊示意圖;
圖8是本申請(qǐng)?zhí)峁┑年P(guān)閉應(yīng)用裝置所在設(shè)備的一種硬件結(jié)構(gòu)圖;
圖9是本申請(qǐng)一實(shí)施例提供的關(guān)閉應(yīng)用裝置的模塊示意圖。
具體實(shí)施方式
這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說(shuō)明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請(qǐng)相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請(qǐng)的一些方面相一致的裝置和方法的例子。
在本申請(qǐng)使用的術(shù)語(yǔ)是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請(qǐng)。在本申請(qǐng)和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語(yǔ)“和/或”是指并包含一個(gè)或多個(gè)相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請(qǐng)可能采用術(shù)語(yǔ)第一、第二、第三等來(lái)描述各種信息,但這些信息不應(yīng)限于這些術(shù)語(yǔ)。這些術(shù)語(yǔ)僅用來(lái)將同一類型的信息彼此區(qū)分開(kāi)。例如,在不脫離本申請(qǐng)范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語(yǔ)境,如在此所使用的詞語(yǔ)“如果”可以被解釋成為“在……時(shí)”或“當(dāng)……時(shí)”或“響應(yīng)于確定”。
以下舉例說(shuō)明本申請(qǐng)實(shí)施例可以應(yīng)用的jstorm的場(chǎng)景中。
storm是一種開(kāi)源的分布式容錯(cuò)實(shí)時(shí)計(jì)算系統(tǒng),使用storm可以降低并行批量處理數(shù)據(jù)的復(fù)雜度。一般的,storm被用在對(duì)實(shí)時(shí)處理的系統(tǒng)中。
jstorm是用java重新實(shí)現(xiàn)了類storm的系統(tǒng)。jstorm繼承了storm的所有優(yōu)點(diǎn),并且jstorm比storm更強(qiáng)大、更穩(wěn)定、性能更好。
一般的,jstorm應(yīng)用可以部署在系統(tǒng)的應(yīng)用管理模塊中(topologymanager,tm)。jstorm應(yīng)用與應(yīng)用管理模塊之間可以進(jìn)行通信,并完成應(yīng)用升級(jí)等功能。
請(qǐng)參見(jiàn)圖2,為本申請(qǐng)一實(shí)施例提供的應(yīng)用升級(jí)方法的流程圖,該實(shí)施例從應(yīng)用管理模塊側(cè)進(jìn)行描述,包括以下步驟:
步驟110:獲取被提交應(yīng)用的應(yīng)用名。
本實(shí)施例中,通過(guò)對(duì)應(yīng)用管理模塊進(jìn)行改造,允許用戶在應(yīng)用管理模塊中提交同名的應(yīng)用。
所述應(yīng)用管理模塊在用戶提交應(yīng)用后,可以獲取被提交應(yīng)用的應(yīng)用名。
步驟120:在所述被提交應(yīng)用與已存在的應(yīng)用重名的情況下,觸發(fā)預(yù)設(shè)的關(guān)閉命令,從而調(diào)用所述已存在的應(yīng)用中各節(jié)點(diǎn)的結(jié)束函數(shù)。
本實(shí)施例中,如果用戶提供的應(yīng)用與已存在的應(yīng)用重名,則說(shuō)明需要對(duì)已存在的重名應(yīng)用進(jìn)行升級(jí),并且所述應(yīng)用管理器自動(dòng)地進(jìn)入升級(jí)流程,即觸發(fā)預(yù)設(shè)的關(guān)閉命令,從而調(diào)用所述已存在的應(yīng)用中各節(jié)點(diǎn)的結(jié)束函數(shù)。
所述結(jié)束函數(shù)用于節(jié)點(diǎn)處理未處理完畢的數(shù)據(jù)進(jìn)而等待回收該節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。
步驟130:在接收到所述已存在的應(yīng)用返回的執(zhí)行完畢信息的情況下,回收所述各節(jié)點(diǎn)占用的進(jìn)程。
本實(shí)施例中,應(yīng)用管理模塊在調(diào)用所述已存在的應(yīng)用中各節(jié)點(diǎn)的結(jié)束函數(shù)后,需要等待所述已存在的應(yīng)用中各節(jié)點(diǎn)處理未處理完畢的數(shù)據(jù)。
一般的,已存在的應(yīng)用處理完數(shù)據(jù)后,會(huì)返回一個(gè)執(zhí)行完畢信息;所以應(yīng)用管理模塊在接收到所述已存在的應(yīng)用返回的執(zhí)行完畢信息的情況下,則說(shuō)明所述已存在的應(yīng)用內(nèi)未處理完的數(shù)據(jù)已經(jīng)都處理完畢了,因此,可以回收所述各節(jié)點(diǎn)占用的進(jìn)程。
步驟140:在回收完畢的情況下,觸發(fā)預(yù)設(shè)的啟動(dòng)命令,從而啟動(dòng)所述被提交應(yīng)用中各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。
本實(shí)施例中,應(yīng)用管理模塊在回收了所述已存在的應(yīng)用所有節(jié)點(diǎn)占用的進(jìn)程后,則說(shuō)明所述已存在的應(yīng)用已經(jīng)完全關(guān)閉了,接著可以啟動(dòng)所述被提交應(yīng)用了;
具體地,在回收完畢的情況下,觸發(fā)預(yù)設(shè)的啟動(dòng)命令,從而啟動(dòng)所述被提交應(yīng)用中各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。
在等待所述被提交應(yīng)用中各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程都啟動(dòng)后,則說(shuō)明所述被提交應(yīng)用已經(jīng)啟動(dòng)。如此,整個(gè)應(yīng)用升級(jí)過(guò)程結(jié)束。
通過(guò)本實(shí)施例,對(duì)應(yīng)用管理模塊進(jìn)行改造,使得所述應(yīng)用管理模塊可以允許用戶提交重名的應(yīng)用。如此,在所述應(yīng)用管理模塊檢測(cè)到用戶提交了重名應(yīng)用時(shí),可以自動(dòng)地對(duì)已存在的重名應(yīng)用進(jìn)行升級(jí)。這樣,大大減少了應(yīng)用升級(jí)所消耗的時(shí)間(可以縮短到3分鐘左右),避免了現(xiàn)有技術(shù)中應(yīng)用升級(jí)過(guò)程中需要人為參與所造成的耗時(shí)較多的問(wèn)題。
上述實(shí)施例中,應(yīng)用管理模塊只要檢測(cè)到提交應(yīng)用出現(xiàn)重名時(shí),會(huì)自動(dòng)地對(duì)已存在的重名應(yīng)用進(jìn)行升級(jí),即關(guān)閉老應(yīng)用(已存在的應(yīng)用),啟動(dòng)新應(yīng)用(提交的應(yīng)用)。這樣,雖然可以大大縮短應(yīng)用升級(jí)時(shí)間,但是在實(shí)際應(yīng)用中,提交應(yīng)用是人為操作的,而人為操作往往具有很多不確定因素,例如用戶提交的應(yīng)用雖然重名,但并不是升級(jí)老應(yīng)用的,只是命名相同的另一個(gè)應(yīng)用。這種情況下,通過(guò)上述實(shí)施例提供的應(yīng)用升級(jí)方法,就會(huì)直接對(duì)老應(yīng)用進(jìn)行升級(jí),這樣就會(huì)出現(xiàn)升級(jí)錯(cuò)誤。
為了解決這樣問(wèn)題,在本申請(qǐng)的另一個(gè)實(shí)施例中,所述步驟120,具體可以包括如下步驟:
在所述被提交應(yīng)用與已存在的應(yīng)用重名的情況下,判斷是否接收到提交的針對(duì)所述已存在的應(yīng)用的升級(jí)命令;
在接收到提交的針對(duì)所述已存在的應(yīng)用的升級(jí)命令的情況下,觸發(fā)預(yù)設(shè)的關(guān)閉命令,從而調(diào)用所述已存在的應(yīng)用中各節(jié)點(diǎn)的結(jié)束函數(shù)。
本實(shí)施例中與上述實(shí)施例相比,應(yīng)用管理模塊在檢測(cè)到提交應(yīng)用重名時(shí),不會(huì)直接對(duì)已存在的應(yīng)用進(jìn)行升級(jí),而是需要經(jīng)過(guò)用戶確定,用戶確定后,可以返回一個(gè)升級(jí)命令。應(yīng)用管理模塊只有在接收到提交的針對(duì)所述已存在的應(yīng)用的升級(jí)命令的情況下,才會(huì)觸發(fā)預(yù)設(shè)的關(guān)閉命令,從而調(diào)用所述已存在的應(yīng)用中各節(jié)點(diǎn)的結(jié)束函數(shù)。
如圖3所示的提示信息示意圖中,應(yīng)用管理模塊可以輸出一個(gè)用于確定的提示信息“您確定對(duì)應(yīng)用進(jìn)行升級(jí)嗎”,還可以顯示重名的已存在應(yīng)用詳情和重名的提交應(yīng)用詳情。
通過(guò)本實(shí)施例,對(duì)應(yīng)用管理模塊進(jìn)行改造,使得所述應(yīng)用管理模塊可以允許用戶提交重名的應(yīng)用,并且將原本需要人工提交的兩個(gè)命令簡(jiǎn)化為一個(gè)升級(jí)命令。如此,通過(guò)需要用戶提交一個(gè)升級(jí)命令避免了上一實(shí)施例中的問(wèn)題,而且依然可以避免了現(xiàn)有技術(shù)中應(yīng)用升級(jí)過(guò)程中需要人為參與所造成的耗時(shí)較多的問(wèn)題,從而大大減少了應(yīng)用升級(jí)所消耗的時(shí)間。
在本申請(qǐng)所述的應(yīng)用升級(jí)方法可以應(yīng)用在jstorm場(chǎng)景中,即所述應(yīng)用包括jstorm應(yīng)用,而對(duì)應(yīng)的,所述進(jìn)程包括jvm進(jìn)程。
一般的,應(yīng)用處理輸入的數(shù)據(jù)時(shí),可以分為多個(gè)處理步驟,每一個(gè)處理步驟都可以視為一個(gè)節(jié)點(diǎn)。通常,每一個(gè)節(jié)點(diǎn)都會(huì)對(duì)應(yīng)一個(gè)進(jìn)程。其中,與數(shù)據(jù)源連接的節(jié)點(diǎn)可以稱為根節(jié)點(diǎn)(spout),其它的節(jié)點(diǎn)可以稱為子節(jié)點(diǎn)(bolt)。如圖4所示的節(jié)點(diǎn)示意圖中,節(jié)點(diǎn)1即為根節(jié)點(diǎn),節(jié)點(diǎn)2、3、4、即為子節(jié)點(diǎn)。每一個(gè)數(shù)據(jù)都是按照節(jié)點(diǎn)的先后順序處理的。
現(xiàn)有技術(shù)中,在關(guān)閉老應(yīng)用時(shí),需要人工確定老應(yīng)用內(nèi)未處理的數(shù)據(jù)處理完畢。然而,人工確定并不準(zhǔn)確,而且需要依靠一定經(jīng)驗(yàn)來(lái)判斷,無(wú)法保證老應(yīng)用內(nèi)未處理的數(shù)據(jù)完全處理。
為了解決這一問(wèn)題,請(qǐng)參見(jiàn)圖5,為本申請(qǐng)一實(shí)施例提供的關(guān)閉應(yīng)用方法的流程圖,該實(shí)施例從待升級(jí)的應(yīng)用側(cè)進(jìn)行描述,包括以下步驟:
步驟210:在被應(yīng)用管理模塊調(diào)用節(jié)點(diǎn)的結(jié)束函數(shù)后,停止根節(jié)點(diǎn)接收回流的數(shù)據(jù),并將所述根節(jié)點(diǎn)確定為當(dāng)前節(jié)點(diǎn)。
本實(shí)施例中,如前所述,根節(jié)點(diǎn)了連接數(shù)據(jù)源,在關(guān)閉應(yīng)用時(shí),需要停止根節(jié)點(diǎn)接收數(shù)據(jù)源回流的數(shù)據(jù)。
步驟220:處理當(dāng)前節(jié)點(diǎn)內(nèi)的數(shù)據(jù)并發(fā)送到下游節(jié)點(diǎn)。
本實(shí)施例中,當(dāng)前節(jié)點(diǎn)內(nèi)未處理的數(shù)據(jù)需要進(jìn)行處理,并將處理的數(shù)據(jù)發(fā)送到下游節(jié)點(diǎn),圖4中根節(jié)點(diǎn)1處理的數(shù)據(jù),需要發(fā)送到下游節(jié)點(diǎn)即節(jié)點(diǎn)2。
步驟230:在當(dāng)前節(jié)點(diǎn)內(nèi)的數(shù)據(jù)處理完畢并且接收到上游全部節(jié)點(diǎn)廣播的結(jié)束標(biāo)識(shí)后,向所述當(dāng)前節(jié)點(diǎn)的下游全部子節(jié)點(diǎn)廣播結(jié)束標(biāo)識(shí)。
本實(shí)施例中,所述結(jié)束標(biāo)識(shí)用于表示節(jié)點(diǎn)內(nèi)的數(shù)據(jù)處理完畢。例如節(jié)點(diǎn)2廣播結(jié)束標(biāo)識(shí),說(shuō)明節(jié)點(diǎn)2內(nèi)的數(shù)據(jù)處理完畢。
當(dāng)前節(jié)點(diǎn)將數(shù)據(jù)處理完畢后,需要判斷是否接收到上游全部節(jié)點(diǎn)廣播的結(jié)束標(biāo)識(shí);在當(dāng)前節(jié)點(diǎn)內(nèi)的數(shù)據(jù)處理完畢并且接收到上游全部節(jié)點(diǎn)廣播的結(jié)束標(biāo)識(shí)后,向所述當(dāng)前節(jié)點(diǎn)的下游全部子節(jié)點(diǎn)廣播結(jié)束標(biāo)識(shí)。
步驟240:在當(dāng)前節(jié)點(diǎn)存在下一個(gè)節(jié)點(diǎn)的情況下,將下一個(gè)節(jié)點(diǎn)確定為當(dāng)前節(jié)點(diǎn),返回執(zhí)行步驟220。
步驟250:在當(dāng)前節(jié)點(diǎn)為最后一個(gè)節(jié)點(diǎn)的情況下,所述根節(jié)點(diǎn)向所述應(yīng)用管理模塊返回執(zhí)行完畢信息,從而等待所述應(yīng)用管理模塊回收各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。
本實(shí)施例中,在最后一個(gè)節(jié)點(diǎn)接收到上游全部節(jié)點(diǎn)廣播的結(jié)束標(biāo)識(shí)后,可以通知根節(jié)點(diǎn),然后,所述根節(jié)點(diǎn)向所述應(yīng)用管理模塊返回執(zhí)行完畢信息,從而等待所述應(yīng)用管理模塊回收各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。
通過(guò)本實(shí)施例,對(duì)應(yīng)用的結(jié)束流程進(jìn)行改造,使得任意節(jié)點(diǎn)在處理完畢其內(nèi)的數(shù)據(jù)以及在接收到全部上游節(jié)點(diǎn)廣播的結(jié)束標(biāo)識(shí)的情況下,需要向下游全部節(jié)點(diǎn)廣播結(jié)束標(biāo)識(shí);在全部節(jié)點(diǎn)都處理完數(shù)據(jù)后,根節(jié)點(diǎn)才可以向應(yīng)用管理模塊返回執(zhí)行完畢信息,從而等待應(yīng)用管理模塊回收各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。如此,通過(guò)結(jié)束標(biāo)識(shí)可以確保應(yīng)用的每一個(gè)節(jié)點(diǎn)內(nèi)的數(shù)據(jù)都處理完畢,保證了數(shù)據(jù)處理的完整性,避免人為確定數(shù)據(jù)處理完畢時(shí)可能遺漏的情況,而且由于沒(méi)有人為參與,因此大大減少了應(yīng)用升級(jí)所消耗的時(shí)間。
本實(shí)施例中,通過(guò)對(duì)應(yīng)用管理模塊和應(yīng)用升級(jí)流程的改造,在應(yīng)用升級(jí)時(shí),可以由應(yīng)用管理模塊和應(yīng)用本身自動(dòng)地完成升級(jí),整個(gè)過(guò)程無(wú)需人工參與,實(shí)現(xiàn)了減少應(yīng)用升級(jí)所需時(shí)間的目的。
在本申請(qǐng)所述的關(guān)閉應(yīng)用方法可以應(yīng)用在jstorm場(chǎng)景中,即所述應(yīng)用包括jstorm應(yīng)用,而對(duì)應(yīng)的,所述進(jìn)程包括jvm進(jìn)程。
與前述應(yīng)用升級(jí)方法實(shí)施例相對(duì)應(yīng),本申請(qǐng)還提供了一種應(yīng)用升級(jí)裝置的實(shí)施例。
本申請(qǐng)應(yīng)用升級(jí)裝置的實(shí)施例可以應(yīng)用在應(yīng)用管理模塊。裝置實(shí)施例可以通過(guò)軟件實(shí)現(xiàn),也可以通過(guò)硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,作為一個(gè)邏輯意義上的裝置,是通過(guò)其所在設(shè)備的處理器將非易失性存儲(chǔ)器中對(duì)應(yīng)的計(jì)算機(jī)程序指令讀取到內(nèi)存中運(yùn)行形成的。從硬件層面而言,如圖6所示,為本申請(qǐng)應(yīng)用升級(jí)裝置所在設(shè)備的一種硬件結(jié)構(gòu)圖,除了圖6所示的處理器、網(wǎng)絡(luò)接口、內(nèi)存以及非易失性存儲(chǔ)器之外,實(shí)施例中裝置所在的設(shè)備通常根據(jù)該應(yīng)用升級(jí)的實(shí)際功能,還可以包括其他硬件,對(duì)此不再贅述。
參見(jiàn)圖7,為本申請(qǐng)一實(shí)施例提供的應(yīng)用升級(jí)裝置的模塊圖,該實(shí)施例從應(yīng)用管理模塊側(cè)進(jìn)行描述,所述裝置包括:獲取單元310、調(diào)用單元320、回收單元330和啟動(dòng)單元340。
其中,獲取單元310,獲取被提交應(yīng)用的應(yīng)用名;
調(diào)用單元320,在所述被提交應(yīng)用與已存在的應(yīng)用重名的情況下,觸發(fā)預(yù)設(shè)的關(guān)閉命令,從而調(diào)用所述已存在的應(yīng)用中各節(jié)點(diǎn)的結(jié)束函數(shù);
回收單元330,在接收到所述已存在的應(yīng)用返回的執(zhí)行完畢信息的情況下,回收所述各節(jié)點(diǎn)占用的進(jìn)程;
啟動(dòng)單元340,在回收完畢的情況下,觸發(fā)預(yù)設(shè)的啟動(dòng)命令,從而啟動(dòng)所述被提交應(yīng)用中各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。
在一個(gè)可選的實(shí)現(xiàn)方式中:
所述調(diào)用單元320,具體包括:
判斷子單元,在所述被提交應(yīng)用與已存在的應(yīng)用重名的情況下,判斷是否接收到提交的針對(duì)所述已存在的應(yīng)用的升級(jí)命令;
調(diào)用子單元,在接收到提交的針對(duì)所述已存在的應(yīng)用的升級(jí)命令的情況下,觸發(fā)預(yù)設(shè)的關(guān)閉命令,從而調(diào)用所述已存在的應(yīng)用中各節(jié)點(diǎn)的結(jié)束函數(shù)。
在一個(gè)可選的實(shí)現(xiàn)方式中:
所述應(yīng)用包括jstorm應(yīng)用;
所述進(jìn)程包括jvm進(jìn)程。
與前述關(guān)閉應(yīng)用方法實(shí)施例相對(duì)應(yīng),本申請(qǐng)還提供了一種關(guān)閉應(yīng)用裝置的實(shí)施例。
本申請(qǐng)關(guān)閉應(yīng)用裝置的實(shí)施例可以應(yīng)用在待升級(jí)的應(yīng)用。裝置實(shí)施例可以通過(guò)軟件實(shí)現(xiàn),也可以通過(guò)硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,作為一個(gè)邏輯意義上的裝置,是通過(guò)其所在設(shè)備的處理器將非易失性存儲(chǔ)器中對(duì)應(yīng)的計(jì)算機(jī)程序指令讀取到內(nèi)存中運(yùn)行形成的。從硬件層面而言,如圖8所示,為本申請(qǐng)關(guān)閉應(yīng)用裝置所在設(shè)備的一種硬件結(jié)構(gòu)圖,除了圖8所示的處理器、網(wǎng)絡(luò)接口、內(nèi)存以及非易失性存儲(chǔ)器之外,實(shí)施例中裝置所在的設(shè)備通常根據(jù)該關(guān)閉應(yīng)用的實(shí)際功能,還可以包括其他硬件,對(duì)此不再贅述。
參見(jiàn)圖9,為本申請(qǐng)一實(shí)施例提供的關(guān)閉應(yīng)用裝置的模塊圖,該實(shí)施例從待升級(jí)的應(yīng)用側(cè)進(jìn)行描述,所述裝置包括:停止接收單元410、處理數(shù)據(jù)單元420、廣播標(biāo)識(shí)單元430、控制單元440和返回信息單元450。
其中,停止接收單元410,在被應(yīng)用管理模塊調(diào)用節(jié)點(diǎn)的結(jié)束函數(shù)后,停止根節(jié)點(diǎn)接收回流的數(shù)據(jù),并將所述根節(jié)點(diǎn)確定為當(dāng)前節(jié)點(diǎn);
處理數(shù)據(jù)單元420,處理當(dāng)前節(jié)點(diǎn)內(nèi)的數(shù)據(jù)并發(fā)送到下游節(jié)點(diǎn);
廣播標(biāo)識(shí)單元430,在當(dāng)前節(jié)點(diǎn)內(nèi)的數(shù)據(jù)處理完畢并且接收到上游全部節(jié)點(diǎn)廣播的結(jié)束標(biāo)識(shí)后,向所述當(dāng)前節(jié)點(diǎn)的下游全部子節(jié)點(diǎn)廣播結(jié)束標(biāo)識(shí);
控制單元440,在當(dāng)前節(jié)點(diǎn)存在下一個(gè)節(jié)點(diǎn)的情況下,將下一個(gè)節(jié)點(diǎn)確定為當(dāng)前節(jié)點(diǎn)后輸入到所述處理數(shù)據(jù)單元中;
返回信息單元450,在當(dāng)前節(jié)點(diǎn)為最后一個(gè)節(jié)點(diǎn)的情況下,所述根節(jié)點(diǎn)向所述應(yīng)用管理模塊返回執(zhí)行完畢信息,從而等待所述應(yīng)用管理模塊回收各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。
在一個(gè)可選的實(shí)現(xiàn)方式中:
所述應(yīng)用包括jstorm應(yīng)用;
所述進(jìn)程包括jvm進(jìn)程。
綜上所述,本申請(qǐng)實(shí)施例中,對(duì)應(yīng)用管理模塊(topologymanager,tm)進(jìn)行改造,使得所述應(yīng)用管理模塊可以允許用戶提交重名的應(yīng)用。如此,在所述應(yīng)用管理模塊檢測(cè)到用戶提交了重名應(yīng)用時(shí),可以自動(dòng)地對(duì)已存在的重名應(yīng)用進(jìn)行升級(jí)。這樣,避免了現(xiàn)有技術(shù)中應(yīng)用升級(jí)過(guò)程中需要人為參與所造成的耗時(shí)較多的問(wèn)題,從而大大減少了應(yīng)用升級(jí)所消耗的時(shí)間。本申請(qǐng)實(shí)施例還對(duì)應(yīng)用的結(jié)束流程進(jìn)行改造,使得任意節(jié)點(diǎn)在處理完畢其內(nèi)的數(shù)據(jù)以及在接收到全部上游節(jié)點(diǎn)廣播的結(jié)束標(biāo)識(shí)的情況下,需要向下游全部節(jié)點(diǎn)廣播結(jié)束標(biāo)識(shí);在全部節(jié)點(diǎn)都處理完數(shù)據(jù)后,根節(jié)點(diǎn)才可以向應(yīng)用管理模塊返回執(zhí)行完畢信息,從而等待應(yīng)用管理模塊回收各節(jié)點(diǎn)對(duì)應(yīng)的進(jìn)程。如此,通過(guò)結(jié)束標(biāo)識(shí)可以確保應(yīng)用的每一個(gè)節(jié)點(diǎn)內(nèi)的數(shù)據(jù)都處理完畢,保證了數(shù)據(jù)處理的完整性,避免人為確定數(shù)據(jù)處理完畢時(shí)可能遺漏的情況,而且由于沒(méi)有人為參與,因此大大減少了應(yīng)用升級(jí)所消耗的時(shí)間。
上述裝置中各個(gè)單元的功能和作用的實(shí)現(xiàn)過(guò)程具體詳見(jiàn)上述方法中對(duì)應(yīng)步驟的實(shí)現(xiàn)過(guò)程,在此不再贅述。
對(duì)于裝置實(shí)施例而言,由于其基本對(duì)應(yīng)于方法實(shí)施例,所以相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本申請(qǐng)方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。
本領(lǐng)域技術(shù)人員在考慮說(shuō)明書及實(shí)踐這里公開(kāi)的發(fā)明后,將容易想到本申請(qǐng)的其它實(shí)施方案。本申請(qǐng)旨在涵蓋本申請(qǐng)的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本申請(qǐng)的一般性原理并包括本申請(qǐng)未公開(kāi)的本技術(shù)領(lǐng)域中的公知常識(shí)或慣用技術(shù)手段。說(shuō)明書和實(shí)施例僅被視為示例性的,本申請(qǐng)的真正范圍和精神由下面的權(quán)利要求指出。
應(yīng)當(dāng)理解的是,本申請(qǐng)并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本申請(qǐng)的范圍僅由所附的權(quán)利要求來(lái)限制。