Azure中的分布式1——多实例

Azure中的WebRole和WorkerRole天然支持负载均衡,只需要简单配置一下即可,下面我以一个WebRole为例说明这一点。

创建一个项目类型为MVC4的WebRole

image

项目结构如下:

image

右键点击Role的属性进入配置选项卡,将实例计数修改为3,这里的一个实例相当于一台主机

image

为了验证我的配置正确,我在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();
    }
}

当然我们还需要在Views\Home\Index.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个实例运行正常:

image

在浏览器中输入http://127.0.0.1:81/,不停的刷新页面,结果如我们所料,3台主机处理客户端请求。

image

 

image

Azure多实例的最大优点就是实现简单,负载策略和实现方法我们都不需要操心,并且支持自动缩放,在站点压力大时,增加实例处理更多的请求数;夜间压力小时,减少实例降低运营成本,实现真正的按计算收费;个人认为唯一的缺点就是无法对负载策略进行人工干预,比如指定某一批用户访问指定的实例,当然这也有对应的解决方案。

posted @ 2013-11-17 12:14  冯翔  阅读(654)  评论(0编辑  收藏  举报