本發(fā)明涉及實例系統(tǒng)及實例系統(tǒng)中代理的升級方法。
背景技術(shù):
某種操作系統(tǒng)(例如安卓操作系統(tǒng))加上運行該操作系統(tǒng)所需的必要硬件(例如處理器、存儲器等),可以視為一個實例系統(tǒng),實例系統(tǒng)中可以運行各種應(yīng)用軟件(程序)。將若干個實例系統(tǒng)按照一定的架構(gòu)方式(例如分布式)集中管理,可以形成云系統(tǒng)。在云系統(tǒng)中,可以設(shè)置一個或多個控制節(jié)點(例如具有X86架構(gòu)的服務(wù)器)來管理不同的實例系統(tǒng)。用戶通過客戶端(例如安裝在個人電腦或移動終端上的專用軟件)訪問云系統(tǒng),獲取云系統(tǒng)提供的服務(wù)。
在各個實例系統(tǒng)中,需要設(shè)置一個具有實例系統(tǒng)中的操作系統(tǒng)根(root)權(quán)限的代理(此處的代理是英文詞agent的翻譯,指具有某種功能、能夠獨立運行的某個硬件或軟件)來管理實例系統(tǒng)為用戶提供的服務(wù),代理自身也需要不斷進行升級。
目前代理的升級方式都需要停止服務(wù)進程一段時間,在此期間運行一個升級程序覆蓋已有版本,隨后重新啟動實例系統(tǒng)或者重新啟動服務(wù)。對云系統(tǒng)而言,這就意味著在較長時間里用戶都不能正常獲取服務(wù),用戶體驗差,很可能導(dǎo)致用戶流失。另一方面,出于代理不間斷提供服務(wù)的要求,代理往往被設(shè)置為自動重啟的系統(tǒng)服務(wù),如果其對應(yīng)的進程被殺掉實例系統(tǒng)中的操作系統(tǒng)會立即重啟,這種設(shè)置也不符合安裝程序停止所有相關(guān)服務(wù)進程的前提。此外,對于安卓系統(tǒng)而言,盡管安卓系統(tǒng)允許進程在運行時其自身的程序文件被覆蓋,但由于安卓系統(tǒng)從性能角度出發(fā)默認沒有開啟SWAP分區(qū),不支持物理內(nèi)存到閃存的頁交換功能,造成進程中大量的數(shù)據(jù)段無法交換到閃存中,只能侵占物理內(nèi)存。安卓系統(tǒng)較之常規(guī)的Linux系統(tǒng),在物理內(nèi)存緊張時更容易導(dǎo)致進程的很多代碼所在的物理頁面被釋放,等需要時再重新從代碼文件中讀入內(nèi)存。這種情況下升級程序強行覆蓋代碼文件,如果在覆蓋過程中代理重新讀入代碼,會造成數(shù)據(jù)不一致,后果無法預(yù)料,輕則進程崩潰,重則對用戶提供錯誤的業(yè)務(wù)邏輯,破壞整個云系統(tǒng)。
在說明書“背景技術(shù)”部分公開的內(nèi)容,有助于本領(lǐng)域技術(shù)人員理解本發(fā)明的技術(shù)方案,但不應(yīng)據(jù)此認為這些內(nèi)容一定屬于現(xiàn)有技術(shù)或公知常識。
技術(shù)實現(xiàn)要素:
為了克服“背景技術(shù)”部分所反映的缺陷,兼顧實例系統(tǒng)中操作系統(tǒng)的代理升級時的速度與數(shù)據(jù)一致性,本發(fā)明提供實例系統(tǒng)及實例系統(tǒng)中代理的升級方法。
實例系統(tǒng),包括具有實例系統(tǒng)中的操作系統(tǒng)根權(quán)限的代理,代理由符號鏈接指向。所謂的符號鏈接,又稱軟鏈接,是一類特殊的文件,該文件包含了另一個文件(源文件)的路徑名(絕對路徑或者相對路徑)。對符號鏈接進行讀或?qū)懖僮鲿r,操作系統(tǒng)會自動把該操作轉(zhuǎn)換為對源文件的操作,而刪除符號鏈接時操作系統(tǒng)僅刪除符號鏈接本身,不刪除源文件。
進一步的,代理能夠接收包括程序文件、安裝腳本和配置文件的升級包。
進一步的,程序文件安裝后不覆蓋實例系統(tǒng)中的操作系統(tǒng)已有的程序文件。配置文件安裝后可以覆蓋實例系統(tǒng)中的操作系統(tǒng)已有的配置文件。
進一步的,程序文件與實例系統(tǒng)中的操作系統(tǒng)已有的程序文件不重名或者與實例系統(tǒng)中的操作系統(tǒng)已有的重名程序文件路徑不同。
進一步的,升級包還包括升級實例系統(tǒng)中除代理之外的其他應(yīng)用軟件所需要的文件,安裝腳本能夠先刪除實例系統(tǒng)中的操作系統(tǒng)的舊文件,再將新安裝的文件的名稱修改為和舊文件相同。
進一步的,實例系統(tǒng)中的操作系統(tǒng)為安卓系統(tǒng)。
實例系統(tǒng)中代理的升級(此處的升級應(yīng)作廣義的理解,任何有利于代理實現(xiàn)其功能的安裝過程都應(yīng)視為升級。例如,將運行中出現(xiàn)錯誤的代理通過安裝予以恢復(fù),也應(yīng)視為升級)方法,包括如下步驟:
代理接收升級包;
代理暫時拒絕啟動服務(wù)進程的請求并關(guān)閉正在運行的服務(wù)進程;
代理運行升級包中的安裝腳本,更新配置文件和符號鏈接;
代理通知客戶端。
進一步的,代理通知客戶端后,客戶端與云系統(tǒng)重新連接。
進一步的,代理通知客戶端后,代理啟動之前被關(guān)閉的服務(wù)進程。
由于實例系統(tǒng)中代理的升級方法,是在之前所述的實例系統(tǒng)的基礎(chǔ)上實現(xiàn)的,為了避免不必要的重復(fù),實例系統(tǒng)中代理的升級方法中的一些描述進行了省略。本領(lǐng)域技術(shù)人員通過對照,能夠?qū)嵗到y(tǒng)中代理的升級方法有清晰、完整的認識。
本發(fā)明技術(shù)方案中,“包括”、“用于”等詞語應(yīng)按照開放式表達方式理解。本領(lǐng)域技術(shù)人員通過閱讀本說明書并結(jié)合現(xiàn)有技術(shù)或公知常識能夠獲知的內(nèi)容,本說明書中不再贅述。
本發(fā)明提供的實例系統(tǒng)及實例系統(tǒng)中代理的升級方法,有效解決了實例系統(tǒng)中操作系統(tǒng)的代理升級時速度與數(shù)據(jù)一致性不能兼顧的問題。在保證數(shù)據(jù)一致性的前提下,升級可以以非??斓乃俣韧瓿桑腿说闹饔^感覺而言相當于瞬間實現(xiàn)了代理升級。
附圖說明
圖1為具體實施方式中實例系統(tǒng)中代理的升級方法的流程圖。
具體實施方式
下面對本發(fā)明的實施方式進行進一步的具體說明。但應(yīng)注意,本發(fā)明的范圍并不局限于所描述的具體技術(shù)方案。任何對所描述的具體技術(shù)方案中的技術(shù)要素進行相同或等同替換獲得的技術(shù)方案或本領(lǐng)域技術(shù)人員在所描述的具體技術(shù)方案的基礎(chǔ)上不經(jīng)過創(chuàng)造性勞動就可以獲得的技術(shù)方案,都應(yīng)當視為落入本發(fā)明的保護范圍。
某種操作系統(tǒng)加上運行該操作系統(tǒng)所需的必要硬件(例如處理器、存儲器等),可以構(gòu)成一個實例系統(tǒng)。實例系統(tǒng)中的操作系統(tǒng),可以采用安卓(Android)系統(tǒng)。將若干個實例系統(tǒng)按照一定的架構(gòu)方式集中管理,可以形成云系統(tǒng)。在云系統(tǒng)中,可以設(shè)置一個或多個控制節(jié)點(例如具有X86架構(gòu)的服務(wù)器)來管理不同的實例系統(tǒng)。用戶通過客戶端(例如安裝在個人電腦或移動終端上的專用軟件)訪問云系統(tǒng),獲取云系統(tǒng)提供的服務(wù)。
在各個實例系統(tǒng)中,需要設(shè)置一個具有Android系統(tǒng)root權(quán)限的代理(agent)來管理實例系統(tǒng)為用戶提供的服務(wù)。agent較為簡單的實現(xiàn)方式是一個具有Android系統(tǒng)root權(quán)限的應(yīng)用軟件,該應(yīng)用軟件在Android系統(tǒng)啟動時由init.rc腳本指定為系統(tǒng)服務(wù),自動啟動,并且指定如果該應(yīng)用軟件對應(yīng)的進程被殺掉該應(yīng)用軟件能夠立即重新運行。agent由符號鏈接指向,init.rc腳本中指定agent所在的文件是符號鏈接。除了agent,Android系統(tǒng)中的其他應(yīng)用軟件也可以由相應(yīng)的符號鏈接指向。
agent在運行過程中,收到控制節(jié)點發(fā)出的升級請求后,從控制節(jié)點接收升級包。升級包中包括程序文件、安裝腳本和配置文件三類文件,一般為壓縮包。程序文件是能夠運行的程序,配置文件中記載了運行程序文件時必要的配置信息。上述程序文件和配置文件,指升級agent本身所需要的程序文件和配置文件。安裝腳本能夠獨立運行,在Android系統(tǒng)中安裝程序文件和配置文件。安裝腳本可以只有一個,而程序文件和配置文件往往都是多個。除此以外,升級包中還可以包括升級除agent之外的其他應(yīng)用軟件所需要的文件。
agent對升級包進行MD5(Message-Digest Algorithm 5)等校驗,確認升級包的內(nèi)容無誤后,將升級包存儲到指定的文件目錄下并解壓(如果升級包是壓縮包的話)。此時agent暫時拒絕啟動服務(wù)進程的請求并關(guān)閉正在運行的服務(wù)進程,然后運行安裝腳本。如果將agent本身也視為一種用戶服務(wù)的話,上述agent暫時拒絕請求并關(guān)閉的服務(wù)進程指的是由除agent之外的其他應(yīng)用軟件所提供的服務(wù)。在Android系統(tǒng)中,agent已經(jīng)被設(shè)置為如果對應(yīng)的進程被殺掉能夠立即重新運行,不可能實現(xiàn)真正意義上的關(guān)閉。
安裝腳本可將升級包中的程序文件和配置文件存儲到指定的位置(例如指定的文件目錄下)。在升級包的制作過程中,嚴格要求包中的程序文件或者不能和Android系統(tǒng)中已有的程序文件重名,或者和Android系統(tǒng)中已有的程序文件重名,但路徑不同。如果升級包中的程序文件和Android系統(tǒng)中已有的程序文件執(zhí)行的功能相同,可以將版本號等信息作為文件名的一部分加以區(qū)別,或者通過父目錄加以區(qū)別。這樣,新安裝的程序文件不會覆蓋已有的程序文件。對于配置文件,則無此要求,新安裝的配置文件可以覆蓋Android系統(tǒng)中已有的配置文件(即更新配置文件)。此外,安裝腳本還會修改agent的符號鏈接,使其指向新安裝的程序文件(即更新符號鏈接)。
升級包中還可以包括升級除agent之外的其他應(yīng)用軟件所需要的文件,這些文件的升級方法比較靈活??梢杂砂惭b腳本更新符號鏈接(如果對應(yīng)的應(yīng)用軟件也由符號鏈接指向),也可以由安裝腳本用新文件覆蓋Android系統(tǒng)中的舊文件,還可以由安裝腳本先刪除Android系統(tǒng)中的舊文件,再將新安裝的文件的名稱修改為和舊文件相同。
agent可以設(shè)置為監(jiān)控安裝腳本的運行情況。如果安裝腳本運行成功,agent通知客戶端將要重新啟動,然后自動退出。agent重啟后,啟動之前被關(guān)閉的服務(wù)進程,繼續(xù)對外提供服務(wù)。而客戶端收到agent重啟的通知后,如果發(fā)現(xiàn)相應(yīng)的socket(當網(wǎng)絡(luò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)交換時,這個連接的一端稱為一個socket)關(guān)閉,則立即嘗試反復(fù)與云系統(tǒng)重新連接(直到正常建立連接為止)。
以上所述的技術(shù)方案中,安裝腳本的運行時間非常短,利用毫秒級的時間即可完成。配置文件在進程剛啟動時加載到內(nèi)存,解析轉(zhuǎn)換為內(nèi)存中的變量后就被釋放,不會再次讀入內(nèi)存。因此,對配置文件的更新不會出現(xiàn)同時又被agent等進程讀入導(dǎo)致數(shù)據(jù)不一致的情況。符號鏈接只是在進程剛啟動時被讀取,升級時不會被再次訪問,更新符號鏈接也不存在數(shù)據(jù)不一致的可能性。通過更新符號鏈接來指向新安裝的程序文件,避免了進程運行中更改其自身文件所帶來的隱患。安裝新的程序文件時不影響已有agent的運行,在安裝完成后更新符號鏈接,agent進程主動退出,可以實現(xiàn)切換到升級后的agent(基于agent在Android系統(tǒng)中能自動重啟)。agent在退出前通知客戶端,這樣客戶端可以立即反復(fù)嘗試與云系統(tǒng)重新連接。在保證數(shù)據(jù)一致性的前提下,就人的主觀感覺而言,agent的升級幾乎是瞬間完成的,實例系統(tǒng)提供的服務(wù)也幾乎是不間斷的,用戶體驗較好。
此外,本發(fā)明技術(shù)方案中的升級一詞,應(yīng)當作廣義的理解,任何有利于agent實現(xiàn)其功能的安裝過程都應(yīng)視為升級。通常情況下,升級是從舊版本到新版本的過程,版本號不斷提高。但在一些特殊情況下,例如將運行中出現(xiàn)錯誤的agent通過安裝予以恢復(fù),agent的版本號可能下降甚至退回最初始的版本,但也應(yīng)視為升級。
基于以上所述的技術(shù)方案,可以實現(xiàn)如圖1所示的實例系統(tǒng)中代理的升級方法,該方法包括以下步驟:
S101:agent接收升級包;
S102:agent暫時拒絕啟動服務(wù)進程的請求并關(guān)閉正在運行的服務(wù)進程;
S103:agent運行升級包中的安裝腳本,更新配置文件和符號鏈接;
S104:agent通知客戶端。
agent通知客戶端后,還可以有如下平行的步驟,一是客戶端與云系統(tǒng)重新連接,二是agent通知客戶端后自動退出,重新啟動,并啟動之前被關(guān)閉的服務(wù)進程。
本領(lǐng)域技術(shù)人員在以上所描述的具體技術(shù)方案的基礎(chǔ)上,完全可以構(gòu)造出其他方案。例如,實例系統(tǒng)中的操作系統(tǒng),可以采取其他操作系統(tǒng)。實例系統(tǒng)中代理的升級方法中,如果有的云系統(tǒng)對應(yīng)的客戶端本身就設(shè)置了隨時監(jiān)控與云系統(tǒng)的連接狀態(tài)如果斷開則反復(fù)重新連接的功能,則刪除步驟S104。在此不一一列舉。