分布式系統中的協調升級的製作方法
2023-06-15 17:35:41 3
專利名稱:分布式系統中的協調升級的製作方法
技術領域:
本發明涉及分布式系統中的協調升級。
背景技術:
分布式系統可具有在分開的進程中執行的應用程式可執行代碼的多個副本。在一些實施例中,應用程式的各個實例可運行在不同硬體平臺上。在許多情況下,負載平衡系統可被用於將工作負載分布到應用程式的每個實例上。分布式應用程式常常被用於高度的可伸縮性可能是有用的場合。例如,網站或web應用程式可被伸縮,當遇到大量猛增的通信量時,可預期多個進程。在這種情況下,應用程式可被複製成數百或數千個實例,各個實例並行運行。
發明內容
分布式應用程式可通過使用由應用程式提供的信息來更新,以確定分組、定序、以及是否進行更新順序。應用程式可向更新順序提供輸入,並且可使更新順序在更新之前修復一個或多個副本。更新機制可被用於改變分布式應用程式拓撲結構以及對應用程式可執行代碼、應用程式配置、請求作業系統、虛擬機、以及主機系統等作出改變。在一些情況下,分布式應用程式可採用選出成員數(quorum)來確定當前是哪個版本,並且選出成員數可在更新過程期間改變。提供本發明內容以便以簡化的形式介紹將在以下具體實施方式
中還描述的一些概念。本發明內容並不旨在標識所要求保護主題的關鍵特徵或必要特徵,也不旨在用於限制所要求保護主題的範圍。
在附圖中圖I是示出雲計算環境和平臺的實施例的圖示。圖2是示出用於更新分布式應用程式的方法的實施例的時間線圖示。圖3是示出用於確定更新域更新成功的方法的實施例的流程圖示。圖4是示出在基於選出成員數的分布式應用程式上執行的更新的示例順序的實施例的圖示。
具體實施例方式可使用來自應用程式的輸入來對分布式應用程式進行更新以確定如何執行更新、何時可繼續進行更新,以及確定在更新期間是否可能已產生問題。應用程式可以選出成員數來運行以確定當前是應用程式的哪個版本,並且當前版本可隨著更新進度而改變。更新機制可允許分布式應用程式在更新過程期間高度可用。更新可在各組應用程式的副本上執行,使得當一個組在被更新時,其它組可保持運行。
組可被定義為更新域。在一更新域中,一組應用程式進程可作為原子操作(atomicoperation)來更新。如果對於更新域中的每個進程更新沒有成功,則更新可被掛起或回滾到之前的版本。更新機制可允許更新在應用程式本身上執行,這可包括改變應用程式配置以及更新應用程式可執行代碼。更新機制還可被用於在主機設備、虛擬機、虛擬機中的客作業系統上執行更新,以及更新應用程式副本的拓撲結構。本說明書通篇中,在所有附圖的描述中,相同的附圖標記表示相同的元素。在元素被稱為被「連接」或「耦合」時,這些元素可以直接連接或耦合在一起,或者也可以存在一個或多個中間元素。相反,在元素被稱為被「直接連接」或「直接耦合」時,不存在中間元素。本發明可被具體化為設備、系統、方法、和/或電腦程式產品。因此,本發明主題的部分或全部可以用硬體和/或軟體(包括固件、常駐軟體、微碼、狀態機、門陣列等)來具 體化。此外,本發明主題可以採用其上嵌入有供指令執行系統使用或結合其使用的計算機可使用或計算機可讀的程序代碼的計算機可使用或計算機可讀的存儲介質上的電腦程式產品的形式。在本文的上下文中,計算機可使用或計算機可讀介質可以是可包含、存儲、通信、傳播、或傳輸程序以供指令執行系統、裝置或設備使用或結合其使用的任何介質。計算機可使用或計算機可讀介質可以是,例如,但不限於,電、磁、光、電磁、紅外、或半導體系統、裝置、設備或傳播介質。作為示例而非限制,計算機可讀介質可包括計算機存儲介質和通信介質。計算機存儲介質包括以用於存儲諸如計算機可讀指令、數據結構、程序模塊或其它數據這樣的信息的任意方法或技術來實現的易失性和非易失性、可移動和不可移動介質。計算機存儲介質包括,但不限於,RAM、ROM、EEPR0M、快閃記憶體或其它存儲器技術、CD-ROM、數字多功能盤(DVD)或其它光碟存儲、磁帶盒、磁帶、磁碟存儲或其它磁性存儲設備、或能用於存儲所需信息且可以由指令執行系統訪問的任何其它介質。注意,計算機可使用或計算機可讀介質可以是其上列印有程序的紙張或其他合適的介質,因為程序可以經由例如對紙張或其他介質的光學掃描而電子地捕獲,隨後如有必要被編譯、解釋,或以其他合適的方式處理,並隨後存儲在計算機存儲器中。通信介質通常以諸如載波或其他傳輸機制的已調製數據信號來體現計算機可讀指令、數據結構、程序模塊或其他數據,並包括任意信息傳送介質。術語「已調製數據信號」可以被定義為其一個或多個特徵以在信號中編碼信息的方式被設定或更改的信號。作為示例而非限制,通信介質包括諸如有線網絡或直接線連接之類的有線介質,以及諸如聲學、RF、紅外及其他無線介質之類的無線介質。上述的任意組合也應包含在計算機可讀介質的範圍內。當本發明在計算機可執行指令的一般上下文中具體化時,該實施例可以包括由一個或多個系統、計算機、或其他設備執行的程序模塊。一般而言,程序模塊包括執行特定任務或實現特定抽象數據類型的例程、程序、對象、組件、數據結構等等。通常,程序模塊的功能可以在各個實施例中按需進行組合或分布。圖I是示出具有用於升級分布式應用程式的系統的雲計算系統的實施例100的圖示。實施例100是雲計算平臺和環境的簡化示例,在該雲計算平臺和環境中,分布式系統可在保持高可用性的同時被升級。圖I的圖示示出系統的各個功能組件。在某些情況下,組件可以是硬體組件、軟體組件、或硬體和軟體的組合。某些組件可以是應用層軟體,而其他組件可以是作業系統層組件。在某些情況下,一個組件到另一個組件的連接可以是緊密連接,其中兩個或更多個組件在單個硬體平臺上操作。在其他情況下,連接可以通過跨長距離的網絡連接來進行。各實施例可以使用不同的硬體、軟體、以及互連體系結構來實現所描述的功能。系統100是雲計算環境的示例,其中應用程式可通過使用應用程式進程的許多個副本來執行。副本可以是同一可執行代碼的相同的副本並具有相同的配置。在執行對系統的更新時,應用程式可具有最小停機時間或沒有停機時間。在一些情況下,應用程式可體驗到有些低的能力,但應用程式可在更新期間繼續可用。雲服務管理器可使用更新過程來將改變應用到雲服務基礎架構,並且應用程式所有者可使用相同的更新過程來在應用程式上執行更新。
在一些雲計算環境中,雲服務提供者可管理底層硬體並向應用程式提供諸如作業系統之類的某些軟體服務。在這些實施例中,雲服務提供者可周期性地更新主機硬體和軟體,以及在應用程式可執行於其上的各虛擬機上執行的軟體。例如,應用程式可在虛擬機中的客作業系統上執行。應用程式所有者或管理員可為客作業系統配置雲服務提供者以在更新可用時實施所有的安全性更新。在這一示例中,應用程式可每周、每天或者甚至在某些情況下每小時地使更新被應用。在一些情況下,應用程式所有者或管理員也可將更新應用到應用程式。更新可以是對應用程式的配置改變,或者可以涉及對應用程式的可執行代碼的更新。在一些情況下,可通過添加或者移除應用程式進程的副本來改變應用程式拓撲結構。當更新被執行時,應用程式進程可被一起分組到更新域中。每個更新域可以是可在同一時間以及以一種原子方式來更新的一組進程。分組可由應用程式確定,而不是使外部更新機制來確定分組。當應用程式確定分組時,應用程式可使用應用程式拓撲結構或應用程式內的其它信息來幫助外部更新機制確定適合的一組更新域以及將要被更新的更新域的順序。在許多實施例中,應用程式可以比外部源更了解可能在組織和管理更新中可能有用的相關信息。例如,應用程式可以了解應用程式進程的全部副本或實例。可通過根據在其上執行進程的主機設備對應用程式進程進行分組來執行對主機設備的更新,諸如升級主機設備作業系統。在另一示例中,應用程式可基於它們的工作負載對副本分組。在這一示例中,具有低工作負載的各組應用程式進程可被分組在一起並首先被更新,而具有較高工作負載的應用程式進程可被分組在一起並稍後被更新。在一些實施例中,應用程式可以是基於選出成員數的應用程式,其中幾個應用程式進程可並行運行,且隨後通過比較來自幾個進程的結果來「投票」或達成一致。在這些實施例中,對當前版本的確定可通過選出成員數來確定,並且僅僅那些運行在當前版本上的進程可被視為有效。可能執行較舊版本的進程可被忽略或不可運行直至它們被更新。實施例100示出可構成雲計算環境的設備102。在許多雲計算環境中,多個硬體平臺可被組織在一起以為某些應用程式提供大量計算能力。在許多實施例中,數據中心可包含數千臺計算機,諸如伺服器計算機,並且可具有可向計算機供應的、用於運行不同應用程式的各種管理工具。在許多這類實施例中,管理工具可為各種承租人供應資源。每個承租人可與雲計算服務提供者訂立合約以主存一個或多個應用程式。承租人的資源可與其它承租人的資源隔離開,使得沒有承租人可訪問其它承租人的數據或可執行代碼。設備102可以是傳統的計算機設備,諸如個人計算機或伺服器計算機,並且可具有硬體平臺104和各種軟體組件106。硬體平臺104可以包括處理器108、隨機存取存儲器110、以及本地存儲112。在一些實施例中,處理器108可具有一個或多個處理器或核心。在一些情況下,單處理器108可具有兩個、四個、八個、十六個、或其它數量的核心,並且某些硬體平臺可具有兩個或更多處理器108。隨機存取存儲器110可以是易失性存儲器並且可以是可由處理器108直接訪問的高速存儲器。本地存儲112可以是也可由處理器108訪問的非易失性存儲器,但在許多情 況下,本地存儲112可能比隨機存取存儲器110慢。本地存儲112可以或不可以由承租人進程訪問。在許多實施例中,在應用程式可能正執行時,本地存儲112可被用於的承租人數據的臨時存儲,而永久的或長期的存儲可由雲存儲系統130來提供。硬體組件104可包括用戶接口 114和網絡接口 116。用戶接口 114可以是物理用戶接口,其可包括鍵盤、顯示器、以及定點設備。在一些實施例中,用戶界面可以被傳輸給位於遠程的另一設備。網絡接口 116可以是連接到任何類型的網絡的任何類型的連接。在常規數據中心中,網絡接口 116可以是有線乙太網連接。軟體組件106可包括主作業系統118和系統管理程序120。在一些實施例中,系統管理程序120可在硬體平臺104上本地地執行而無需使用分開的作業系統118。系統管理程序120可允許一個或多個虛擬機122在硬體平臺104上執行。每個虛擬機122可以是物理硬體平臺104的軟體仿真,並且可與其它虛擬機分開地且獨立地運行。在許多實施例中,單硬體平臺可並行執行數個虛擬機。在許多實施例中,虛擬機122可以是數據中心內不同承租人之間的邏輯劃分,其中每個承租人進程可在專用於該承租人的虛擬機上執行。在每一虛擬機122內,可執行客作業系統124。術語「客」作業系統指的是虛擬機的作業系統,與「主」作業系統相對。在許多實施例中,客作業系統124可以不同於主作業系統118。在這類實施例中,單個硬體平臺104可具有並行執行的許多個不同的客作業系統。應用程式副本126可在虛擬機122內執行。在一些實施例中,單個應用程式副本126可在單個虛擬機122內執行,而在另一些實施例中,不止一個應用程式副本126可在單個虛擬機中執行。雲平臺可以連接到網絡128,網絡128可以是區域網、廣域網,並且可包括網際網路。雲存儲系統130可具有可由各個虛擬機122和應用程式副本126訪問的大存儲132。許多應用程式可通過各種客戶機設備134來訪問。客戶機設備134可以是可通過網絡128訪問應用程式的任何類型的計算設備。客戶機設備134可以是個人計算機、手持式個人數字助理、行動電話、伺服器計算機、網絡設備、遊戲控制臺、或任何其它類型的計算設備。
雲管理系統136可以為雲計算環境和執行在該環境內的應用程式執行管理功能中的許多功能。雲管理系統136可具有其上可執行構造控制器140的硬體平臺138。在許多實施例中,硬體平臺138可以是設備102的雲計算環境。構造控制器140可以是可為雲計算環境執行各種管理功能的應用程式。管理功能可包括為各個承租人供應雲計算環境、添加或移除硬體平臺、管理雲計算環境內的工作負載、以及執行對硬體、主作業系統、虛擬機、客作業系統、以及應用程式的更新。作為更新過程的一部分,構造控制器140可接收來自各種源的更新142,諸如應用程式開發者、作業系統提供者、安全性提供者、或其它源。構造控制器140可通過使應用程式涉及來確定如何對應用程式副本分組以及處理各組的順序來在雲計算環境上執行更新。圖2是示出用於更新分布式應用程式的方法的實施例200的時間線圖示。實施例200的過程是構造控制器202可如何與主應用程式副本204和被組織到更新域206內的一 組應用程式副本交互的簡化的示例。構造控制器202的操作被示出在左欄,域主應用程式副本204的操作被示出在中間欄,而更新域206的操作被示出在右欄。其它實施例可以使用不同的序列、更多或更少的步驟、以及不同的命名或術語,來完成類似功能。在一些實施例中,各種操縱或操作集合可以與其他操作以同步方式或以異步方式並行執行。此處所選的步驟是為了以簡化的形式示出一些操作原理來選擇的。實施例200示出用於對分布式應用程式執行更新的方法的一部分。分布式應用程式可以是在分開且獨立的多個進程上執行的任何應用程式。在許多實施例中,分布式應用程式可在許多不同的進程上執行,有時候數目達數千或者甚至數十萬進程。許多分布式進程可以相同配置運行相同的可執行代碼。許多這類進程還可以無狀態方式運行。由於更新大量的進程可能是非常耗時的任務,因此可在進程組中更新應用程式。每個組可被稱為一個更新域。當一個更新域正被更新時,其它更新域可保持工作。更新方法可使用來自應用程式的輸入以確定進程如何被分組以及以什麼順序來對組或更新域進行更新。來自應用程式的輸入可運行應用程式確定最優更新方法。在一些實施例中,最優更新方法可基於特定情況和正被執行的更新類型來改變。實施例200的方法可被執行數遍以完成更新。例如,拓撲結構的改變可在三個步驟中執行。在第一步,更新步驟可開啟各進程上的一個特定埠,使得可訪問新的拓撲結構。在第二步驟,可以用在新的埠上可用的新的應用程式副本來實現該新的拓撲結構。在第三步驟,舊拓撲結構的舊的、未使用的埠可被關閉。在該拓撲結構示例中,實施例200的更新方法可被執行三次以完成一次更新。在一些情形下,實施例200的更新方法可被執行一次、兩次或更多次以完成對系統的改變。實施例的200更新方法可被用於通過更新應用程式配置或應用程式可執行代碼來更新應用程式。相同的更新方法還可被用於更新各種基礎架構組件,諸如更新主機硬體、包括主作業系統的主機軟體、虛擬機配置、客作業系統、以及可運行在主機或虛擬機上的其它軟體組件。更新方法可被用於更新可執行代碼以及重新配置硬體或軟體組件而不改變可執行代碼。在框208,應用程式可以正常操作運行。在框210,構造控制器202可標識待執行的更新。更新可由應用程式擁有者或雲計算服務的承租人來定義。在一些情況下,更新可由雲計算服務的管理員來定義。可手動地或自動地檢測更新。在對應用程式進行代碼更新或改變的情況下,可以手動地標識和啟動更新。在對作業系統進行安全性更新的情況下,可以通過訂閱來自作業系統製造商的安全性更新服務來自動地標識更新。在執行更新之前,在框212中,構造控制器202可向主應用程式副本204發送查詢。主應用程式副本204可以是可對管理性查詢作出響應並且可為應用程式執行管理性功能的應用程式副本。在一些實施例中,可能不存在可被指定為主副本的特定副本。出於本實施例的目的,主應用程式副本204可以指應用程式的任何管理性部分。在框214中,主應用程式副本204可接收查詢,並且在框216中,主應用程式副本204可確定更新域。在框218,更新域可被返回給構造控制器202,並且在框220,接收所返回的更新域。在框222,構造控制器202可發送對於更新域的順序的查詢。順序查詢可在框224中被接收並在框226中被確定。更新順序可在框228中被返回並在框230中被接收。
更新域可以是在其上可執行更新的各組應用程式副本。在一些實施例中,更新域可根據情況改變。例如,對硬體的更新可根據運行在相同硬體平臺上的副本來對應用程式進行分組。在一些實施例中,更新域可包含相同數量的應用程式副本,或者可以是大致相同大小,諸如在另一更新域的應用程式副本的數量的10 %以內。在其它實施例中,一些更新域可以比其它的、較小的更新域大得多。在硬體拓撲結構或數據中心拓撲結構可能對於各個硬體平臺或數據中心相當不同時,這類實施例可能是有用的。在另一示例中,可以在位於跨國家或跨全球的不同數據中心中的應用程式副本上執行更新。在這一情況下,更新域可被定義使得相同數據中心中的那些應用程式副本可被一起更新。這一分組可允許整個數據中心上的應用程式副本被更新,接著前進到另一數據中心。這一分組可以被排序,使得具有輕負載的數據中心可被首先更新。在許多這種情形下,遍布全球的數據中心可具有隨一天中的時間而改變的工作負載。通過根據時區來對待執行的更新進行排序,可以以對工作負載的最小中斷的形式來執行更新。在類似的示例中,在不同數據中心中跨各個應用程式副本執行的更新可以被分組,使得每一個更新域可包含兩個或更多數據中心中的應用程式副本。這一分組可在一些應用程式副本上執行更新,但可至少保留一些應用程式副本運行在每個數據中心中。在這一分組中,可對順序進行配置以使每個數據中心可具有至少一些應用程式進程在更新期間執行。在一些實施例中,構造控制器202可將與更新有關的信息傳送給主應用程式副本204,以使應用程式副本可為更新確定適當的分組和順序。構造控制器202可指示該更新是耗時的還是快速的,是否可能包含應用程式、客作業系統或者主作業系統的重啟,更新是否影響應用程式、虛擬機或主機設備,或者構造控制器202可指示主應用程式副本204可考慮的其它因素。在一些實施例中,多步驟更新順序中的最初的步驟可以是標識其中應用程式副本可能未正確工作並因此不能被更新的任何更新域。在這一步驟,可以分析每個更新域以確定該更新域是否包含被掛起的、沒有啟動的、未響應的、或者其它具有潛在問題的應用程式副本。在這一步驟可被執行後,可啟動對問題副本的修復進程以嘗試治癒該副本。在一些情況下,治癒可涉及重啟應用程式進程或客作業系統,或者可涉及將應用程式副本移動到另一硬體平臺或執行其它修復功能。在已執行了這樣的治癒操作之後,更新順序可前進到另一步驟,在該步驟可執行對系統的實際改變。在這一示例中,在對應用程式或底層硬體和軟體組件進行改變之前,治癒應用程式副本的步驟可使應用程式副本滿足用於更新的條件。在框232中,可以處理每一更新域。對於每個更新域,可執行框234-260的過程。在對一個更新域執行了框234-260的過程之後,可處理順序中的下一更新域。對於框232中的每個更新域,在框234,可使更新被執行。在應用程式域206中,更新可在框236中被接收,並且對於框238中的每個副本,可在框240中執行更新。在一些情況下,更新可以由在主機上或虛擬機內運行的應用程式來執行。一些這 類更新可對主作業系統或客作業系統、與主作業系統或客作業系統相關聯的應用程式作出修改,或者可執行可以或可以不與應用程式相關聯的其它改變。在某一時刻,在框242,構造控制器202可發出一個查詢以確定更新是否完成。在框244,查詢可由更新域206接收,並且在框246,查詢被評估。如果更新已被完成並且應用程式操作是穩定的,則在框248,更新域206可發送結果,在框250,該結果可由構造控制器202接收。如果結果是穩定的,則過程返回到框232以處理下一個更新域。如果在框246中更新域還沒有成功完成更新,則在框254,更新域206可發送結果,在框256,該結果可由構造控制器202接收。構造控制器202可具有可允許超時操作的一組策略或其它邏輯。如果在框258沒有發生超時,則過程可返回到框242以執行另一狀態查詢。如果在框258發生超時,則在框260,構造控制器202可針對每一策略定義發布默認結果O框260的默認結果可取決於各種情形。例如,如果更新正對主機硬體或軟體進行改動,則應用程式狀態可被忽略並且下一更新域可被處理。在這一示例中,來自應用程式的輸入可能與確定更新是否成功無關。在另一示例中,如果更新正為應用程式安裝新的可執行代碼,並且應用程式並沒指示應用程式代碼正以穩定的方式運行,則更新操作可以被掛起並且人類管理員可被警告。在另一實施例中,這一結果可記錄情況,並且可自動嘗試將應用程式代碼回退到先前版本。實施例200示出更新過程期間構造控制器202和應用程式之間的數個交互。交互可允許來自應用程式的輸入或提示,以影響管理系統如何實現並驗證更新。來自應用程式的反饋和輸入可允許更高效的更新過程,並且可在更新發生時對應用程式的性能進行驗證。此外,可通過將更新應用於各組應用程式副本來在各階段中實現更新,由此允許在更新期間其它應用程式副本保持運行。圖3是顯示用於應用程式更新域確定更新是成功還是失敗的方法的實施例300的流程圖示。實施例300的過程可在例如實施例200的框244至246之間執行。其它實施例可以使用不同的序列、更多或更少的步驟、以及不同的命名或術語,來完成類似功能。在一些實施例中,各種操縱或操作集合可以與其他操作以同步方式或以異步方式並行執行。此處所選的步驟是為了以簡化的形式示出一些操作原理來選擇的。實施例300可在兩種不同情況下執行。在第一種情況下,在框302,可從構造控制器接收對更新中的狀態的查詢。在另一種情況下,在框304,對於更新域的更新可能已完成。在任一種情況下,應用程式的操作特性和應用程式的環境可被評估以確定更新是否已成功。在框306,可為更新域評估每個應用程式副本。在框308,對於每個副本,可對作業系統進程進行評估以檢測任何故障。如果在框308存在故障,則在框310,對故障的關鍵性質進行評估。如果在框310故障是關鍵的,則在框312,對副本的更新被標記為失敗。如果在框310故障不是關鍵的,則過程可繼續。在實施例300中,邏輯被配置使得失敗的第一指示可使過程退出並處理下一副本。在框312,過程可返回框306以處理另一副本。在其它實施例中,邏輯可被定義以使即使檢測到故障,過程可繼續到框314。 在框314,與應用程式有關的進程可被分析以確定是否發生任何故障。如果在框314發生了故障,則在框316,超時定時器可使過程循環返回到框314直到超時發生。如果在框316超時發生,則在框318,可指示失敗。如果在框314,與應用程式有關的進程是可運行的,則在框320,應用程式可運行一最小時間以在框322確定應用程式是否穩定。如果在框322,應用程式是不穩定的,則在框324,可指示失敗。如果在框322,應用程式是穩定的,則在框326,應用程式副本可被標識為OK0在一些實施例中,在框320,可使用測試算法或其它過程來鍛鍊應用程式。測試算法可鍛鍊應用程式副本以對該副本施壓並確定該副本是否穩定。實施例300示出某些信息的示例,該信息可由應用程式提供給構造控制器作為更新過程的一部分。其它實施例可使用不同機制來確定由應用程式提供給構造控制器的信
肩、O圖4是示出顯示在對不同更新域執行的更新的順序的示例實施例400的時間線圖示。實施例400可示出用於基於選出成員數的應用程式中、用於確定哪一版本的應用程式可具有選出成員數以對應用程式請求作出響應的步驟順序。在基於選出成員數的應用程式中,兩個或多個應用程式進程可並行運行。在每個應用程式進程完成一任務之後,可發起對於任務的正確應答的選出成員數或「投票」。接收到最多投票的應答被確定為是正確的。在實施例400的示例中,五個不同更新域被呈現在圖表頂部的水平軸上。這些更新域是UDl 402、UD2 404、UD3 406、UD4 408以及UD5 410。縱軸可示出更新域的狀態以及具體示出隨時間的更新域的版本,其中在圖表中時間向下推進。在時間412,所有的更新域被顯示為版本1,其中UD2具有「(P) 」指示符,其示出UD2是主更新域。主更新域的指定可指示更新域或更新域中的進程是主應用程式副本。在框414中,可執行更新操作,其中UDl被更新。在時間416,UDl被更新到版本2,而剩餘的更新域處於版本I。在框418中,可執行更新操作,其中UD2被更新。在時間420,UDl和UD2處於到版本2,而剩餘的更新域處於版本I。由於選出成員數的原因,主更新域可從UD2被改變到UD3,因為UD3可處於版本I且版本I是大多數。在更新過程至這一刻的期間,版本I的應用程式副本可以正正常地運行並且對查詢作出響應或執行其它功能。由於版本2的應用程式副本是少數,版本2的應用程式副本可以運行但來自版本2的應用程式副本的結果可被丟棄。在框422中,可執行另一更新操作,其中UD3被更新。在時間424,UD1、UD2和UD3處於版本2,而UD4和UD5處於版本I。在時間424,版本2的應用程式副本是大多數,則隨後版本2的應用程式副本可開始生成被視為有效的結果。由於現在版本2是大多數,UDl可被選為主更新域。在框426中,可執行第四次更新操作,其中UD4被更新。在時間428,所有的更新域都處於版本2,僅剩下UD5處於版本I。在框430中,可執行最後的更新操作,其中UD5被更新。在時間432,所有的更新域都處於版本2。
實施例400中示出的步驟的順序示出了可如何在數個更新域上執行更新,並且還示出了基於選出成員數的應用程式可如何確定更新版本的應用程式何時被視為有效。以上對本發明的描述是出於說明和描述的目的而提出的。它不旨在窮舉本主題或將本主題限於所公開的精確形式,且鑑於以上教導其他修改和變型都是可能的。選擇並描述實施例來最好地解釋本發明的原理及其實踐應用,從而使本領域的其他技術人員能夠在各種實施例和各種適於所構想的特定用途的修改中最好地利用本發明的技術。所附權利要求書旨在包括除受現有技術所限的範圍之外的其他替換實施例。
權利要求
1.一種在多個計算機處理器上執行的方法,所述方法包括 在所述多個計算機處理器上執行分布式應用程式(208),所述分布式應用程式由應用程式代碼的多個副本來執行; 所述分布式應用程式被執行在具有客作業系統(124)的虛擬機(122)上,所述虛擬機被運行在主機設備(102)上; 將所述多個副本分組成更新域(216),所述更新域是所述副本的組; 標識將要在所述分布式應用程式上執行的更新(210); 標識所述更新域的更新順序(226); 對於所述更新域中的每ー個,對當前更新域進行處理以執行所述更新; 查詢在當前更新域中執行的所述應用程式,以確定所述當前更新域是否已準備好更新; 當所述當前更新域已準備好更新時,在所述更新域上執行所述更新(240); 查詢在當前更新域中執行的所述應用程式,以確定所述更新是否導致應用程式在所述當前更新域中正確運行(242); 當所述更新導致所述應用程式正確運行時,繼續到下一更新域(252);以及 當所述更新導致所述應用程式不正確運行時,掛起所述更新(260)。
2.如權利要求I所述的方法,其特徵在於,所述更新包括更新所述應用程式的版本。
3.如權利要求2所述的方法,其特徵在幹,所述更新所述應用程式的版本包括更新應用程式可執行代碼。
4.如權利要求2所述的方法,其特徵在幹,所述更新所述應用程式的版本包括更新所述應用程式的配置信息。
5.如權利要求I所述的方法,其特徵在於,所述更新包括更新所述主機。
6.如權利要求I所述的方法,其特徵在於,所述更新包括更新所述客作業系統。
7.如權利要求I所述的方法,其特徵在於,所述分組通過對所述分布式應用程式查詢所述分組並從所述分布式應用程式接收所述分組來執行。
8.如權利要求7所述的方法,其特徵在於,所述查詢被定向到所述分布式應用程式的主副本。
9.如權利要求I所述的方法,其特徵在於,還包括 從多個所述更新域中確定選出成員數,所述選出成員數確定所述分布式應用程式的當前版本。
10.如權利要求9所述的方法,其特徵在於,所述選出成員數在所述更新域中的每ー個如所述當前更新域一樣被處理之後被確定。
11.如權利要求10所述的方法,其特徵在於,所述選出成員數定義所述分布式應用程式的主副本。
12.如權利要求I所述的方法,其特徵在幹,以多個更新步驟來執行所述更新,所述多個更新步驟中的每ー個包括按順序處理所述更新域中的每ー個。
13.如權利要求12所述的方法,其特徵在於,所述更新包括 執行第一更新步驟,包括 查詢執行在當前更新域中的所述應用程式,以確定所述當前更新域是否已準備好更新;以及 如果執行在所述當前更新域中的應用程式沒有準備好更新,則對所述應用程式執行修復; 執行第二更新步驟,包括 對所述應用程式執行更新。
14.如權利要求I所述的方法,其特徵在於,所述更新域中的每ー個都被原子地更新。
15.ー種雲計算平臺,包括 多個主機設備(102),所述主機設備的每ー個包括處理器; 對於所述主機設備的每ー個,至少ー個虛擬機(122)具有客作業系統(124); 對於所述虛擬機的每ー個,包括分布式應用程式的至少ー個副本(126),所述分布式應用程式包括多個所述副本; 構造控制器(140),用幹 為所述副本確定分組(220),所述分組定義多個更新域,所述更新域的每ー個包括多個所述副本; 確定所述更新域的更新順序(230); 通過以原子形式處理當前更新域來根據所述順序處理所述更新域的每ー個,所述當前更新域通過一方法來處理,該方法包括 查詢執行在當前更新域中的所述應用程式,以確定所述當前更新域是否已準備好更新; 當所述當前更新域已準備好更新吋,對所述更新域執行所述更新(234); 查詢執行在當前更新域中的所述應用程式,以確定所述更新是否導致應用程式在所述當前更新域中正確運行(242); 當所述更新導致所述應用程式正確運行時,繼續到下一更新域(252);以及 當所述更新導致所述應用程式不正確運行時,掛起所述更新(260)。
全文摘要
分布式應用程式可通過使用由應用程式提供的信息來更新,以確定分組、定序、以及是否進行更新順序。應用程式可向更新順序提供輸入,並且可使更新順序在更新之前修復一個或多個副本。更新機制可被用於改變分布式應用程式拓撲結構以及對應用程式可執行代碼、應用程式配置、請求作業系統、虛擬機、以及主機系統等作出改變。在一些情況下,分布式應用程式可採用選出成員數來確定當前是哪個版本,並且該選出成員數可在更新過程期間改變。
文檔編號G06F9/445GK102681865SQ20111034026
公開日2012年9月19日 申請日期2011年10月21日 優先權日2010年10月22日
發明者A·哈桑, A·沙阿, A·馬尼, H·徐, L·伊倫-布裡斯, P·杜爾諾夫, P·納格沙繞, T·弗雷格 申請人:微軟公司