2012-12-19 51 views
8

我在擺弄azure提供的選項以平衡多個卷軸之間的負載。爲什麼我應該使用LoadBalancerProbe而不是訂閱RoleEnvironment.StatusCheck事件?

我發現了三種可能的方式來做到這一點。

第一個應該是什麼也不做,讓默認(循環)實現來完成這個工作。

第二種可能性是在ServiceDefinitionFile中定義一個自定義的LoadBalancerProbe,我試過並且沒有工作:根據我的理解,每次在角色上執行狀態檢查時都會調用自定義aspx頁面。根據http響應代碼,角色將其狀態更改爲繁忙狀態。 - 但這從來沒有發生過。 此外,我真的找不到任何定義自定義LoadBalancingProbe的示例。

因此,我尋找一種替代方法來做到這一點。

現在我訂閱RoleEnvironment.StatusCheck事件,它允許我實現一些邏輯,並根據結果將角色狀態設置爲繁忙和可用。

我的問題: 1)假設自定義LoadBalancerProbe的工作方式與MSDN中描述的一樣,訂閱StatusCheckEvent和使用自定義探針有什麼區別?

2)爲什麼我的自定義負載平衡器探針不起作用? - iam現在只需使用azure模擬器進行測試,並且iam知道流量仍然會被路由到webrole實例,儘管它們在模擬器中設置爲繁忙。 但我的自定義探針根本不會改變webroleinstances的狀態。

這是非常基本的代碼,應該 - 據我所知,將webrole instance_n_0的狀態設置爲繁忙狀態。

public class LoadBalanceController : Controller 
{ 

    public ActionResult Index() 
    { 

     WebOperationContext woc = WebOperationContext.Current; 
     if(RoleEnvironment.CurrentRoleInstance.Id.ToLower().Contains("_0")) 
     { 
      woc.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.ServiceUnavailable; 
     }else 
     { 
      woc.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK; 

     }   

     return View(); //not relevant 
    } 

香港專業教育學院也configered我servicedefinitionfile和設定的路線來調用自定義探頭定義的healthcheck.aspx時重定向到該控制器/動作。

<LoadBalancerProbes> 
    <LoadBalancerProbe name="WebRoleBalancerProbeHttp" protocol="http" path="healthcheck.aspx" intervalInSeconds="5" timeoutInSeconds="100"/> 
</LoadBalancerProbes> 
... 
<InputEndpoint name="EndpointWeb" protocol="http" port="80" loadBalancerProbe="WebRoleBalancerProbeHttp"/> 

的路線:

routes.MapRoute(
      name: "HealhCheck", 
      url: "healthcheck.aspx", 
      defaults: new { controller = "LoadBalance", action = "Index", id = UrlParameter.Optional } 

     ); 

回答

0

不知道爲什麼定製的探頭不工作,但不同之處:健康檢查活動,您可以宣佈一個實例是否是可用的,但你不在這種被稱爲的頻率方面沒有任何靈活性。此外,您無法啓動監聽自定義端口(或端口類型)的單獨服務。

由於您可以創建任何類型的端口偵聽器來確定運行狀況,即使是單獨的exe,您也可以使用自定義探測器獲得更多的靈活性。

使用虛擬機時,這是健康探測的唯一方法,因爲虛擬機沒有運行guest代理並且不提供健康檢查事件。

相關問題