为什么我应该使用LoadBalancerProbe而不是订阅RoleEnvironment.StatusCheck事件?

Jal*_*hra 10 load-balancing azure

我正在摆弄azure提供的选项来平衡多个webroles之间的负载.

我发现了三种可行的方法.

第一个是什么都不做,让默认(循环)实现完成这项工作.

第二种可能性是在ServiceDefinitionFile中定义一个自定义的LoadBalancerProbe,我试过并且没有工作:根据我的理解,每次对角色执行状态检查时都会调用自定义aspx页面.根据http响应代码,角色将其状态更改为忙碌. - 但这永远不会发生.此外,我无法找到任何定义自定义LoadBalancingProbe的示例.

因此,我寻找另一种方法来做到这一点.

现在我订阅了RoleEnvironment.StatusCheck事件,它允许我实现一些逻辑,并根据结果将角色状态设置为busy和available.

我的问题:1)假设自定义LoadBalancerProbe按照MSDN中的描述工作,订阅StatusCheckEvent和使用自定义探针有什么区别?

2)为什么我的自定义负载平衡器探针不起作用? - 我现在正在使用azure模拟器进行测试,并且我很清楚流量仍会被路由到webrole实例,尽管它们在模拟器中设置为忙碌.但我的自定义探测器根本不会改变webroleinstances的状态.

这是非常基本的代码,据我所知,应该将webrole instance_n_0的状态设置为busy.

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
    }
Run Code Online (Sandbox Code Playgroud)

我还调用了servicedefinition文件,并在调用自定义探针中定义的healthcheck.aspx时将Route设置为重定向到此控制器/操作.

<LoadBalancerProbes>
    <LoadBalancerProbe name="WebRoleBalancerProbeHttp" protocol="http" path="healthcheck.aspx" intervalInSeconds="5" timeoutInSeconds="100"/>
</LoadBalancerProbes>
...
<InputEndpoint name="EndpointWeb" protocol="http" port="80" loadBalancerProbe="WebRoleBalancerProbeHttp"/>
Run Code Online (Sandbox Code Playgroud)

路线:

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

        );
Run Code Online (Sandbox Code Playgroud)

Dav*_*gon 0

不确定为什么自定义探针不起作用,但存在差异:运行状况检查事件允许您宣布实例是否可用,但在调用该实例的频率方面没有任何灵活性。此外,您无法启动侦听自定义端口(或端口类型)的单独服务。

您可以通过自定义探针获得更大的灵活性,因为您可以创建任何类型的端口侦听器来确定运行状况,甚至是单独的 exe。

对于虚拟机,这是运行状况探测的唯一方法,因为虚拟机没有运行来宾代理,也不提供运行状况检查事件。