2011-12-02 21 views
2

我可以直接從Java使用在Azure4Java包ServiceManagementRest類增加工作者角色(WR)的實例的數目。請參閱教程Azure Management through Java增加/減少工作者角色實例的數量在天青

我的問題是,當我減少WR實例的數量,我可以決定哪些WR實例關閉?因爲,對於雲彈性的想法,我會停止處於IDLE狀態的實例,而不是處於EXECUTING狀態的實例。

問候, 法布里奇奧

回答

7

您無法選擇關閉哪個(或多個)實例;您只需更改實例計數,並且結構控制器負責關閉實例。其中一個原因是由於故障域和SLA:如果在2個故障域中有4個實例,並且在故障域0中關閉了兩個實例,則現在在故障域1中有2個實例。因此,現在您有兩個可能位於同一機架中的實例,並且該機架脫機。現在你有一段時間運行零個實例。

與實例關閉處理是常見的情況,並圍繞此工作的典型模式是通過採取隊列的優勢來緩衝你的工作量,然後讓工人角色實例使用來自這些隊列的工作項目。如果您在工作完成之前關閉實例,則該項目最終會重新出現在隊列中,而另一個實例可以完成工作。

這種模式需要冪等性,這有時是一種挑戰。通過對Windows Azure隊列的最新更新,您現在可以修改隊列消息,這使得這一點變得更加簡單 - 您可以在完成工作項處理的各個階段時將信息添加到隊列消息中。然後,如果您的實例在工作完成之前關閉,則下一個工作人員可以從「開始」以外的點繼續。

一個細節:你應該能夠處理停止活動,並告訴「實例停止」停止從隊列中讀取(可能設置一個標誌)。然後,重寫OnStop(),然後等待進程中的操作完成後再返回。如果仍然在處理操作將花費超過5分鐘,你可能得到創造性...

+0

當你說_這種模式需要冪等性_意味着每個工人可以執行任何任務? – jfabrizio

+0

對不起,不澄清:冪等操作是一個可以重複一致,可重複的結果和副作用的操作。例如:如果您在完成處理之前正在處理隊列消息併發生了某些情況(可能需要比消息超時更長的時間或虛擬機崩潰)。此消息將重新出現在隊列中,並最終再次處理。結果應該是一樣的,不管你是一次還是多次處理消息。 –

2

你無法控制哪些實例將關閉,但它幾乎總是(據我見過的)最高編號後綴的實例。即如果你有IN_0,IN_1和IN_2,並且你關閉了一個實例,它很可能是關閉的IN_2。也許你可以利用這種趨勢來獲得優勢?

可能至少梗阻什麼是是,如果你等待一天的時間,當工人的角色是不太繁忙的減少情況?

1

我認爲這是明智的,永遠不要假設未來會發生什麼是基於實例ID。我傾向於將角色分配到服務(scaleunits)上,在需要時啓動和停止 - 用於控制4000個節點的模式。

相關問題