本申請涉及互聯(lián)網技術領域,尤其涉及應用啟動方法、裝置及服務器。
背景技術:
應用是部署在服務器上,并用于支持業(yè)務運行的系統(tǒng),一個業(yè)務可能包括多個應用,而每個應用也可能包含多個模塊。
現(xiàn)有技術中,在使用虛擬機(kernel-basedvirtualmachine,kvm)模式啟動應用時,需要將整個應用的所有模塊全部啟動。
但是,當應用體量很大時,由于該應用包含的模塊較多,則該應用啟動會比較慢,并且若其中有一個模塊未能啟動成功,則將導致整個應用啟動異常。
技術實現(xiàn)要素:
本申請?zhí)峁脝臃椒?、裝置及服務器,以解決現(xiàn)有技術中當應用體量很大時,容易導致整個應用啟動異常的問題。
根據(jù)本申請實施例的第一方面,提供一種應用啟動方法,該方法應用于服務器上,包括:
接收應用啟動請求;
根據(jù)所述應用啟動請求確定對應的起始模塊;
根據(jù)啟動依賴樹確定所述起始模塊之后的各個依賴模塊;
啟動所述起始模塊和所述各個依賴模塊。
根據(jù)本申請實施例的第二方面,提供一種應用啟動裝置,所述裝置應用 于服務器上,包括:
接收單元,用于接收應用啟動請求;
第一確定單元,用于根據(jù)所述應用啟動請求確定對應的起始模塊;
第二確定單元,用于根據(jù)啟動依賴樹確定所述起始模塊之后的各個依賴模塊;
啟動單元,用于啟動所述起始模塊和所述各個依賴模塊。
根據(jù)本申請實施例的第三方面,提供一種服務器,所述服務器包括:
處理器;用于存儲所述處理器可執(zhí)行指令的存儲器;
其中,所述處理器被配置為:
接收應用啟動請求;
根據(jù)所述應用啟動請求確定對應的起始模塊;
根據(jù)啟動依賴樹確定所述起始模塊之后的各個依賴模塊;
啟動所述起始模塊和所述各個依賴模塊。
應用本申請實施例,通過接收應用啟動請求,根據(jù)應用啟動請求確定對應的起始模塊,根據(jù)啟動依賴樹確定起始模塊之后的各個依賴模塊,啟動起始模塊和該起始模塊之后的各個依賴模塊,使得服務器在保證應用正常啟動的前提下,所需要啟動的模塊數(shù)量達到最小,從而實現(xiàn)了應用最小化啟動,節(jié)省了啟動成本和啟動時間,還增加了應用的穩(wěn)定性。
附圖說明
圖1a為本申請實施例的應用啟動場景示意圖;
圖1b為本申請實施例的應用啟動的一示意圖;
圖1c為本申請實施例的應用啟動的另一示意圖;
圖2為本申請應用啟動方法的一個實施例流程圖;
圖3為本申請應用啟動裝置所在設備的一種硬件結構圖;
圖4為本申請應用啟動裝置的一個實施例框圖。
具體實施方式
這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本申請相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
在本申請使用的術語是僅僅出于描述特定實施例的目的,而非旨在限制本申請。在本申請和所附權利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指并包含一個或多個相關聯(lián)的列出項目的任何或所有可能組合。
應當理解,盡管在本申請可能采用術語第一、第二、第三等來描述各種信息,但這些信息不應限于這些術語。這些術語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“響應于確定”。
參見圖1a,為本申請實施例的應用啟動場景示意圖:
圖1a場景中包括:分層設計的各個應用層的所有模塊。其中,分層設計的各個應用層包括自頂向下的展示層、業(yè)務層、服務層和數(shù)據(jù)交互層。展示層包括3個模塊,分別是:展示功能1模塊、展示功能2模塊、展示功能3模塊;業(yè)務層包括4個模塊,分別是:業(yè)務1模塊、業(yè)務2模塊、業(yè)務3模塊和業(yè)務4模塊;服務層包括2個模塊,分別是基礎服務1模塊和基礎服務2模塊;數(shù)據(jù)交換層包括1個模塊,該模塊用于數(shù)據(jù)庫訪問、以及外圍應用數(shù)據(jù)引入。
本申請實施例中,接收到應用啟動請求后,可以無需啟動圖1a中的所有模塊,而是只啟動與應用啟動請求對應的起始模塊、以及該起始模塊之后的各個依賴模塊。其中,依賴模塊指的是與起始模塊具有依賴關系的模塊。這里的依 賴關系可以是直接或間接的依賴關系。
比如:需要使用業(yè)務1時,則只需要啟動業(yè)務1模塊、基礎服務1模塊、以及用于數(shù)據(jù)庫訪問、以及外圍應用數(shù)據(jù)引入的模塊即可,如圖1b中的陰影部分。其中,業(yè)務1模塊與基礎服務1模塊有直接的依賴關系;業(yè)務1模塊于用于數(shù)據(jù)庫訪問、以及外圍應用數(shù)據(jù)引入的模塊有間接的依賴關系。
又比如:需要使用展示功能3時,則只需要啟動展示功能3模塊、業(yè)務3模塊和、業(yè)務4模塊、基礎服務2模塊、以及用于數(shù)據(jù)庫訪問、以及外圍應用數(shù)據(jù)引入的模塊即可,如圖1c中的陰影部分。
上述只啟動起始模塊、以及與該起始模塊之后的各個依賴模塊,表明實現(xiàn)了應用的最小化啟動。其中,最小化啟動指定的是保證應用正常啟動的前提下,所需要啟動的模塊數(shù)量達到最小。也就是說起始模塊、以及該起始模塊之后的各個依賴模塊是最小化啟動中的必須啟動的模塊。
由此可見,本申請可以實現(xiàn)最小化啟動,這樣可以節(jié)省啟動成本和啟動時間,從而增加了應用的穩(wěn)定性。
另外,本申請中涉及到的應用指的是軟件領域內,可以部署在服務器上,能夠獨立運行并提供服務的一組源碼、數(shù)據(jù)和配置文件的集合。其中,服務器指的是已經運行基本操作系統(tǒng)的物理機。
下面對本申請實施例進行詳細說明。
參見圖2,為本申請應用啟動方法的一個實施例的流程圖,該方法可以應用于服務器上,包括以下步驟:
步驟210:接收應用啟動請求。
本申請實施例中,應用啟動請求可以是測試人員發(fā)起的啟動請求,也可以是客戶端向服務器發(fā)送的啟動請求。
步驟220:根據(jù)應用啟動請求確定對應的起始模塊。
本申請實施例中,服務器接收到應用啟動請求后,不是啟動各個應用層中的所有模塊,而是先確定該應用啟動請求對應的起始模塊。
比如:如圖1b所示,接收到的應用啟動請求是需要使用業(yè)務1時,則業(yè)務 1模塊為起始模塊。
至于如何實現(xiàn)根據(jù)應用啟動請求確定對應的起始模塊,其包括但不限于以下這種方式:
根據(jù)匹配應用類標識或應用包標識來確定,具體包括:
(1)根據(jù)應用啟動請求確定對應的應用類標識或應用包標識。
本申請實施例中,若應用啟動請求攜帶有應用類標識或應用包標識,可以從應用啟動請求中解析得到其對應的應用類標識或應用包標識。
其中,應用類標識可以是啟動類的類名,應用包標識可以是啟動類的包名。
另外,還可以先確定接收到應用啟動請求的啟動入口,再將該啟動入口的類名確定為應用啟動請求對應的應用類標識、或者將該啟動入口的包名確定為應用啟動請求對應的應用包標識。
(2)獲取與應用類標識或應用包標識匹配的模塊集合。
本申請實施例中,可以通過貪婪算法或最長前綴匹配算法獲取與應用類標識或應用包標識匹配的模塊集合,但也不限于這兩種算法。
(3)若模塊集合中包括一個模塊,則將模塊集合包括的模塊確定為起始模塊。
(4)若模塊集合中包括至少兩個模塊,則確定模塊集合中的各個模塊的依賴關系,并根據(jù)各個模塊的依賴關系確定起始模塊。
在一個例子中,通過最長前綴匹配算法獲取應用包標識匹配的模塊集合時,其過程可以包括:
(1)確定應用包標識為:abcdefg。并且,服務器提供的與應用包標識進行匹配的包名集合為:{abc;abcf;abcdefgh;abcdefgi;abcdefk}。
(2)匹配出的模塊集合為{abcdefgh;abcdefgi}。
(3)檢測abcdefgh、abcdefgi所在的模塊,得到了abcdefgh所在的模塊a和abcdefgi所在的模塊b;
(4)檢測模塊a和模塊b的模塊依賴關系。
(5)根據(jù)模塊a和模塊b的模塊依賴關系確定起始模塊。
如果模塊a依賴模塊b,那么從模塊a開始啟動,則模塊a為起始模塊;如果模塊b依賴模塊a,那么從模塊b開始啟動,則模塊b為起始模塊,即從依賴關系中的頂層模塊開始啟動。
步驟230:根據(jù)啟動依賴樹確定起始模塊之后的各個依賴模塊。其中,該啟動依賴樹可以指的是系統(tǒng)內存中的一個多叉樹,用于指示系統(tǒng)中各個模塊之間的依賴關系。
本申請實施例中,同一個應用的各個模塊之間往往具有依賴關系。具體來說,在應用正常啟動和提供服務的過程中,處于不同應用層的模塊具有執(zhí)行上的依賴關系。比如:展示層中的展示功能模塊所展示的內容,需要依賴數(shù)據(jù)交互層從數(shù)據(jù)庫中獲取。
其中,上述依賴關系可以預先保存在啟動依賴樹中,通過起始模塊查詢該啟動依賴樹,即可獲取到與該起始模塊具有直接或間接依賴關系的各個依賴模塊。
比如:如圖1b所示,業(yè)務1模塊依賴于基礎服務1模塊,而基礎服務1模塊依賴于用于數(shù)據(jù)庫訪問、以及外圍應用數(shù)據(jù)引入的模塊,故此業(yè)務1模塊之后的依賴模塊分別為:基礎服務1模塊和用于數(shù)據(jù)庫訪問、以及外圍應用數(shù)據(jù)引入的模塊。
至于如何實現(xiàn)根據(jù)啟動依賴樹確定起始模塊之后的各個依賴模塊,其包括但不限于以下這種方式:
根據(jù)啟動依賴樹中的模塊依賴關系來確定,具體包括:
(1)獲取起始模塊所處于的應用層。
(2)根據(jù)啟動依賴樹中的模塊依賴關系,確定起始模塊所處于的應用層之外的各個應用層中與該起始模塊具有直接或間接的模塊依賴關系的依賴模塊。
本申請實施例中,啟動依賴樹可以包括系統(tǒng)中分層設計的各個應用層的所有模塊之間的模塊依賴關系。
并且,啟動依賴樹中的模塊依賴關系來源可以來自于系統(tǒng)中每個模塊的配置文件,具體包括:
(1)獲取系統(tǒng)中每個模塊的配置文件,該配置文件包括與自身模塊對應的模塊依賴關系。
(2)根據(jù)各個配置文件中的模塊依賴關系,得到系統(tǒng)中所有模塊之間的模塊依賴關系,并將系統(tǒng)中所有模塊之間的模塊依賴關系保存至啟動依賴樹中。
上述方式可以根據(jù)啟動依賴樹中的模塊依賴關系直接得到起始模塊之后的各個依賴模塊,這樣可以提高最小化應用啟動的效率,還可以提高應用的穩(wěn)定性。
步驟240:啟動起始模塊和該起始模塊之后的各個依賴模塊。
本申請實施例中,若啟動依賴樹包括系統(tǒng)中分層設計的各個應用層的所有模塊之間的模塊依賴關系,服務器可以根據(jù)啟動依賴樹中的模塊依賴關系獲取起始模塊和各個依賴模塊的啟動次序,并根據(jù)該啟動次序依次啟動起始模塊和各個依賴模塊。
其中,系統(tǒng)內存中的啟動依賴樹可以包括葉子模塊和樹干模塊,在應用啟動時,一般從葉子模塊的最底層開始啟動,按照每層都要依次啟動的方式,最終啟動到樹干模塊。
比如:如圖1b所示,假設起始模塊為業(yè)務1模塊,且業(yè)務1模塊依賴于基礎服務1模塊,基礎服務1模塊依賴于用于數(shù)據(jù)庫訪問、以及外圍應用數(shù)據(jù)引入的模塊,并且,根據(jù)系統(tǒng)內存中的啟動依賴樹獲知業(yè)務1模塊是最底層葉子模塊,基礎服務1模塊是上一層葉子模塊,用于數(shù)據(jù)庫訪問、以及外圍應用數(shù)據(jù)引入的模塊是樹干模塊,因此,獲取到的啟動次序依次為:業(yè)務1模塊、基礎服務1模塊和用于數(shù)據(jù)庫訪問、以及外圍應用數(shù)據(jù)引入的模塊。
由上述實施例可見,通過接收應用啟動請求,根據(jù)應用啟動請求確定對應的起始模塊,根據(jù)啟動依賴樹確定起始模塊之后的各個依賴模塊,啟動起始模塊和該起始模塊之后的各個依賴模塊,使得服務器在保證應用正常啟動的前提下,所需要啟動的模塊數(shù)量達到最小,從而實現(xiàn)了應用最小化啟動,節(jié)省了啟動成本和啟動時間,還增加了應用的穩(wěn)定性。
與本申請應用啟動方法的實施例相對應,本申請還提供了應用啟動裝置的實施例。
本申請應用啟動裝置的實施例可以分別應用在服務器上。裝置實施例可以通過軟件實現(xiàn),也可以通過硬件或者軟硬件結合的方式實現(xiàn)。以軟件實現(xiàn)為例,作為一個邏輯意義上的裝置,是通過其所在設備的處理器將非易失性存儲器中對應的計算機程序指令讀取到內存中運行形成的。從硬件層面而言,如圖3所示,為本申請應用啟動裝置所在設備的一種硬件結構圖,除了圖3所示的處理器、內存、網絡接口、以及非易失性存儲器之外,實施例中裝置所在的設備通常根據(jù)該設備的實際功能,還可以包括其他硬件,如對于終端來說,可能包括攝像頭、觸摸屏子、通信組件等,對于服務器來說,可能包括負責處理報文的轉發(fā)芯片等等。
參見圖4,為本申請應用啟動裝置的一個實施例框圖,該應用啟動裝置可以應用在服務器上,并可以用于執(zhí)行圖2所示的應用啟動方法,該裝置包括:接收單元41、第一確定單元42、第二確定單元43和啟動單元44。
其中,接收單元41,用于接收應用啟動請求;
第一確定單元42,用于根據(jù)所述應用啟動請求確定對應的起始模塊;
第二確定單元43,用于根據(jù)啟動依賴樹確定所述起始模塊之后的各個依賴模塊;
啟動單元44,用于啟動所述起始模塊和所述各個依賴模塊。
在一個可選的實現(xiàn)方式中:第一確定單元42可以包括:第一確定子單元、第一獲取子單元、第二確定子單元和第三確定子單元(圖4中未標出)。
其中,第一確定子單元,用于根據(jù)所述應用啟動請求確定對應的應用類標識或應用包標識;
第一獲取子單元,用于獲取與所述應用類標識或所述應用包標識匹配的模塊集合;
第二確定子單元,用于若所述模塊集合中包括一個模塊,則將所述模塊集合包括的模塊確定為所述起始模塊;
第三確定子單元,用于若所述模塊集合中包括至少兩個模塊,則確定所述模塊集合中的各個模塊的依賴關系,并根據(jù)所述各個模塊的依賴關系確定所述起始模塊。
在另一個可選的實現(xiàn)方式中:第一確定子單元包括確定模塊(圖4中未標出)。
其中,確定模塊,用于確定接收到所述應用啟動請求的啟動入口,并將所述啟動入口的類名確定為所述應用啟動請求對應的應用類標識、或者將所述啟動入口的包名確定為所述應用啟動請求對應的應用包標識。
在另一個可選的實現(xiàn)方式中:第一獲取子單元可以包括:獲取模塊(圖4中未標出)。
其中,獲取模塊,用于獲取模塊,用于通過貪婪算法或最長前綴匹配算法獲取與所述應用類標識或所述應用包標識匹配的模塊集合。
在另一個可選的實現(xiàn)方式中:所述啟動依賴樹包括系統(tǒng)中分層設計的各個應用層的所有模塊之間的模塊依賴關系;所述第二確定單元43包括:第二獲取子單元和第四確定子單元(圖4中未標出)。
其中,第二獲取子單元,用于獲取所述起始模塊所處于的應用層;
第四確定子單元,用于根據(jù)所述啟動依賴樹中的模塊依賴關系,確定所述起始模塊所處于的應用層之外的各個應用層中與所述起始模塊具有直接或間接的模塊依賴關系的依賴模塊。
在另一個可選的實現(xiàn)方式中:所述分層設計的各個應用層包括自頂向下的展示層、業(yè)務層、服務層和數(shù)據(jù)交互層。
在另一個可選的實現(xiàn)方式中:所述啟動單元44包括:第三獲取子單元和第五確定子單元(圖4中未標出)。
其中,第三獲取子單元,用于根據(jù)所述啟動依賴樹中的模塊依賴關系獲取所述起始模塊和所述各個依賴模塊的啟動次序;
第五確定子單元,用于根據(jù)所述啟動次序依次啟動所述起始模塊和所述各個依賴模塊。
在另一個可選的實現(xiàn)方式中:所述裝置還包括:獲取單元和保存單元(圖4中未標出)。
獲取單元,用于獲取系統(tǒng)中每個模塊的配置文件,所述配置文件包括與自身模塊對應的模塊依賴關系;
保存單元,用于根據(jù)各個配置文件中的模塊依賴關系,得到系統(tǒng)中所有模塊之間的模塊依賴關系,并將所述系統(tǒng)中所有模塊之間的模塊依賴關系保存至所述啟動依賴樹中。上述裝置中各個單元的功能和作用的實現(xiàn)過程具體詳見上述方法中對應步驟的實現(xiàn)過程,在此不再贅述。
對于裝置實施例而言,由于其基本對應于方法實施例,所以相關之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本請求方案的目的。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
本申請實施例還提供了一種服務器,所述服務器包括:
處理器;用于存儲所述處理器可執(zhí)行指令的存儲器;
其中,所述處理器被配置為:
接收應用啟動請求;
根據(jù)所述應用啟動請求確定對應的起始模塊;
根據(jù)啟動依賴樹確定所述起始模塊之后的各個依賴模塊;
啟動所述起始模塊和所述各個依賴模塊。
由上述實施例可見,通過接收應用啟動請求,根據(jù)應用啟動請求確定對應的起始模塊,根據(jù)啟動依賴樹確定起始模塊之后的各個依賴模塊,啟動起始模塊和該起始模塊之后的各個依賴模塊,使得服務器在保證應用正常啟動的前提下,所需要啟動的模塊數(shù)量達到最小,從而實現(xiàn)了應用最小化啟動,節(jié)省了啟動成本和啟動時間,還增加了應用的穩(wěn)定性。
本領域技術人員在考慮說明書及實踐這里公開的發(fā)明后,將容易想到本申請的其它實施方案。本申請旨在涵蓋本申請的任何變型、用途或者適應性變化,這些變型、用途或者適應性變化遵循本申請的一般性原理并包括本申請未公開的本技術領域中的公知常識或慣用技術手段。說明書和實施例僅被視為示例性的,本申請的真正范圍和精神由下面的權利要求指出。
應當理解的是,本申請并不局限于上面已經描述并在附圖中示出的精確結構,并且可以在不脫離其范圍進行各種修改和改變。本申請的范圍僅由所附的權利要求來限制。