Azure中的WebRole和WorkerRole天然支持负载均衡,只需要简单配置一下即可,下面我以一个WebRole为例说明这一点。
创建一个项目类型为MVC4的WebRole
项目结构如下:
右键点击Role的属性进入配置选项卡,将实例计数修改为3,这里的一个实例相当于一台主机
为了验证我的配置正确,我在HomeController的Index方法中加点Response数据。
IsAvailable表示角色实例是否正在运行在Windows Azure环境中;
IsEmulated表示角色实例是否正在运行在Windows Azure云模拟器中;
InstanceId获取一个代表角色实例的ID;
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
ViewBag.IsAvailable = RoleEnvironment.IsAvailable;
ViewBag.IsEmulated = RoleEnvironment.IsAvailable && RoleEnvironment.IsEmulated;
ViewBag.InstanceId = RoleEnvironment.CurrentRoleInstance.Id;
return View();
}
}
当然我们还需要在ViewsHomeIndex.cshtml页面中加点显示代码:
<p style="color: red">RoleEnvironment.IsAvailable: @ViewBag.IsAvailable</p>
<p style="color: red">RoleEnvironment.IsEmulated: @ViewBag.IsEmulated</p>
<p style="color: red">RoleEnvironment.InstanceId: @ViewBag.InstanceId</p>
最后Ctrl + F5运行Azure项目,观察模拟器的运行情况,1个Role,3个实例运行正常:
在浏览器中输入http://127.0.0.1:81/,不停的刷新页面,结果如我们所料,3台主机处理客户端请求。
Azure多实例的最大优点就是实现简单,负载策略和实现方法我们都不需要操心,并且支持自动缩放,在站点压力大时,增加实例处理更多的请求数;夜间压力小时,减少实例降低运营成本,实现真正的按计算收费;个人认为唯一的缺点就是无法对负载策略进行人工干预,比如指定某一批用户访问指定的实例,当然这也有对应的解决方案。