天天看點

雲計算設計模式(五)——計算資源整合模式 雲計算設計模式(五)——計算資源整合模式

合并多個任務或操作成一個單一的計算單元。這種模式可以提高計算資源的使用率,并降低與雲托管的應用程式進行計算處理相關的成本和管理開銷。

雲應用程式頻繁執行各種操作。在某些解決方案也可能是有意義的最初遵循的關注點分離的設計原則,并把這些操作成托管和獨立部署(例如,如在微軟的Azure雲服務,獨立Azure網站不同的角色獨立計算單元或單獨的虛拟機)。然而,盡管這種政策可以幫助簡化溶液的邏輯設計,部署大量計算單元作為同一應用可以提高運作時的托管成本,使系統的管理更加複雜的一部分。

作為一個例子,圖1示出了使用多個計算單元被實作的一個雲托管解決方案的簡化的結構。每個計算單元在其自己的虛拟環境中運作。每個功能已被實作為一個單獨的任務(通過任務Ë标任務A)在自己的計算裝置上運作。

雲計算設計模式(五)——計算資源整合模式 雲計算設計模式(五)——計算資源整合模式

圖1  - 通過使用一組專用計算單元運作在雲環境中的任務

每個計算單元消耗的資源收費,即使是閑置或不常使用。是以,這種方法可能不總是最有成本效益的解決方案。

在Azure中,這一問題适用于雲服務的角色,網站和虛拟機。這些産品在他們自己的虛拟環境中執行。運作的單獨作用,網站,或者被設計為執行一組良好定義的操作的虛拟機的集合,但是需要進行通信和協作,作為一個單一的解決方案的一部分,可以是一個資源利用效率低。

為了幫助降低成本,提高使用率,提高通信速度,減輕了管理工作有可能将多個任務或操作成一個單一的計算單元。

任務可以根據各種基于由環境提供的功能,以及與這些功能相關的成本的标準進行分組。一種常見的方法是尋找具有關于它們的可擴充性,壽命和加工要求具有相似的任務。分組這些産品一起使它們能夠擴充為一個單元。由許多雲環境所提供的彈性使一個計算單元的其他執行個體,以根據業務負載被啟動和停止。例如,Azure提供自動縮放,可以适用于雲服務的角色,網站和虛拟機。欲了解更多資訊,請參閱自動縮放指導。

作為一個計數器的例子來說明如何擴充可以被用于确定哪些操作可能不應該被分組到一起,考慮以下兩個任務:

•任務1輪詢發送到隊列罕見的,對時間不敏感的資訊。

•任務2處理網絡流量的高容量陣陣。

第二任務要求的彈性可能涉及起動和停止的大量的計算單元的執行個體。應用相同的縮放到第一任務隻會導緻更多的任務上監聽同一隊列不頻繁的消息,并且是一種資源的浪費。

在許多雲環境中,它可以指定在CPU核心,存儲器,磁盤空間等的數量而言,以一個計算單元的可用資源。通常,指定的資源越多,就越有成本。對于金融效率,最大限度地工作的一個昂貴的計算單元執行的數量,而不是讓它變成無活性在較長時間内是很重要的。

如果存在需要大量的CPU功率的短脈沖串的任務,考慮合并這些成一個單一的計算單元,其提供所需的電源。然而,重要的是平衡這種需要保持昂貴資源忙對它們是否過分強調指出可能發生了争用是重要的。長時間運作,計算密集型任務可能不應該共享相同的計算機關,例如。

實施該模式時請考慮以下幾點:

•可擴充性和彈性。許多雲解決方案實作的可擴充性和彈性,在運算部的通過啟動和停止的情況下,機關的水準。避免了分組在同一計算單元互相沖突的可擴充性要求的任務。

•一生。雲計算基礎架構可以定期回收托管的計算單元的虛拟環境。當執行一個計算單元内許多長期運作的任務,可能需要對裝置進行配置,以防止它被回收,直到這些任務已經完成。可替換地,通過使用一個檢查指向的方法,使他們停止幹淨,并繼續在在其中,當所述計算單元被重新啟動他們被中斷的點的設計的任務。

•釋放節奏。如果一個任務的執行或配置變化頻繁,則可能需要停止計算機關主辦的更新的代碼,重新配置和重新部署的單元,然後重新啟動它。此過程也将需要相同的計算單元中的所有其他任務被停止,重新部署,并重新啟動。

•安全性。在相同的計算單元的任務可以共享相同的安全上下文,并能夠通路相同的資源。必須有高度的任務之間的信任,而且相信,一個任務是不會損壞或其他不利的影響。此外,增加了在一個計算單元可以增加計算單元的攻擊面運作的任務的數目;每個任務是否安全的一個最脆弱性。

•容錯。如果在一個計算單元中的一個任務失敗或異常情況,它可能會影響在同一單元内運作的其他任務。例如,如果有一個任務無法正常啟動它可能會導緻對計算單元失敗,整個啟動邏輯,并且防止在同一單元的其他任務的運作。

•争。避免這種情況,在相同的計算單元争奪資源的任務之間引入的争用。理想情況下,共享相同的計算單元的任務應該表現出不同的資源使用率​​的特征。例如,兩個計算密集型任務可能不應該駐留在同一個計算單元,而且消耗大量的記憶體也不應該兩個任務。然而,混合使用需要大量的存儲器可以是一個可行的組合任務中計算密集型的任務。

 注意:

你應該考慮整合計算資源隻對已在生産用于在一段時間内,使得操作人員和開發者能夠監控系統,并建立熱圖,它辨別了每個任務利用别共資源的系統。此圖可以用于确定哪些任務是很好的候選共享計算資源。

•複雜性。組合多個任務到一個單一的計算單元增加了複雜性中的代碼單元,可能使得更難以進行測試,調試和維護。

•穩定的邏輯架構。設計和實施中的代碼中的每個任務,以便它不應該需要改變,即使實體環境中任務運作不會改變。

•其他政策。整合計算資源的方法隻有一個,以幫助減少同時運作多個任務相關的成本。這需要仔細的規劃和監測,以確定它仍然是一個有效的辦法。其他政策可能更合适,這取決于所執行的工作的性質和所代表這些任務正在運作的使用者的位置。例如,工作負荷(如所描述的計算分區指南)的功能分解可能是一個更好的選擇。

使用這種模式的任務,如果他們在自己的計算單元運作不符合成本效益。如果一個任務花費大量的時間閑置,運作此任務的專用裝置可以是昂貴的。

這種模式可能不适合于執行關鍵容錯操作處理高度敏感的或私有資料,并且需要其自身的安全上下文的任務或任務。這些任務應該在他們自己的獨立的環境中運作,在一個單獨的計算單元。

在Azure上建構一個雲服務,它可以鞏固多任務的處理成一個單一的角色。通常,這是執行的背景或異步處理任務的輔助角色。 

在某些情況下它可能會包括在Web角色的背景或異步處理任務。這種技術可以有助于降低成本和簡化部署,雖然它可以影響由web角色所提供的面向公衆的接口的可擴充性和響應性。該文章合并多個天青工作者角色成天青Web角色包含執行背景或異步處理任務在Web角色的較長的描述。

的作用是負責啟動和停止的任務。當Azure結構控制器加載的作用,它引發的啟動事件中的作用。您可以覆寫WebRole或WorkerRole類的OnStart方法來處理這個事件,也許是為了初始化資料和其他資源,在這種方法中,任務依賴。

當OnStart方法完成後,角色就可以開始響應請求。您可以找到有關使用的OnStart和運作方式的作用,在theApplication啟動程序中的模式與實踐指南移動應用程式到雲部分的更多資訊和指導。 

請OnStart方法盡量精簡的代碼。

Azure不上采取這種方法,完成時間強加任何限制,但作用不能夠啟動響應發送給它,直到此方法完成的網絡請求。

當OnStart方法完成後,執行任務的運作方式。在這一點上,該織物控制器能夠開始發送請求的作用。

将實際的運作方法建立任務的代碼。注意,執行指令的方法可以有效地定義角色執行個體的生命周期。此方法完成,結構控制器将安排的作用被關閉。

當一個角色關機或再循環,結構控制器可以防止從負載平衡器接收任何更多的傳入請求,并提高了停止事件。您可以通過覆寫作用的onStop方法捕獲這個事件和角色終止前需要進行任何整理起來。

注意:

在的onStop方法執行的任何操作須在5分鐘(或者,如果您使用的是本地計算機上的天青模拟器30秒)内完成;否則Azure結構控制器假定的角色已經停止,并會迫使它停下來。

圖2示出了一個角色的生命周期,任務和資源,它承載。該任務由運作方法,該方法然後等待任務來完成啟動。任務本身,這實作雲服務的業務邏輯,可以響應通過天青負載平衡器釋出到角色的消息。

雲計算設計模式(五)——計算資源整合模式 雲計算設計模式(五)——計算資源整合模式

圖2 - 任務和資源的作用,在Azure雲服務的生命周期

在ComputeResourceConsolidation.Worker項目WorkerRole.cs檔案顯示了一個如何實作這個模式在Azure雲服務的例子。

該ComputeResourceConsolidation.Worker項目是ComputeResourceConsolidation解決方案,可用于下載下傳本指導意見的一部分。

在運作時被初始化的角色建立所需的取消标記和任務來運作的一個清單中的輔助角色,代碼。

設定在MyWorkerTask1和MyWorkerTask2方法來說明如何在同一輔助角色執行不同的任務。下面的代碼顯示MyWorkerTask1。這是休眠30秒,然後輸出一個跟蹤消息的簡單任務。重複這個過程,直到無限期的任務被取消。在MyWorkerTask2代碼非常相似。

通過示例代碼示出的方法是一個背景程序的一個常見的實作。在現實世界的應用程式,你可以按照這個結構相同,不同之處在于,你應該把自己的處理邏輯在等待取消請求的循環體。

經過勞工的角色已初始化它使用的資源,Run方法啟動兩個任務同時,如下圖所示。

在該示例中,執行指令方法等待要完成的任務。如果任務被取消,運作方法假定的角色正在關閉,并等待剩下的任務完成(這在終止前等待最多5分鐘)之前被取消。如果任務失敗,由于預期異常,Run方法将取消該任務。

需要注意的是,你可以實作Run方法更全面的監測和異常處理政策,如重新啟動已失敗的任務,或者包括代碼,使角色停止和啟動單個任務。

在以下代碼中所示的停止方法時,網絡控制器将關閉角色執行個體(它是從的onStop方法調用)被調用。該代碼通過取消它優雅地停止每項任務。如果有任何的工作時間超過五分鐘就能完成,在Stop方法取消處理真正地停止等待和作用被終止。

繼續閱讀