專利名稱:數(shù)據(jù)存儲(chǔ)系統(tǒng)的智能滾動(dòng)升級(jí)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及計(jì)算機(jī),并且更具體地涉及用于在計(jì)算存儲(chǔ)環(huán)境中實(shí)施升級(jí)機(jī)制的設(shè)備、方法和計(jì)算機(jī)程序產(chǎn)品實(shí)施例。
背景技術(shù):
在當(dāng)今社會(huì)中,計(jì)算機(jī)和計(jì)算機(jī)系統(tǒng)存在于各種環(huán)境中。計(jì)算環(huán)境和網(wǎng)絡(luò)可以存在于家中、工作中、學(xué)校中、政府中以及其它環(huán)境中。計(jì)算環(huán)境越來越多地在與呈現(xiàn)給用戶的本地界面分離的ー個(gè)或多個(gè)存儲(chǔ)環(huán)境中存儲(chǔ)數(shù)據(jù)。在許多情況下,跨越廣域網(wǎng)(WAN)布置存儲(chǔ)環(huán)境,在WAN中,從/向遠(yuǎn)離主機(jī)的存儲(chǔ)系統(tǒng)接收/發(fā)送數(shù)據(jù)。在某些情況中,數(shù)據(jù)存儲(chǔ)是在本地提供的,并且也提供到遠(yuǎn)程存儲(chǔ)環(huán)境,以通過提供冗余來增強(qiáng)數(shù)據(jù)安全。在這些情況中,可以在多個(gè)位置中存儲(chǔ)多個(gè)數(shù)據(jù)實(shí)例,以提供故障安全恢復(fù)。諸如網(wǎng)絡(luò)附加存儲(chǔ)(NAS)和存儲(chǔ)區(qū)域網(wǎng)絡(luò)(SAN)的存儲(chǔ)環(huán)境允許這些實(shí)施方式, 并允許更大量存儲(chǔ)的實(shí)施和維護(hù)。SAN、NAS和類似系統(tǒng)越來越多地用于提供各種服務(wù),諸如電子郵件、數(shù)據(jù)庫、應(yīng)用和其他服務(wù)。
發(fā)明內(nèi)容
以諸如NAS、SAN和其它拓?fù)浣Y(jié)構(gòu)的形式實(shí)施的數(shù)據(jù)存儲(chǔ)系統(tǒng)周期性地需要升級(jí), 以便維持安全性、兼容性、冗余性和其他特性。用于這種系統(tǒng)的升級(jí)機(jī)制的創(chuàng)新有利于降低成本、改善帶寬和資源消耗、提高安全性等。結(jié)果,一般地,為提供提高的系統(tǒng)性能以及之前所述的其他特性,對這種升級(jí)機(jī)制的創(chuàng)新存在持續(xù)的需求??紤]到上述問題,提供了用于促進(jìn)計(jì)算存儲(chǔ)環(huán)境中的升級(jí)的各種方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品實(shí)施例。在一個(gè)這種實(shí)施例中,僅為示例,選擇了為升級(jí)窗ロ注冊至少ー個(gè)可選的升級(jí)參數(shù)的多個(gè)可用滾動(dòng)升級(jí)策略之一。對計(jì)算存儲(chǔ)環(huán)境中的至少ー個(gè)節(jié)點(diǎn)設(shè)置節(jié)點(diǎn)容限因子。節(jié)點(diǎn)停運(yùn)容限因子指定所述至少一個(gè)節(jié)點(diǎn)離線的単元的百分比,以在升級(jí)窗ロ 期間應(yīng)用所述多個(gè)可用滾動(dòng)升級(jí)策略中的所選擇的ー個(gè)。除了前述示例性實(shí)施例,還提供了各種其他方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品實(shí)施例, 并且它們提供相關(guān)的優(yōu)勢。
為了更容易理解本發(fā)明的優(yōu)點(diǎn),將通過參照在附圖中示出的具體實(shí)施例呈現(xiàn)以上簡要描述的本發(fā)明的更具體的描述。要理解,這些附圖描繪本發(fā)明的實(shí)施例,并因此不被認(rèn)為是對本發(fā)明的范圍的限制,將通過使用附圖,利用附加特性和細(xì)節(jié)描述和說明本發(fā)明,附圖中圖1是示出示例性計(jì)算存儲(chǔ)環(huán)境的一部分的框圖;圖2是示出圖1中描繪的示例性計(jì)算存儲(chǔ)環(huán)境的管理節(jié)點(diǎn)的示例性部分的框圖;圖3是示出用于執(zhí)行如確保已經(jīng)在計(jì)算存儲(chǔ)環(huán)境中的所有節(jié)點(diǎn)上發(fā)生升級(jí)的功能性的示例性包裝函數(shù)(wrapper function)的流程圖;圖4是示出圖3中描繪的包裝函數(shù)所調(diào)用的示例性升級(jí)機(jī)制的流程圖;以及圖5是示出示例性錯(cuò)誤恢復(fù)機(jī)制的流程圖。
具體實(shí)施例方式下面所示的實(shí)施例提供用于促進(jìn)計(jì)算存儲(chǔ)環(huán)境(諸如向外擴(kuò)展的網(wǎng)絡(luò)附加存儲(chǔ)拓?fù)浣Y(jié)構(gòu))中的升級(jí)的機(jī)制。在一個(gè)示例性實(shí)施例中,這些機(jī)制涉及在計(jì)算機(jī)存儲(chǔ)環(huán)境的所謂“機(jī)群(cluster)”上提供智能的、自動(dòng)的且可靠的升級(jí)(諸如代碼升級(jí))。一個(gè)這種存儲(chǔ)環(huán)境可以包括多個(gè)變化的“節(jié)點(diǎn)”。例如,ー個(gè)環(huán)境可以具有高達(dá)32個(gè)用于客戶端與存儲(chǔ)環(huán)境之間的通信的接ロ節(jié)點(diǎn)、用于執(zhí)行存儲(chǔ)活動(dòng)(諸如讀和寫活動(dòng))的存儲(chǔ)節(jié)點(diǎn)、以及用于管理存儲(chǔ)環(huán)境的各個(gè)部分的管理節(jié)點(diǎn)。環(huán)境中的每個(gè)節(jié)點(diǎn)可以包括執(zhí)行特定操作系統(tǒng) (OS)(諸如Linux )和應(yīng)用軟件的服務(wù)器,以提供各種數(shù)據(jù)存儲(chǔ)服務(wù)。下面,在圖1中進(jìn)一歩示出了這樣的環(huán)境。圖1示出了可以實(shí)施本發(fā)明和所要求保護(hù)的主題的各方面的示例性計(jì)算存儲(chǔ)環(huán)境10的一部分。所描繪的環(huán)境10構(gòu)造為兩層(two-tier)系統(tǒng),第一層包括接ロ節(jié)點(diǎn)18, 其呈現(xiàn)網(wǎng)絡(luò)文件系統(tǒng)(NFS)、超文本傳輸協(xié)議(HTTP)、通用因特網(wǎng)文件系統(tǒng)(CIFS)、以及對用戶/客戶IP網(wǎng)絡(luò)16的類似鏡像。第二層包括存儲(chǔ)節(jié)點(diǎn)36和42,其附接到存儲(chǔ)組建塊 34中的高密度存儲(chǔ)陣列。為了高可用性,兩個(gè)存儲(chǔ)節(jié)點(diǎn)36和42成對地連接到包括存儲(chǔ)組建塊34的存儲(chǔ)陣列。利用用于管理的管理網(wǎng)絡(luò)M(諸如千兆比特以太網(wǎng))并且也通過用于數(shù)據(jù)路徑的額外的網(wǎng)絡(luò)沈,將第一層接ロ節(jié)點(diǎn)18連接到第二層存儲(chǔ)節(jié)點(diǎn)36和42。諸如塊34的存儲(chǔ)組建塊可以適配為呈現(xiàn)通用并行文件系統(tǒng)(GPFS)網(wǎng)絡(luò)共享裝置 (NSD),并且接ロ節(jié)點(diǎn)18訪問這些NSD。此外,為了提供面向用戶的數(shù)據(jù)協(xié)議(諸如NFS), 每個(gè)接ロ節(jié)點(diǎn)18是GPFS機(jī)群的部分,并且也運(yùn)行CTDB (機(jī)群TDB數(shù)據(jù)庫)協(xié)議??蛇x地, 額外的網(wǎng)絡(luò)M或數(shù)據(jù)網(wǎng)絡(luò)沈的擴(kuò)展可以將包括ー個(gè)或多個(gè)TSM節(jié)點(diǎn)的Tivoli 存儲(chǔ)管理器(TSM)機(jī)群連接到存儲(chǔ)組建塊34。如所示的塊34包括兩個(gè)RAID控制器38和44,諸如高密度RAID控制器,每個(gè)RAID控制器連接到高密度盤機(jī)箱或類似的存儲(chǔ)機(jī)箱40和46。機(jī)箱40和46以及控制器38和44繼而分別連接到存儲(chǔ)節(jié)點(diǎn)36和42。管理機(jī)群包括ー個(gè)或多個(gè)管理節(jié)點(diǎn)20,每個(gè)管理節(jié)點(diǎn)20包括下面進(jìn)ー步描述其功能性的管理模塊22。最后,如所示出的,各種用戶客戶端12和14(諸如可以在Windows 或UNIX 平臺(tái)上工作的客戶端設(shè)備和機(jī)器)分別經(jīng)由網(wǎng)絡(luò)16連接到網(wǎng)絡(luò)M和/或接ロ節(jié)點(diǎn)18?,F(xiàn)在轉(zhuǎn)向圖2,示出了如之前也在圖1中示出的管理節(jié)點(diǎn)20的示例性部分50。管理節(jié)點(diǎn)20的部分50可以在計(jì)算機(jī)環(huán)境中作為其可以實(shí)施以下所示的實(shí)施例的機(jī)制的一部分而操作。然而,應(yīng)該認(rèn)識(shí)到,圖2僅是示例性的,并不意在陳述或隱含關(guān)于可以實(shí)施各種實(shí)施例的示例性方面的特定架構(gòu)的任何限制。可以對圖2中描繪的架構(gòu)進(jìn)行許多修改,而不偏離以下說明和所要求保護(hù)的主題的范圍和精神。在所示的實(shí)施例中,管理節(jié)點(diǎn)20包括處理器52和存儲(chǔ)器M,諸如隨機(jī)存取存儲(chǔ)器(RAM)。管理節(jié)點(diǎn)20可以可操作地耦合到若干組件(為了方便而沒有示出),包括在圖形用戶界面上呈現(xiàn)諸如窗ロ的圖像給用戶的顯示器、鍵盤、鼠標(biāo)、打印機(jī)等。當(dāng)然,本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,以上組件的任何組合、或任何數(shù)目的不同組件、外圍設(shè)備和其他設(shè)備可以與管理節(jié)點(diǎn)20 —起使用。在所示的實(shí)施例中,管理節(jié)點(diǎn)20在存儲(chǔ)器M中存儲(chǔ)的操作系統(tǒng)(0S)56(例如ζ/ OS、OS/2、LINUX、UNIX、WINDOWS、MAC OS)的控制下工作,并且與用戶接ロ連接以接受輸入和命令并呈現(xiàn)結(jié)果。在本發(fā)明的一個(gè)實(shí)施例中,OS 56促進(jìn)根據(jù)本發(fā)明的升級(jí)機(jī)制。為此, OS 56包括如前所述的管理模塊22,其可以適配于執(zhí)行下面描述的示例性方法中的各種處理和機(jī)制。管理節(jié)點(diǎn)20可以實(shí)施編譯器60,其允許以編程語言(諸如COBOL、PL/1、C、C++、 JAVA、ADA、BASIC、VISUAL BASIC或任何其他編程語言)編寫的應(yīng)用程序58轉(zhuǎn)換為處理器 52可讀的代碼。完成之后,計(jì)算機(jī)程序58使用通過編譯器60生成的關(guān)系和邏輯,訪問和操縱管理節(jié)點(diǎn)20的存儲(chǔ)器M中存儲(chǔ)的數(shù)據(jù)。為了進(jìn)一步實(shí)施和執(zhí)行根據(jù)本發(fā)明的機(jī)制和處理,OS 56可以與管理模塊22、存儲(chǔ)器M、處理器52、程序58和其他計(jì)算機(jī)處理、網(wǎng)絡(luò)和存儲(chǔ)組件相結(jié)合,實(shí)施下面將進(jìn)一歩描述的升級(jí)機(jī)制。如本發(fā)明的普通技術(shù)人員將理解的,如當(dāng)前所示出的管理模塊22所實(shí)施的機(jī)制可以以各種形式和架構(gòu)實(shí)施。因此,同樣,本附圖中的管理模塊22的圖示意在演示管理節(jié)點(diǎn)20中的可能的計(jì)算組件之間的邏輯關(guān)系,而不隱含特定的物理結(jié)構(gòu)或關(guān)系。
在一個(gè)實(shí)施例中,實(shí)施操作系統(tǒng)56、計(jì)算機(jī)程序58和編譯器60的指令以及管理模塊22有形地體現(xiàn)在計(jì)算機(jī)可讀介質(zhì)中,該計(jì)算機(jī)可讀介質(zhì)可以包括ー個(gè)或多個(gè)固定的或可移除的數(shù)據(jù)存儲(chǔ)設(shè)備,諸如zip驅(qū)動(dòng)器、盤、硬盤驅(qū)動(dòng)器、DVD/⑶-ROM、數(shù)字帶、固態(tài)驅(qū)動(dòng)器(SSD)等。此外,操作系統(tǒng)56和計(jì)算機(jī)程序58包括當(dāng)由計(jì)算存儲(chǔ)環(huán)境讀取并執(zhí)行時(shí)執(zhí)行實(shí)施和/或使用本發(fā)明的必要步驟的指令。計(jì)算機(jī)程序58和/或操作系統(tǒng)56的指令還可以有形地體現(xiàn)在存儲(chǔ)器M中和/或經(jīng)由各種組件由網(wǎng)絡(luò)16、24J6和32(圖1)傳輸或訪問。如此,這里可使用的術(shù)語“制品”、“程序存儲(chǔ)設(shè)備”和“計(jì)算機(jī)程序產(chǎn)品”意在包括可以從任何計(jì)算機(jī)可讀設(shè)備或介質(zhì)訪問和/或操作的計(jì)算機(jī)程序。本發(fā)明的實(shí)施例可以包括一個(gè)或多個(gè)關(guān)聯(lián)的軟件應(yīng)用程序58,其例如包括用于管理分布式計(jì)算機(jī)系統(tǒng)的功能,所述分布式計(jì)算機(jī)系統(tǒng)包括計(jì)算設(shè)備的網(wǎng)絡(luò)(諸如之前所述的SAN或NAQ。因此,處理器52可以包括一個(gè)或多個(gè)存儲(chǔ)管理處理器(SMP)。程序58可以在單個(gè)計(jì)算機(jī)和/或管理節(jié)點(diǎn)20內(nèi)操作,或者作為包括計(jì)算設(shè)備的網(wǎng)絡(luò)的分布式計(jì)算機(jī)系統(tǒng)的一部分操作。該網(wǎng)絡(luò)可以包括經(jīng)由局域網(wǎng)和/或因特網(wǎng)連接(其可以是公共的或安全的,例如通過虛擬專有網(wǎng)絡(luò)(VPN)連接)、或者經(jīng)由光纖信道SAN或如本領(lǐng)域的技術(shù)人員將理解的其他已知的網(wǎng)絡(luò)類型連接的一個(gè)或多個(gè)計(jì)算機(jī)。(注意,光纖信道SAN通常僅用于計(jì)算機(jī)與存儲(chǔ)系統(tǒng)的通信,而不是彼此之間的通信。)再次參考圖1,在諸如環(huán)境10的計(jì)算存儲(chǔ)環(huán)境中,可能期望滿足幾個(gè)條件。例如, ー個(gè)存儲(chǔ)節(jié)點(diǎn)36或42應(yīng)該在所有時(shí)間都可用。此外,GPFS法定數(shù)(quorum)應(yīng)該不被破壞,并且給定的CTDB應(yīng)該具有額外的接ロ節(jié)點(diǎn)18,以對CTDB導(dǎo)出的IP地址進(jìn)行故障切換 (failover)。鑒于之前的示例條件,環(huán)境10可能需要升級(jí),諸如添加新的計(jì)算機(jī)可讀程序代碼。以上的條件可能對在這樣的升級(jí)期間的維持施加限制。本發(fā)明和所要求保護(hù)的主題提供用于在這樣的條件下并且鑒于這樣的示例限制而執(zhí)行升級(jí)的示例性機(jī)制,以便避免企業(yè)不可取的方案(諸如使環(huán)境離線)。這些機(jī)制提供高效、智能、靈活和自動(dòng)的方案。替代方案是不希望的,因?yàn)樗鼈兛赡苄枰謩?dòng)嘗試執(zhí)行升級(jí)(諸如在多個(gè)節(jié)點(diǎn)上手動(dòng)加載)。此外,這樣的方案不妨止?jié)撛诘乜缭教囟C(jī)群中的所有節(jié)點(diǎn)傳播壞代碼。在一個(gè)實(shí)施例中,本發(fā)明的機(jī)制提供靈活且可靠的自動(dòng)“滾動(dòng)代碼升級(jí),,處理,其為用戶提供以下獨(dú)特特征和益處。首先,該處理提供內(nèi)置健康檢查智能,以確保不將關(guān)鍵資源作為自動(dòng)代碼升級(jí)的一部分移除而使得機(jī)群變得不可操作。其次,該處理檢測潛在的壞代碼傳播,并妨止壞代碼傳播到存儲(chǔ)機(jī)群中的所有節(jié)點(diǎn)。第三,該處理在整個(gè)自動(dòng)滾動(dòng)代碼升級(jí)處理中智能且動(dòng)態(tài)地獲得置信度。當(dāng)更多的節(jié)點(diǎn)被成功地加載了最新的代碼時(shí),該方法將運(yùn)行更多的并行代碼升級(jí)實(shí)例。接下來,在第四益處中,該處理動(dòng)態(tài)地再學(xué)習(xí)完成代碼升級(jí)的時(shí)間,并將此時(shí)間應(yīng)用到將來的代碼升級(jí)時(shí)間以完成估計(jì),如將要進(jìn)一步說明的。第五,該處理提供用于在具有多個(gè)節(jié)點(diǎn)的大系統(tǒng)上執(zhí)行滾動(dòng)代碼升級(jí)的自動(dòng)方法,并提供滿足變化的用戶需要的靈活性。第六,該處理允許用戶注冊滾動(dòng)升級(jí)策略,該滾動(dòng)升級(jí)策略定義何時(shí)將發(fā)生滾動(dòng)代碼升級(jí)以及升級(jí)窗ロ將有多長。第七,該處理允許用戶控制在任何給定時(shí)間可能停運(yùn)(down)的接口和存儲(chǔ)節(jié)點(diǎn)的百分比。第八,該處理允許用戶阻止單獨(dú)節(jié)點(diǎn)進(jìn)行滾動(dòng)代碼升級(jí)。第九, 該處理針對意外代碼升級(jí)失敗提供檢查點(diǎn)錯(cuò)誤恢復(fù)??梢詮募泄芾砉?jié)點(diǎn)(例如,圖1、2中的管理節(jié)點(diǎn)20和管理模塊22)管理諸如代碼升級(jí)的升級(jí)。在一個(gè)示例性實(shí)施例中,管理節(jié)點(diǎn)包含代碼鏡像,其要作為升級(jí)的一部分而傳播到目標(biāo)節(jié)點(diǎn)。在一個(gè)示例性代碼升級(jí)實(shí)施方式中,使用Red Hat YUM(修改的 yellowdog(黃狗)更新器)庫將代碼傳播到目標(biāo)節(jié)點(diǎn),然而,應(yīng)該注意,不應(yīng)該排除其它的代碼傳播方法,例如使用包含預(yù)引導(dǎo)執(zhí)行環(huán)境(PXE)的引導(dǎo)的無狀態(tài)(stateless)機(jī)制來將代碼傳播到系統(tǒng)中的目標(biāo)節(jié)點(diǎn)。返回YUM實(shí)施例,HTTP協(xié)議可以用于將代碼傳遞到目標(biāo)節(jié)點(diǎn),作為YUM升級(jí)的ー 部分,并且安全殼(SSH)協(xié)議可以用于從管理節(jié)點(diǎn)啟動(dòng)對目標(biāo)節(jié)點(diǎn)的YUM升級(jí)。換言之,在此實(shí)施例中,從管理節(jié)點(diǎn)驅(qū)動(dòng)對所有節(jié)點(diǎn)的代碼升級(jí)。用戶能夠指定滾動(dòng)代碼升級(jí)策略,該滾動(dòng)代碼升級(jí)策略注冊何時(shí)將開始滾動(dòng)代碼升級(jí)以及滾動(dòng)代碼升級(jí)將運(yùn)行多久。這對于允許用戶在非高峰時(shí)間自動(dòng)執(zhí)行代碼升級(jí)是有用的。例如,用戶可以設(shè)置在每個(gè)周六和周日從午夜到早上8點(diǎn)運(yùn)行的滾動(dòng)代碼升級(jí)策略。這些時(shí)間限制合并到下面進(jìn)ー步描述的機(jī)制中。此外,用戶可以對接ロ節(jié)點(diǎn)和存儲(chǔ)節(jié)點(diǎn)設(shè)置不同的節(jié)點(diǎn)停運(yùn)(宕機(jī),down)容限因子。例如,用戶可以將它們的接ロ節(jié)點(diǎn)停運(yùn)容限設(shè)置為33%。這確保毎次可以停運(yùn)至多 33%的接ロ節(jié)點(diǎn)。節(jié)點(diǎn)可能由于除了代碼升級(jí)以外的原因而導(dǎo)致停運(yùn),并且這些其他的原因被因子化到公式中,并且接ロ節(jié)點(diǎn)停運(yùn)容限限制合并到下面進(jìn)ー步描述的機(jī)制中。類似地,用戶可以對每次停運(yùn)的存儲(chǔ)節(jié)點(diǎn)設(shè)置不同的容限。作為示例,用戶可以設(shè)置存儲(chǔ)節(jié)點(diǎn)停運(yùn)容限因子為50%,其表示在任何給定的時(shí)間可以有一半的存儲(chǔ)節(jié)點(diǎn)停運(yùn)。該計(jì)算考慮了由于除代碼升級(jí)之外的其它原因而停運(yùn)的存儲(chǔ)節(jié)點(diǎn),并且該限制合并到下面進(jìn)ー步描述的機(jī)制中。除了上述以外,用戶還可以選擇阻止特定節(jié)點(diǎn)進(jìn)行代碼升級(jí)。提供這樣的靈活性對于確保可以滿足用戶需求而言是有利的。例如,在非繁忙時(shí)間注冊代碼升級(jí)處理的用戶可能由于系統(tǒng)上的負(fù)載減小而能夠容忍一次停運(yùn)更大量的節(jié)點(diǎn),而其他用戶可能需要保持更多的節(jié)點(diǎn)運(yùn)行以確保維持合適的性能。這些限制獨(dú)立干與代碼升級(jí)關(guān)聯(lián)的全面系統(tǒng)健康檢查,如例如檢查CTDB和GPFS狀態(tài)。現(xiàn)在轉(zhuǎn)向圖3,其描繪了示例性“包裝函數(shù)”方法70的流程圖。如本領(lǐng)域的普通技術(shù)人員將理解的,可以以不同的方式實(shí)施方法70中的各種步驟,以適合具體的應(yīng)用。此外, 所描述的方法可通過各種手段實(shí)施,諸如可以在計(jì)算存儲(chǔ)環(huán)境上操作或者以其他方式與計(jì)算存儲(chǔ)環(huán)境關(guān)聯(lián)地操作的硬件、軟件、固件或它們的組合。例如,方法70可以部分地或整體地實(shí)施為計(jì)算機(jī)程序產(chǎn)品,其包括其中存儲(chǔ)了計(jì)算機(jī)可讀程序代碼部分的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以包括盤驅(qū)動(dòng)器、閃存、數(shù)字通用盤(DVD)、緊湊盤(CD)以及其他類型的存儲(chǔ)介質(zhì)。在一個(gè)實(shí)施例中,方法70負(fù)責(zé)確保在計(jì)算存儲(chǔ)環(huán)境中的所有節(jié)點(diǎn)上發(fā)生代碼升級(jí)。如將進(jìn)ー步描述的,方法70依賴于步驟84中的功能性(升級(jí)目標(biāo)節(jié)點(diǎn))來執(zhí)行健康檢查和智能任務(wù),如將進(jìn)ー步描述的。在開始(步驟72)吋,方法70首先獲得機(jī)群中的節(jié)點(diǎn)的主機(jī)名稱和/或IP地址,將此信息放置在需要升級(jí)的節(jié)點(diǎn)的列表中(步驟74)。在一個(gè)實(shí)施例中,這利用對GPFS文件系統(tǒng)的查詢而實(shí)現(xiàn)。可以使用其他方法來獲得機(jī)群中的節(jié)點(diǎn)的列表,其包括引用/etc/hosts文件、對配置數(shù)據(jù)庫或平面配置文件進(jìn)行查詢等。在填充了需要升級(jí)的節(jié)點(diǎn)的列表之后,方法70檢查是否已經(jīng)開始對目標(biāo)節(jié)點(diǎn)的升級(jí)(步驟76)。如果還沒有開始對目標(biāo)節(jié)點(diǎn)的升級(jí),則方法70繼續(xù)檢查在滾動(dòng)升級(jí)窗ロ 中是否有更多的可用時(shí)間(步驟90)。如果在升級(jí)窗口中有更多的可用時(shí)間,則方法70檢查是否阻止目標(biāo)節(jié)點(diǎn)升級(jí)(步驟92)。如果未阻止目標(biāo)節(jié)點(diǎn)升級(jí),則該節(jié)點(diǎn)確定是否需要對目標(biāo)節(jié)點(diǎn)升級(jí)(步驟94)。在一個(gè)實(shí)施例中,這通過從管理節(jié)點(diǎn)向目標(biāo)節(jié)點(diǎn)發(fā)出執(zhí)行YUM 查詢的SSH命令來實(shí)現(xiàn)。作為YUM查詢的結(jié)果,返回需要對目標(biāo)節(jié)點(diǎn)更新的分組。如果需要對目標(biāo)節(jié)點(diǎn)升級(jí),則方法70調(diào)用升級(jí)目標(biāo)節(jié)點(diǎn)函數(shù)(步驟84),并進(jìn)行到休眠(步驟102)。在從休眠中喚醒之后,方法70確定在需要升級(jí)列表中是否發(fā)現(xiàn)額外節(jié)點(diǎn) (步驟104)。如果在需要升級(jí)列表中發(fā)現(xiàn)額外節(jié)點(diǎn),則方法70引用列表中的下ー節(jié)點(diǎn)(步驟106),并繼續(xù)檢查以確定對目標(biāo)節(jié)點(diǎn)的升級(jí)是否已經(jīng)在進(jìn)行中(返回步驟76)。如果已經(jīng)開始對目標(biāo)節(jié)點(diǎn)的升級(jí)(再次,步驟76),則方法70進(jìn)行到步驟78,其檢查對于目標(biāo)節(jié)點(diǎn)的升級(jí)是否仍在進(jìn)行中。在所描述的實(shí)施例中,“升級(jí)目標(biāo)節(jié)點(diǎn)”的實(shí)例 (再次,步驟84)在后臺(tái)開始,并且這對于從此父滾動(dòng)代碼升級(jí)進(jìn)程(process)監(jiān)視它們的完成是有益的。如果對于目標(biāo)節(jié)點(diǎn)的升級(jí)仍在進(jìn)行中(再次,步驟78),則方法70進(jìn)行到休眠(再次,步驟10 。替代地,如果已經(jīng)結(jié)束了對目標(biāo)節(jié)點(diǎn)的升級(jí),則方法70進(jìn)行檢查升級(jí)處理的返回。如果升級(jí)處理成功(步驟80),則方法70將目標(biāo)節(jié)點(diǎn)從節(jié)點(diǎn)需要升級(jí)的陣列移動(dòng)到升級(jí)完成列表(步驟82),并進(jìn)行到步驟102以休眠。替代地,如果返回代碼不成功,則方法 70檢查是否由于非關(guān)鍵的錯(cuò)誤導(dǎo)致代碼升級(jí)失敗(步驟86)。如果由于非關(guān)鍵的錯(cuò)誤導(dǎo)致升級(jí)失敗,則方法70將目標(biāo)節(jié)點(diǎn)留在節(jié)點(diǎn)需要升級(jí)列表中,并進(jìn)行到休眠步驟(再次,步驟 102)。“升級(jí)目標(biāo)節(jié)點(diǎn)”函數(shù)可能由于許多原因(諸如對目標(biāo)節(jié)點(diǎn)執(zhí)行升級(jí)將破壞GPFS機(jī)群并使機(jī)群不可操作)而遭遇對于目標(biāo)節(jié)點(diǎn)的非關(guān)鍵失敗。這樣的示例不是關(guān)鍵錯(cuò)誤,并且方法70簡單地在以后的時(shí)間再次重新嘗試升級(jí)特定目標(biāo)節(jié)點(diǎn)(步驟88,返回步驟102)。 如果升級(jí)由于關(guān)鍵錯(cuò)誤而失敗(再次,步驟86),則方法70將目標(biāo)節(jié)點(diǎn)從需要升級(jí)列表移動(dòng)到失敗列表(步驟88),并進(jìn)行到休眠步驟102。返回參考對在升級(jí)窗口中是否有額外時(shí)間可用的判定(再次,步驟90),如果沒有更多時(shí)間可用,則方法70將目標(biāo)節(jié)點(diǎn)從需要升級(jí)列表移動(dòng)到未升級(jí)列表,并減少休眠時(shí)間,以允許更塊地清理已在進(jìn)行中的代碼升級(jí)任務(wù)(步驟96),并進(jìn)行到休眠步驟。返回參考目標(biāo)節(jié)點(diǎn)被阻止升級(jí)的檢查(再次,步驟92),如果目標(biāo)節(jié)點(diǎn)被阻止進(jìn)行代碼升級(jí),則方法70將目標(biāo)節(jié)點(diǎn)從需要升級(jí)列表移動(dòng)到阻止列表(步驟98),并進(jìn)行到休眠步驟102。返回參考需要對目標(biāo)節(jié)點(diǎn)升級(jí)的檢查(步驟94),如果不需要對目標(biāo)節(jié)點(diǎn)升級(jí),則方法70將目標(biāo)節(jié)點(diǎn)從需要升級(jí)列表移動(dòng)到不需要升級(jí)列表(步驟100),并進(jìn)行到休眠步驟102。返回參考對判定在需要升級(jí)列表中是否存在更多的節(jié)點(diǎn)的檢查(步驟10 ,如果沒有額外節(jié)點(diǎn)保留在需要升級(jí)列表中(再次,步驟104),則方法70通過顯示以下列表的內(nèi)容報(bào)告滾動(dòng)代碼升級(jí)的結(jié)果(步驟108)未升級(jí)的節(jié)點(diǎn)、被阻止升級(jí)的節(jié)點(diǎn)、升級(jí)的節(jié)點(diǎn)、以及升級(jí)失敗的節(jié)點(diǎn)?,F(xiàn)在轉(zhuǎn)向圖4,示出了方法120的流程圖,方法120描繪了用于代碼升級(jí)機(jī)制的示例性升級(jí)目標(biāo)節(jié)點(diǎn)函數(shù),其由圖3的步驟84預(yù)先調(diào)用。升級(jí)目標(biāo)節(jié)點(diǎn)函數(shù)合并健康檢查和其他智能特征,以確??煽壳也伙@眼(unobtrusive)的滾動(dòng)代碼升級(jí)。在開始代碼升級(jí)函數(shù)(步驟122)吋,方法120檢查是否設(shè)置了強(qiáng)制標(biāo)志(步驟124)。如果設(shè)置了強(qiáng)制標(biāo)志, 則方法120繞過所有健康檢查并立即開始代碼升級(jí)。如果未設(shè)置強(qiáng)制標(biāo)志(再次,步驟124),則方法120根據(jù)需要升級(jí)的分組的類型估計(jì)完成代碼升級(jí)的時(shí)間(步驟126)。在一個(gè)實(shí)施例中,這通過除了需要升級(jí)的分組的類型之外還確定要升級(jí)的分組的數(shù)目來實(shí)現(xiàn)。因?yàn)樵谕粰C(jī)群中可能存在多個(gè)接口和存儲(chǔ)節(jié)點(diǎn),所以其他目標(biāo)節(jié)點(diǎn)可能已經(jīng)升級(jí)了相同的分組。結(jié)果,方法120可以參考其完成相同分組的升級(jí)實(shí)際采用的時(shí)間,以對于其完成對目標(biāo)節(jié)點(diǎn)的升級(jí)將采用的時(shí)間提供高度精確的估計(jì)。這種內(nèi)建智能提供代碼升級(jí)處理的額外的效率。例如,在沒有使用與相同代碼分組的之前升級(jí)關(guān)聯(lián)的信息的智能的情況下,方法120可能過估計(jì)(overestimate)執(zhí)行升級(jí)所需要的時(shí)間,這導(dǎo)致當(dāng)更精確的計(jì)算將指示升級(jí)可能已經(jīng)包含在已有的升級(jí)窗口中時(shí)不升級(jí)系統(tǒng)中的所有節(jié)點(diǎn)。作為下一歩,方法120通過確保所估計(jì)的代碼升級(jí)時(shí)間在完成該特定代碼升級(jí)窗 ロ的代碼升級(jí)所剩的剩余時(shí)間內(nèi),確認(rèn)完成升級(jí)的時(shí)間是否可接受(步驟128)。如果代碼升級(jí)時(shí)間可接受,則方法120進(jìn)行壞代碼傳播檢查(步驟13 。在一個(gè)實(shí)施例中,這通過檢查在方法120嘗試升級(jí)的特定代碼級(jí)上代碼升級(jí)已經(jīng)失敗的當(dāng)前節(jié)點(diǎn)數(shù)量、并將此值與壞代碼傳播容限值進(jìn)行比較來完成。在一個(gè)實(shí)施例中,此閾值缺省設(shè)置為1,但其可以由服務(wù)人員按需要?jiǎng)討B(tài)地改變。如果未檢測到壞代碼傳播,則方法120繼續(xù)檢查是否已超過并行升級(jí)置信度因子 (步驟134)。在某些情況中,用戶可能已經(jīng)將它們的接ロ節(jié)點(diǎn)停運(yùn)容限和存儲(chǔ)節(jié)點(diǎn)停運(yùn)容限設(shè)置為超過壞代碼傳播閾值的值。例如,如果用戶指示一次可以有兩個(gè)接ロ節(jié)點(diǎn)停運(yùn),則在沒有并行升級(jí)置信度因子的情況下,兩個(gè)代碼升級(jí)將并行地開始。如果這兩個(gè)節(jié)點(diǎn)是接收新代碼級(jí)的第一節(jié)點(diǎn),并且該新代碼級(jí)是壞的,則方法120將致使系統(tǒng)中的兩個(gè)節(jié)點(diǎn)不可操作并違反壞代碼傳播閾值。為了提供對這種情況的合適保護(hù)且仍然提供最高的效率, 執(zhí)行針對并行升級(jí)置信度因子的檢查。在一個(gè)實(shí)施例中,缺省地,將置信度因子設(shè)置為1。在所述示例中,檢查置信度因子導(dǎo)致僅由于壞代碼傳播而使ー個(gè)節(jié)點(diǎn)(而不是兩個(gè)節(jié)點(diǎn)) 停運(yùn)。當(dāng)更多節(jié)點(diǎn)成功地完成了指定代碼級(jí)的代碼升級(jí)吋,置信度因子提高,這允許對更多的節(jié)點(diǎn)并行地執(zhí)行升級(jí)。如果尚未超過并行升級(jí)置信度因子,則方法120進(jìn)行到節(jié)點(diǎn)停運(yùn)閾值檢查(步驟 136)。如果包括想要升級(jí)的節(jié)點(diǎn)的停運(yùn)的接ロ或存儲(chǔ)節(jié)點(diǎn)的數(shù)目不違反當(dāng)前節(jié)點(diǎn)停運(yùn)閾值,則方法120繼續(xù)檢查機(jī)群健康(步驟138)。當(dāng)檢查系統(tǒng)健康吋,可以檢查GPFS機(jī)群法定數(shù),以確保使指定的目標(biāo)節(jié)點(diǎn)停運(yùn)不破壞GPFS法定數(shù)。此外,如果目標(biāo)節(jié)點(diǎn)是接ロ節(jié)點(diǎn), 則方法120確保至少ー個(gè)其他接ロ節(jié)點(diǎn)可用于對將進(jìn)行代碼升級(jí)的目標(biāo)接ロ節(jié)點(diǎn)所導(dǎo)出的所有IP地址進(jìn)行故障切換。如果系統(tǒng)健康檢查成功,則方法120檢查目標(biāo)節(jié)點(diǎn)是否是存儲(chǔ)節(jié)點(diǎn)(步驟140)。 如果目標(biāo)節(jié)點(diǎn)是存儲(chǔ)節(jié)點(diǎn),則方法120檢查存儲(chǔ)節(jié)點(diǎn)對等(peer)GPFS狀態(tài)(步驟14 。如果存儲(chǔ)節(jié)點(diǎn)GPFS對等狀態(tài)是良好(ok)或正常,則方法120繼續(xù)升級(jí)目標(biāo)節(jié)點(diǎn)(步驟146)。 替代地,如果目標(biāo)節(jié)點(diǎn)不是存儲(chǔ)節(jié)點(diǎn),則目標(biāo)節(jié)點(diǎn)的升級(jí)在所有檢查都已經(jīng)成功通過時(shí)開始。在升級(jí)了目標(biāo)節(jié)點(diǎn)之后,方法120檢查對目標(biāo)節(jié)點(diǎn)的升級(jí)是否成功(步驟148)。 如果對目標(biāo)節(jié)點(diǎn)的升級(jí)成功,則置信度因子増加(步驟152)。在所描繪的實(shí)施例中,將當(dāng)前置信度因子乘以2。此外,與升級(jí)特定分組關(guān)聯(lián)的時(shí)間也根據(jù)升級(jí)所關(guān)聯(lián)的分組的開始時(shí)間和結(jié)束時(shí)間而更新。在更新了分組安裝時(shí)間估計(jì)(步驟154)之后,方法120結(jié)束(步驟156)并向調(diào)用應(yīng)用返回成功。另ー方面,如果升級(jí)未成功完成,則方法120遞增壞代碼傳播計(jì)數(shù),設(shè)置關(guān)鍵返回代碼,并通過向調(diào)用應(yīng)用返回關(guān)鍵錯(cuò)誤而結(jié)束(步驟150)。返回參考代碼升級(jí)時(shí)間檢查(再次,步驟1 ),如果所估計(jì)的用于完成對目標(biāo)節(jié)點(diǎn)的代碼升級(jí)的時(shí)間將超過升級(jí)窗口中所剩的時(shí)間,則方法120將目標(biāo)節(jié)點(diǎn)從需要升級(jí)列表移動(dòng)到未升級(jí)列表(步驟130),并設(shè)置非關(guān)鍵返回代碼(步驟144),并結(jié)束(再次,步驟 156)。返回參考?jí)拇a傳播檢查(再次,步驟132),如果該檢查確定壞代碼可能潛在地遍布系統(tǒng)傳播,則方法120設(shè)置非關(guān)鍵返回代碼并結(jié)束(再次,步驟144、156)。返回參考并行升級(jí)置信度因子檢查(再次,步驟134),如果已在進(jìn)行升級(jí)的節(jié)點(diǎn)數(shù)超過并行升級(jí)置信度因子,則方法120設(shè)置非關(guān)鍵返回代碼并結(jié)束(再次,步驟144、156)。返回參考節(jié)點(diǎn)停運(yùn)閾值檢查(再次,步驟136),如果升級(jí)目標(biāo)節(jié)點(diǎn)將違反對于存儲(chǔ)節(jié)點(diǎn)或者接ロ節(jié)點(diǎn)的節(jié)點(diǎn)停運(yùn)閾值檢查,則方法120設(shè)置非關(guān)鍵返回代碼并結(jié)束(再次,步驟144、156)。返回參考系統(tǒng)健康檢查(再次,步驟138),如果升級(jí)目標(biāo)節(jié)點(diǎn)將使機(jī)群不健康并且從用戶奪取資源,則方法 120設(shè)置非關(guān)鍵返回代碼并結(jié)束(再次,步驟144、156)。最后,返回參考存儲(chǔ)節(jié)點(diǎn)對等健康檢查(再次,步驟140、14 ,如果目標(biāo)存儲(chǔ)節(jié)點(diǎn)對等不健康,則方法120設(shè)置非關(guān)鍵返回代碼并結(jié)束(再次,步驟144、156)。遍及升級(jí)處理,可以存儲(chǔ)持續(xù)檢查點(diǎn)時(shí)間戳(timestamp),使得如果升級(jí)已經(jīng)失敗,則可以調(diào)用從意外錯(cuò)誤中恢復(fù)的過程。還可以收集時(shí)間戳來更新完成對特定分組升級(jí)的時(shí)間。例如,可以在啟動(dòng)YUM代碼升級(jí)之前和之后獲得時(shí)間戳。此外,可以為每個(gè)分組安裝的開始和停止時(shí)間捕獲時(shí)間戳。這些值用于更新升級(jí)分組安裝時(shí)間估計(jì)。在完成升級(jí)之后,可能由于核(kernel)的更新等而必須重啟目標(biāo)節(jié)點(diǎn)。在這樣的情況中,可以在重啟目標(biāo)節(jié)點(diǎn)之前獲取時(shí)間戳,并且可以在節(jié)點(diǎn)從重啟返回之后獲取另ー時(shí)間戳。這些時(shí)間戳可以用于確定升級(jí)處理失敗的地方并從失敗的檢查點(diǎn)起拾取(pickup)。當(dāng)有新代碼可用于特定存儲(chǔ)機(jī)群吋,可以將其復(fù)制到管理節(jié)點(diǎn)。作為此處理的ー 部分,壞代碼傳播閾值可以設(shè)置為1,存儲(chǔ)節(jié)點(diǎn)置信度因子可以設(shè)置為1,代碼升級(jí)時(shí)間估計(jì)可以設(shè)置回缺省值,并且與檢查點(diǎn)錯(cuò)誤恢復(fù)關(guān)聯(lián)的所有時(shí)間戳可以重設(shè)。在代碼升級(jí)期間,在意外失敗的事件中,代碼升級(jí)錯(cuò)誤恢復(fù)例程可以提供檢查點(diǎn)重啟恢復(fù)。例如,在對多個(gè)節(jié)點(diǎn)進(jìn)行代碼升級(jí)的中途,管理節(jié)點(diǎn)可能掉電或重啟。在ー個(gè)實(shí)施例中,可以使用四個(gè)時(shí)間戳來指示特定檢查點(diǎn)處的失敗。就升級(jí)處理的排序而言,時(shí)間戳可以包括1.升級(jí)開始時(shí)間戳-指示已經(jīng)對目標(biāo)節(jié)點(diǎn)開始了升級(jí)處理2.升級(jí)完成時(shí)間戳-指示已經(jīng)對目標(biāo)節(jié)點(diǎn)完成了升級(jí)處理3.重啟開始時(shí)間戳-指示目標(biāo)節(jié)點(diǎn)正在重啟4.升級(jí)結(jié)束時(shí)間戳-指示已經(jīng)成功地完成整個(gè)升級(jí)處理這些時(shí)間戳還可以與對正更新的分組的名稱和類型的追蹤相結(jié)合,用于幫助實(shí)時(shí)自動(dòng)地確定用于升級(jí)節(jié)點(diǎn)的實(shí)際時(shí)間。例如,如果用戶具有三個(gè)用于對目標(biāo)節(jié)點(diǎn)升級(jí)的分組,則在第一次完成升級(jí)之后,用戶可以使用與上述時(shí)間戳耦合的分組的知識(shí)來獲知其將花費(fèi)多長時(shí)間來對另ー節(jié)點(diǎn)進(jìn)行相同或類似的升級(jí)。接下來,圖5是示出如以上引入的示例性錯(cuò)誤恢復(fù)例程的方法160的流程圖。在開始錯(cuò)誤恢復(fù)例程(步驟162)吋,方法160首先檢查之前對目標(biāo)節(jié)點(diǎn)的升級(jí)是否遇到硬 (hard)失敗(步驟164)。如果失敗的節(jié)點(diǎn)未遇到硬錯(cuò)誤,則方法160繼續(xù)檢查升級(jí)開始時(shí)間戳是否大于升級(jí)結(jié)束時(shí)間戳(步驟166)。如果升級(jí)開始時(shí)間戳大于升級(jí)結(jié)束時(shí)間戳,則在代碼升級(jí)方法160能夠更新升級(jí)結(jié)束時(shí)間戳之前已經(jīng)遇到意外錯(cuò)誤。結(jié)果,方法160繼續(xù)檢查是否仍然需要對目標(biāo)節(jié)點(diǎn)升級(jí)(步驟180)。如果仍然需要對目標(biāo)節(jié)點(diǎn)升級(jí),則方法 160按照需要繼續(xù)對目標(biāo)節(jié)點(diǎn)升級(jí)(步驟18 。在目標(biāo)節(jié)點(diǎn)的升級(jí)完成之后,方法160繼續(xù)檢查升級(jí)處理的狀態(tài)。如果成功完成升級(jí)處理(步驟184),則方法160更新升級(jí)結(jié)束時(shí)間戳(步驟186), 更新重啟開始時(shí)間戳(步驟188),并繼續(xù)重啟目標(biāo)節(jié)點(diǎn)(步驟190)。如果方法160等待重啟的節(jié)點(diǎn)對Ping請求的響應(yīng)未超時(shí)(步驟192),則方法160檢查目標(biāo)節(jié)點(diǎn)的健康狀態(tài)。如果目標(biāo)節(jié)點(diǎn)的健康狀態(tài)良好(步驟194),則方法160標(biāo)記目標(biāo)節(jié)點(diǎn)在線(步驟198),更新升級(jí)完成時(shí)間戳(步驟200)并結(jié)束(步驟174)。返回參考升級(jí)開始時(shí)間戳大于升級(jí)結(jié)束時(shí)間戳(再次,步驟166),如果升級(jí)開始時(shí)間戳不大于升級(jí)結(jié)束時(shí)間戳,則方法160繼續(xù)檢查升級(jí)結(jié)束時(shí)間戳是否大于重啟開始時(shí)間戳(步驟168)。如果升級(jí)結(jié)束時(shí)間戳大于重啟開始時(shí)間戳,則之前的升級(jí)在其能夠更新升級(jí)結(jié)束時(shí)間戳之前遇到意外錯(cuò)誤。結(jié)果,方法160更新重啟開始時(shí)間戳(再次,步驟188), 并繼續(xù)重啟目標(biāo)節(jié)點(diǎn)(再次,步驟190)。如果方法160等待重啟的節(jié)點(diǎn)對ping請求的響應(yīng)未超時(shí)(再次,步驟192),則方法160檢查目標(biāo)節(jié)點(diǎn)的健康狀態(tài)。如果目標(biāo)節(jié)點(diǎn)的健康狀態(tài)良好(再次,步驟194),則方法160標(biāo)記目標(biāo)節(jié)點(diǎn)在線(再次,步驟198),更新升級(jí)完成時(shí)間戳(再次,步驟200)并結(jié)束(再次,步驟174)。返回參考對判定升級(jí)結(jié)束時(shí)間戳是否大于重啟開始時(shí)間戳的檢查(再次,步驟168),如果升級(jí)結(jié)束時(shí)間戳不大于重啟開始時(shí)間戳,則方法160繼續(xù)檢查目標(biāo)節(jié)點(diǎn)的健康。 如果目標(biāo)節(jié)點(diǎn)的健康狀態(tài)良好(步驟170),則方法160將目標(biāo)節(jié)點(diǎn)設(shè)置為在線狀態(tài)(步驟 176),并繼續(xù)檢查升級(jí)完成時(shí)間戳是否大于重啟開始時(shí)間戳(步驟178)。如果升級(jí)完成時(shí)間戳大于重啟開始時(shí)間戳(再次,步驟178),則方法160結(jié)束(再次,步驟174)。返回參考升級(jí)完成時(shí)間戳大于重啟開始時(shí)間戳(再次,步驟178),如果升級(jí)完成時(shí)間戳不大于重啟完成時(shí)間戳,則方法160更新升級(jí)完成時(shí)間戳(再次,步驟200)并結(jié)束。返回參考對判定目標(biāo)節(jié)點(diǎn)是否需要額外升級(jí)的檢查(再次,步驟180),如果不需要額外升級(jí),則方法160繼續(xù)更新升級(jí)結(jié)束時(shí)間戳(再次,步驟186),并繼續(xù)進(jìn)行如所示的步驟188-200。返回參考對判定目標(biāo)節(jié)點(diǎn)是否遇到硬失敗的檢查(步驟196),如果遇到了硬失敗,則方法160結(jié)束(再次,步驟174)。返回參考對判定是否成功完成了升級(jí)處理的檢查(再次,步驟184),如果升級(jí)處理未成功完成,則方法160將目標(biāo)節(jié)點(diǎn)標(biāo)記為遇到硬失敗 (再次,步驟174)并結(jié)束。返回參考目標(biāo)節(jié)點(diǎn)的健康檢查(再次,步驟170),如果目標(biāo)節(jié)點(diǎn)的健康不好(ok),則方法160將目標(biāo)節(jié)點(diǎn)標(biāo)記為遇到硬失敗(步驟17 并結(jié)束(再次,步驟 174)。如本領(lǐng)域的技術(shù)人員將理解的,本發(fā)明的各方面可以體現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明的各方面可以采用完全硬件實(shí)施例、完全軟件實(shí)施例(包括固件、 駐留軟件、微代碼等)或者包含軟件和硬件方面的實(shí)施例的形式,這里它們可以全部一般地稱為“電路”、“模塊”或“系統(tǒng)”。此外,本發(fā)明的各方面可以采用在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)中體現(xiàn)的計(jì)算機(jī)程序產(chǎn)品的形式,所述計(jì)算機(jī)可讀介質(zhì)上體現(xiàn)計(jì)算機(jī)可讀程序代碼??梢允褂靡粋€(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)的任何組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是但不限于電子、磁、 光、電磁、紅外或半導(dǎo)體系統(tǒng)、裝置或設(shè)備、或前述的任何合適的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的示例(非窮舉列表)將包括以下具有一個(gè)或多個(gè)布線的電連接、便攜式計(jì)算機(jī)盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦除可編程只讀存儲(chǔ)器(EPR0M或閃存)、光纖、便攜式緊湊只讀存儲(chǔ)器(CD-ROM)、光存儲(chǔ)設(shè)備、磁存儲(chǔ)設(shè)備、或者前述的任何合適的組合。在此文檔的上下文中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何有形介質(zhì),其可以包含或存儲(chǔ)用于由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與其結(jié)合使用的程序??梢允褂萌魏魏线m的介質(zhì)傳送計(jì)算機(jī)可讀介質(zhì)上體現(xiàn)的程序,所述合適的介質(zhì)包括但不限于無線、有線、光纖纜線、RF等,或者前述的任何合適的組合。可以用ー個(gè)或多個(gè)編程語言的任何組合編寫用于執(zhí)行本發(fā)明的各方面的操作的計(jì)算機(jī)程序代碼,所述編程語言包括面向?qū)ο蟮木幊陶Z言(諸如Java、Smalltalk、C++等)以及傳統(tǒng)的過程編程語言(諸如“C”編程語言或類似編程語言)。程序代碼可以全部在用戶的計(jì)算機(jī)上執(zhí)行,部分在用戶的計(jì)算機(jī)上執(zhí)行,作為單機(jī)軟件包執(zhí)行,部分在用戶的計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行, 或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在后一情形中,遠(yuǎn)程計(jì)算機(jī)可以通過任何類型的網(wǎng)絡(luò)(包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN))連接到用戶的計(jì)算機(jī),或者可以連接到外部計(jì)算機(jī)(例如,使用因特網(wǎng)服務(wù)提供商,通過因特網(wǎng))。下面參照根據(jù)本發(fā)明的實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖說明本發(fā)明的各方面。將理解,可以通過計(jì)算機(jī)程序指令實(shí)施流程圖和/或框圖的每個(gè)塊以及流程圖和/或框圖中的各塊的組合。這些計(jì)算機(jī)程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)、或者其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生機(jī)器,從而經(jīng)由計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令創(chuàng)建用于實(shí)施流程圖和/或框圖中指定的功能/動(dòng)作的部件。這些計(jì)算機(jī)程序指令也可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中,其可以指引計(jì)算機(jī)、其他可編程數(shù)據(jù)處理設(shè)備或其他裝置以特定的方式工作,從而存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的指令產(chǎn)生制品,其包括實(shí)施流程圖和/或框圖中指定的功能/動(dòng)作的指令。計(jì)算機(jī)程序指令也可以加載到計(jì)算機(jī)、其他可編程數(shù)據(jù)處理設(shè)備或其他裝置中,以使得在計(jì)算機(jī)、其他可編程數(shù)據(jù)處理設(shè)備或其他裝置上執(zhí)行一系列操作步驟,以便產(chǎn)生計(jì)算機(jī)實(shí)施的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)施流程圖和/或框圖中指定的功能/動(dòng)作的處理。以上附圖中的流程圖和框圖示出了根據(jù)本發(fā)明的各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)施方式的架構(gòu)、功能性和操作。關(guān)于此點(diǎn),流程圖或框圖中的每個(gè)塊可以表示代碼的模塊、段或部分,其包括用于實(shí)施指定的邏輯功能的一個(gè)或多個(gè)可執(zhí)行指令。 還應(yīng)該注意,在某些替代實(shí)施方式中,在塊中標(biāo)注的功能可以不按照圖中所標(biāo)注的順序發(fā)生。例如,取決于所涉及的功能性,連續(xù)示出的兩個(gè)塊可以實(shí)際上基本并發(fā)執(zhí)行,或者各塊有時(shí)可以以相反的順序執(zhí)行。還將注意,框圖和/或流程圖的每個(gè)塊以及框圖和/或流程圖中的各塊的組合可以通過執(zhí)行指定功能或動(dòng)作的基于專用硬件的系統(tǒng)實(shí)施,或者通過專用硬件和計(jì)算機(jī)指令的結(jié)合來實(shí)施。雖然已經(jīng)詳細(xì)說明了本發(fā)明的一個(gè)或多個(gè)實(shí)施例,但本領(lǐng)域的普通技術(shù)人員將理解,在不偏離如所附權(quán)利要求限定的本發(fā)明的范圍的情況下可以對這些實(shí)施例進(jìn)行各種修改和適應(yīng)。
權(quán)利要求
1.一種通過處理器與存儲(chǔ)器設(shè)備通信來促進(jìn)計(jì)算存儲(chǔ)環(huán)境中的升級(jí)的方法,包括 選擇可用的多個(gè)滾動(dòng)升級(jí)策略之一,所述滾動(dòng)升級(jí)策略為升級(jí)窗ロ注冊至少一個(gè)可選的升級(jí)參數(shù);以及為所述計(jì)算存儲(chǔ)環(huán)境中的至少ー個(gè)節(jié)點(diǎn)設(shè)置節(jié)點(diǎn)停運(yùn)容限因子,其中所述節(jié)點(diǎn)停運(yùn)容限因子指定所述至少一個(gè)節(jié)點(diǎn)離線的単元的百分比,以在所述升級(jí)窗ロ期間應(yīng)用所述可用的多個(gè)滾動(dòng)升級(jí)策略中所選擇的ー個(gè)。
2.如權(quán)利要求1所述的方法,還包括定義所述多個(gè)滾動(dòng)升級(jí)策略的每ー個(gè)。
3.如權(quán)利要求2所述的方法,其中所述定義包括指定所述至少一個(gè)可選的升級(jí)參數(shù), 包括指定升級(jí)過程的開始時(shí)間和持續(xù)時(shí)間之一。
4.一種促進(jìn)計(jì)算存儲(chǔ)環(huán)境中的升級(jí)的系統(tǒng),包括管理模塊,其能夠在所述計(jì)算存儲(chǔ)環(huán)境中的管理節(jié)點(diǎn)上操作,其中所述管理模塊適配來選擇可用的多個(gè)滾動(dòng)升級(jí)策略之一,所述滾動(dòng)升級(jí)策略為升級(jí)窗ロ注冊至少一個(gè)可選的升級(jí)參數(shù);以及為所述計(jì)算存儲(chǔ)環(huán)境中的至少ー個(gè)節(jié)點(diǎn)設(shè)置節(jié)點(diǎn)停運(yùn)容限因子,其中所述節(jié)點(diǎn)停運(yùn)容限因子指定所述至少一個(gè)節(jié)點(diǎn)離線的単元的百分比,以在所述升級(jí)窗ロ期間應(yīng)用所述可用的多個(gè)滾動(dòng)升級(jí)策略中所選擇的ー個(gè)。
5.如權(quán)利要求4所述的系統(tǒng),其中所述管理模塊還適配來定義所述多個(gè)滾動(dòng)升級(jí)策略的每ー個(gè)。
6.如權(quán)利要求5所述的系統(tǒng),其中所述管理模塊還適配來關(guān)于所述定義,指定所述至少ー個(gè)可選的升級(jí)參數(shù),包括指定升級(jí)過程的開始時(shí)間和持續(xù)時(shí)間之一。
7.—種通過處理器與存儲(chǔ)器設(shè)備通信來促進(jìn)計(jì)算存儲(chǔ)環(huán)境中的升級(jí)的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品包括存儲(chǔ)了計(jì)算機(jī)可讀程序代碼部分的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀程序代碼部分包括第一可執(zhí)行部分,用于選擇可用的多個(gè)滾動(dòng)升級(jí)策略之一,所述滾動(dòng)升級(jí)策略為升級(jí)窗ロ注冊至少一個(gè)可選的升級(jí)參數(shù);以及第二可執(zhí)行部分,用于為所述計(jì)算存儲(chǔ)環(huán)境中的至少ー個(gè)節(jié)點(diǎn)設(shè)置節(jié)點(diǎn)停運(yùn)容限因子,其中所述節(jié)點(diǎn)停運(yùn)容限因子指定所述至少一個(gè)節(jié)點(diǎn)離線的単元的百分比,以在所述升級(jí)窗ロ期間應(yīng)用所述可用的多個(gè)滾動(dòng)升級(jí)策略中所選擇的ー個(gè)。
8.如權(quán)利要求7所述的計(jì)算機(jī)程序產(chǎn)品,還包括第三可執(zhí)行部分,用于定義所述多個(gè)滾動(dòng)升級(jí)策略的每ー個(gè)。
9.如權(quán)利要求8所述的計(jì)算機(jī)程序產(chǎn)品,還包括第四可執(zhí)行部分,用于關(guān)于所述定義, 指定所述至少一個(gè)可選的升級(jí)參數(shù),包括指定升級(jí)過程的開始時(shí)間和持續(xù)時(shí)間之一。
10.一種通過處理器與存儲(chǔ)器設(shè)備通信來促進(jìn)計(jì)算存儲(chǔ)環(huán)境中的升級(jí)的方法,包括 定義并行升級(jí)置信度因子,其對應(yīng)于所述計(jì)算存儲(chǔ)環(huán)境中允許并發(fā)接收升級(jí)過程的節(jié)點(diǎn)単元的比例;以及對至少ー個(gè)所述節(jié)點(diǎn)單元執(zhí)行所述升級(jí)過程,其中關(guān)于所述至少一個(gè)節(jié)點(diǎn)単元的升級(jí)過程的成功完成,提高所述并行升級(jí)置信度因子,以允許所述計(jì)算存儲(chǔ)環(huán)境中的額外的節(jié)點(diǎn)単元并發(fā)接收所述升級(jí)過程。
11.如權(quán)利要求10所述的方法,還包括關(guān)于對所述至少一個(gè)節(jié)點(diǎn)単元中的另ー個(gè)執(zhí)行所述升級(jí)過程,判定是否已超過所述并行升級(jí)置信度因子。
12.如權(quán)利要求11所述的方法,其中,如果判定已超過所述并行升級(jí)置信度因子,則將對所述節(jié)點(diǎn)單元的升級(jí)過程的并發(fā)執(zhí)行限制為與所述并行升級(jí)置信度因子一致。
13.一種用于促進(jìn)計(jì)算存儲(chǔ)環(huán)境中的升級(jí)的系統(tǒng),包括管理模塊,其能夠在所述計(jì)算存儲(chǔ)環(huán)境中的管理節(jié)點(diǎn)上操作,其中所述管理模塊適配來定義并行升級(jí)置信度因子,其對應(yīng)于所述計(jì)算存儲(chǔ)環(huán)境中允許并發(fā)接收升級(jí)過程的節(jié)點(diǎn)単元的比例;以及對至少ー個(gè)所述節(jié)點(diǎn)單元執(zhí)行所述升級(jí)過程,其中關(guān)于所述至少一個(gè)節(jié)點(diǎn)単元的升級(jí)過程的成功完成,提高所述并行升級(jí)置信度因子,以允許所述計(jì)算存儲(chǔ)環(huán)境中的額外的節(jié)點(diǎn)単元并發(fā)接收所述升級(jí)過程。
14.如權(quán)利要求13所述的系統(tǒng),其中所述管理模塊還適配來關(guān)于對所述至少一個(gè)節(jié)點(diǎn)単元中的另ー個(gè)執(zhí)行所述升級(jí)過程,判定是否已超過所述并行升級(jí)置信度因子。
15.如權(quán)利要求14所述的系統(tǒng),其中所述管理模塊還適配來如果判定已超過所述并行升級(jí)置信度因子,則將對所述節(jié)點(diǎn)単元的升級(jí)過程的并發(fā)執(zhí)行限制為與所述并行升級(jí)置信度因子一致。
16.一種通過處理器與存儲(chǔ)器設(shè)備通信來促進(jìn)計(jì)算存儲(chǔ)環(huán)境中的升級(jí)的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品包括存儲(chǔ)了計(jì)算機(jī)可讀程序代碼部分的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀程序代碼部分包括第一可執(zhí)行部分,用于定義并行升級(jí)置信度因子,其對應(yīng)于所述計(jì)算存儲(chǔ)環(huán)境中允許并發(fā)接收升級(jí)過程的節(jié)點(diǎn)單元的比例;以及第二可執(zhí)行部分,用于對至少ー個(gè)所述節(jié)點(diǎn)單元執(zhí)行所述升級(jí)過程,其中關(guān)于所述至少ー個(gè)節(jié)點(diǎn)單元的升級(jí)過程的成功完成,提高所述并行升級(jí)置信度因子,以允許所述計(jì)算存儲(chǔ)環(huán)境中的額外節(jié)點(diǎn)単元并發(fā)接收所述升級(jí)過程。
17.如權(quán)利要求16所述的計(jì)算機(jī)程序產(chǎn)品,還包括第三可執(zhí)行部分,用于關(guān)于對所述至少ー個(gè)節(jié)點(diǎn)單元中的另ー個(gè)執(zhí)行所述升級(jí)過程,判定是否已超過所述并行升級(jí)置信度因子。
18.如權(quán)利要求17所述的計(jì)算機(jī)程序產(chǎn)品,還包括第四可執(zhí)行部分,用于如果判定已超過所述并行升級(jí)置信度因子,則將對所述節(jié)點(diǎn)単元的所述升級(jí)過程的并發(fā)執(zhí)行限制為與所述并行升級(jí)置信度因子一致。
19.一種通過處理器與存儲(chǔ)器設(shè)備通信來促進(jìn)計(jì)算存儲(chǔ)環(huán)境中的升級(jí)的方法,包括 檢查所述計(jì)算存儲(chǔ)環(huán)境中升級(jí)過程已經(jīng)失敗的節(jié)點(diǎn)単元的當(dāng)前數(shù)量作為錯(cuò)誤傳播計(jì)數(shù),將所述錯(cuò)誤傳播計(jì)數(shù)與預(yù)定錯(cuò)誤傳播容限值進(jìn)行比較;以及報(bào)告是否已超過所述預(yù)定錯(cuò)誤傳播容限值,以提供所述升級(jí)過程的健康狀態(tài),其中如果對額外節(jié)點(diǎn)單元的升級(jí)過程的后續(xù)執(zhí)行不成功,則遞增所述錯(cuò)誤傳播計(jì)數(shù)并報(bào)告關(guān)鍵錯(cuò)誤,以便避免升級(jí)錯(cuò)誤的傳播。
20.如權(quán)利要求19所述的方法,還包括關(guān)于所述升級(jí)過程的后續(xù)執(zhí)行,設(shè)置至少ー個(gè)持續(xù)檢查點(diǎn)時(shí)間戳,以提供錯(cuò)誤恢復(fù)。
21.如權(quán)利要求19所述的方法,在檢查節(jié)點(diǎn)単元的當(dāng)前數(shù)量之前,還包括估計(jì)作為從所述升級(jí)過程的之前執(zhí)行獲得的時(shí)間信息的函數(shù)的、對額外節(jié)點(diǎn)單元執(zhí)行所述升級(jí)過程所需要的時(shí)間,以便對所需的時(shí)間的估計(jì)提供更高的精度,以及將所需要的時(shí)間的估計(jì)值與預(yù)定的升級(jí)窗ロ進(jìn)行比較,其中如果所述估計(jì)值在所述預(yù)定的升級(jí)窗口內(nèi),則執(zhí)行對所述額外節(jié)點(diǎn)単元的后續(xù)升級(jí)過程。
22.一種用于促進(jìn)計(jì)算存儲(chǔ)環(huán)境中的升級(jí)的系統(tǒng),包括管理模塊,其能夠在所述計(jì)算存儲(chǔ)環(huán)境中的管理節(jié)點(diǎn)上操作,其中所述管理模塊適配來檢查所述計(jì)算存儲(chǔ)環(huán)境中升級(jí)過程已經(jīng)失敗的節(jié)點(diǎn)単元的當(dāng)前數(shù)量作為錯(cuò)誤傳播計(jì)數(shù),將所述錯(cuò)誤傳播計(jì)數(shù)與預(yù)定錯(cuò)誤傳播容限值進(jìn)行比較;以及報(bào)告是否已超過所述預(yù)定錯(cuò)誤傳播容限值,以提供所述升級(jí)過程的健康狀態(tài),其中如果對額外節(jié)點(diǎn)單元的升級(jí)過程的后續(xù)執(zhí)行不成功,則遞增所述錯(cuò)誤傳播計(jì)數(shù)并報(bào)告關(guān)鍵錯(cuò)誤,以便避免升級(jí)錯(cuò)誤的傳播。
23.如權(quán)利要求22所述的系統(tǒng),其中所述管理模塊還適配來關(guān)于所述升級(jí)過程的后續(xù)執(zhí)行,設(shè)置至少ー個(gè)持續(xù)檢查點(diǎn)時(shí)間戳,以提供錯(cuò)誤恢復(fù)。
24.如權(quán)利要求22所述的系統(tǒng),其中所述管理模塊還適配來估計(jì)作為從所述升級(jí)過程的之前執(zhí)行獲得的時(shí)間信息的函數(shù)的、對額外節(jié)點(diǎn)單元執(zhí)行所述升級(jí)過程所需要的時(shí)間,以便對所需的時(shí)間的估計(jì)提供更高的精度,以及將所需要的時(shí)間的估計(jì)值與預(yù)定的升級(jí)窗ロ進(jìn)行比較,其中如果所述估計(jì)值在所述預(yù)定的升級(jí)窗口內(nèi),則執(zhí)行對所述額外節(jié)點(diǎn)単元的后續(xù)升級(jí)過程。
25.一種用于通過處理器與存儲(chǔ)器設(shè)備通信來促進(jìn)計(jì)算存儲(chǔ)環(huán)境中的升級(jí)的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品包括存儲(chǔ)了計(jì)算機(jī)可讀程序代碼部分的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀程序代碼部分包括第一可執(zhí)行部分,用于檢查所述計(jì)算存儲(chǔ)環(huán)境中升級(jí)過程已經(jīng)失敗的節(jié)點(diǎn)単元的當(dāng)前數(shù)量作為錯(cuò)誤傳播計(jì)數(shù),將所述錯(cuò)誤傳播計(jì)數(shù)與預(yù)定錯(cuò)誤傳播容限值進(jìn)行比較;以及第二可執(zhí)行部分,用于報(bào)告是否已超過所述預(yù)定錯(cuò)誤傳播容限值,以提供所述升級(jí)過程的健康狀態(tài),其中如果對額外節(jié)點(diǎn)單元的升級(jí)過程的后續(xù)執(zhí)行不成功,則遞增所述錯(cuò)誤傳播計(jì)數(shù)并報(bào)告關(guān)鍵錯(cuò)誤,以便避免升級(jí)錯(cuò)誤的傳播。
26.如權(quán)利要求25所述的計(jì)算機(jī)程序產(chǎn)品,還包括第三可執(zhí)行部分,用于關(guān)于所述升級(jí)過程的后續(xù)執(zhí)行,設(shè)置至少ー個(gè)持續(xù)檢查點(diǎn)時(shí)間戳,以提供錯(cuò)誤恢復(fù)。
27.如權(quán)利要求25所述的計(jì)算機(jī)程序產(chǎn)品,還包括第三可執(zhí)行部分,用于估計(jì)作為從所述升級(jí)過程的之前執(zhí)行獲得的時(shí)間信息的函數(shù)的、對額外節(jié)點(diǎn)單元執(zhí)行所述升級(jí)過程所需要的時(shí)間,以便對所需的時(shí)間的估計(jì)提供更高的精度,以及第四可執(zhí)行部分,用于將所需要的時(shí)間的估計(jì)值與預(yù)定的升級(jí)窗ロ進(jìn)行比較,其中如果所述估計(jì)值在所述預(yù)定的升級(jí)窗口內(nèi),則執(zhí)行對所述額外節(jié)點(diǎn)単元的后續(xù)升級(jí)過程。
全文摘要
提供了用于促進(jìn)計(jì)算存儲(chǔ)環(huán)境中的升級(jí)的各種方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品實(shí)施例。在一個(gè)這種實(shí)施例中,選擇為升級(jí)窗口注冊至少一個(gè)可選的升級(jí)參數(shù)的多個(gè)可用滾動(dòng)升級(jí)策略之一。對計(jì)算存儲(chǔ)環(huán)境中的至少一個(gè)節(jié)點(diǎn)設(shè)置節(jié)點(diǎn)停運(yùn)容限因子。節(jié)點(diǎn)停運(yùn)容限因子指定所述至少一個(gè)節(jié)點(diǎn)中離線單元的百分比,以在升級(jí)窗口期間應(yīng)用所述多個(gè)可用滾動(dòng)升級(jí)策略中的所選擇的一個(gè)。
文檔編號(hào)G06F9/445GK102597955SQ201080049013
公開日2012年7月18日 申請日期2010年10月26日 優(yōu)先權(quán)日2009年11月2日
發(fā)明者A.J.西亞拉維拉, B.L.安德魯斯, J.W.戴恩, N.坎德爾瓦爾 申請人:國際商業(yè)機(jī)器公司