小编Jal*_*hra的帖子

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

我正在摆弄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)

load-balancing azure

10
推荐指数
1
解决办法
1325
查看次数

确定Web角色实例的关联w3wp进程

我正在努力监控Azure服务的性能.

目前有两个Web角色实例(针对同一网站)运行 - 每个实例都有自己的W3WP.exe(w3wp和w3wp#1)

如何找出哪个w3wp进程属于哪个角色实例?

有了这些信息,我想给azure.diagnostics.monitor提供一些性能计数器 - 即Process(w3wp)\ ProcessorTime(%)和Thread Count.但是为了获得任何有意义的数据,我必须将w3wp进程的进程ID附加到性能计数器(例如Process(w3wp_PID)\ processorTime(%)) - 不知道语法是否正确,但有一种方法可以附加PID)

所以AzureStorage表中的最终结果WADPerformanceCounters只有以下条目:

WebRoleInstance_n_0 | process(w3wp_1033)\processorTime (%) |  12.4
WebRoleInstance_n_1 | process(w3wp_1055)\processorTime (%) |  48.4
Run Code Online (Sandbox Code Playgroud)

atm就像

WebRoleInstance_n_0 | process(w3wp)\processorTime (%) |  12.4
WebRoleInstance_n_1 | process(w3wp)\processorTime (%) |  12.4
Run Code Online (Sandbox Code Playgroud)

我想:如果我为每个角色启动了DiagnosticsMonitor,那么监视器将使用正确的进程 - 属于启动监视器的Roleinstance.但实际上这不起作用 - 或者我认为它不起作用 - 至少在查看结果值之后.

// update:在manage.windowsazure门户上,您可以为性能监视定义自定义指标.这里可以选择专门监控的webrole实例.这也是我想要做的.对此页面实际执行的操作的见解也可能有所帮助.

比较:http: //puu.sh/1xp7q

他们只想到获取此信息的愚蠢方式是:获取每个w3wp启动前后所有进程的列表 - 确定添加了哪个进程,然后确定代码库上下文明智地启动了哪个角色实例.

multiple-instances w3wp azure performance-monitor azure-web-roles

6
推荐指数
1
解决办法
1270
查看次数

为什么我不能在我的ServiceDefinition文件中输入LoadBalancerProbe?

我试图为我的Azure服务设置一个CustomLoadBalancerProbe.

根据这些信息:http://msdn.microsoft.com/en-us/library/windowsazure/jj151530.aspx#LoadBalancerProbes

应该可以将标记添加到服务定义文件中.但是当我尝试这个时,我只收到一条消息,说这对于servicedefinition文件来说是无效的.

然后我google了一下,发现了这个:http://www.windowsazure.com/en-us/manage/windows/common-tasks/how-to-load-balance-virtual-machines/

这里它告诉我,虚拟机的负载平衡仅在azure的预览版本中可用.

所以我现在有点困惑:

1)VM的负载平衡与架构中描述的负载均衡探测器的使用有区别吗?(链接1)

2)如果否:是否只是不支持?

3)如果是:为什么我无法将探针输入服务定义文件?

load-balancing azure

0
推荐指数
1
解决办法
504
查看次数