10

我正在摆弄 azure 提供的用于平衡多个 webrole 之间的负载的选项。

我找到了三种可能的方法来做到这一点。

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

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

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

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

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

2) 为什么我的自定义负载均衡器探测不起作用?- 我现在只是在使用 azure 模拟器进行测试,并且我很清楚流量仍然会路由到 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
    }

当调用自定义探针中定义的 healthcheck.aspx 时,我还配置了我的 servicedefinitionfile 并设置了一个路由以重定向到此控制器/操作。

<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 }

        );
4

2 回答 2

0

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

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

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

于 2013-03-04T12:11:48.677 回答
0

在您的服务定义文件中,您已将探测标记为托管在 http 端点(而不是 HTTPS)上。

您的网络应用程序也是这种情况吗?它是否在 HTTP 而不是 HTTPS 上公开该端点?如果是,那么还要检查是否有任何自动重定向到 HTTPS 发生。

我认为您已经正确设置了所有内容。是一个帖子,其中包含一些示例代码和来自 SO 的另一个问题,他们成功地设置了它(应该提供对 csdef 文件的一些见解)。

我同意 David Makogon 关于两者之间差异的观点。

于 2021-04-15T03:03:10.553 回答