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)
不确定为什么自定义探针不起作用,但存在差异:运行状况检查事件允许您宣布实例是否可用,但在调用该实例的频率方面没有任何灵活性。此外,您无法启动侦听自定义端口(或端口类型)的单独服务。
您可以通过自定义探针获得更大的灵活性,因为您可以创建任何类型的端口侦听器来确定运行状况,甚至是单独的 exe。
对于虚拟机,这是运行状况探测的唯一方法,因为虚拟机没有运行来宾代理,也不提供运行状况检查事件。
| 归档时间: |
|
| 查看次数: |
1325 次 |
| 最近记录: |