2012-02-24 22 views
1

我已经拥有一个托管服务部署,它有2个工作角色实例,我想将另外3个工作角色实例添加到同一个托管服务,同时我不希望现有的2个工作角色实例重新启动。Windows Azure是否支持将额外实例添加到托管服务而不重新启动其他实例?

虽然我可以创建另一个托管服务并将新的3个实例放入其中,但是,我听说Azure仅支持每个帐户6个托管服务。真的吗?

由于我的应用程序将使用云驱动器功能,所以我将只为每个角色创建1个实例。

回答

0

我不知道我完全理解你的问题在这里,但这里有一些想法。 1)如前所述,如果您想添加可以完成的现有工作角色的实例,并且您应该(即使在Java中也相信)能够保持现有实例不会重新启动。 2)如果您确实想创建新角色(新定义),则可以这样做,并且如所暗示的,可以超过6个服务的“限制”。如果您想添加新角色而无需重新启动所有功能,也可以参阅http://blogs.msdn.com/b/windowsazure/archive/2011/10/19/announcing-improved-in-place-updates.aspx了解更多信息。 3)您还提到了希望运行每个角色的单个实例,因为使用了“云驱动器”我不确定我在这里理解了这个问题。如果您正在安装同一个驱动器,则无论它是从单个角色或多个实例进行挂载还是由不同角色挂载都无关紧要 - 无论如何,只能从一个实例挂载以进行写入,但是您可以将其从多个实例挂载以供阅读。

我希望这是有帮助的。如果我误解了您的问题,请告诉我们,我们会看看我们能否找到正确的答案!

谢谢,祝你好运!

+0

感谢Mike,我的目的是为现有托管服务添加新角色。您的答案几乎是我想要的,但是我发现如果要将角色添加到托管服务中,将不得不升级整个托管服务,在升级过程中,所有现有角色都将重新启动。我记得一些文档提到就地升级将需要至少2个实例运行每个角色。而且,我的应用程序将数据写入云端驱动器,因此每个角色只有一个实例。 – Xilang 2012-02-24 08:25:07

+0

对此你是对的 - 如果你确实每个角色至少有两个实例,那么升级域将允许在没有完全关闭的情况下升级你的角色。例如,如果每个角色有两个实例,则会有一个实例将升级,而另一个正在运行。一旦完成,第二个实例将在新实例保持运行时升级。但是对于单个实例,您无法做到这一点。还要记住,通过仅运行每个角色的1个实例,您就没有SLA。 – 2012-02-24 14:07:31

+0

感谢Mike,所以如果我使用云端硬盘,答案是“否”。 但是我的应用程序就像一个桌面应用程序,它必须将数据写入文件。看起来Azure并不支持这种情况非常好。 – Xilang 2012-02-28 03:44:58

0

不要试图将新角色添加到生产槽,而是考虑将新角色集合部署到分段槽中,测试并执行VIP交换。

0

Windows Azure允许您在不重新启动其他实例的情况下即时添加实例。在处理RoleEnvironment_Changing事件期间,您需要让Azure知道这一点。

默认情况下,Windows Azure将托管服务的上限限制为每个帐户6个。我相信你可以通过调用他们的支持来增加这个限制,并且在他们进行信用检查后取消限制......但是,适当的扩展模式不是增加额外的服务,而是增加额外的实例。

这里是一个可以确保您的实例没有后新增加了重新启动的例子:如果你通过添加或删除实例为您服务希望设置自动缩放

public override bool OnStart() 
{ 
    RoleEnvironment.Changing += RoleEnvironmentChanging; 
return base.OnStart(); 
} 


private void RoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e) 
{ 
    // If a configuration setting is changing 
    if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange)) 
    { 
     // Set e.Cancel to true to restart this role instance 
     e.Cancel = false; 
    } 
} 

巧合的是, ,因为需求增加或减少,你可以看看第三方服务称为AzureWatch在http://www.paraleap.com

+0

谢谢,伊戈雷克。 两个问题:1.这里有什么意思?辅助角色或工作角色下的实例?对于我的情况,我想添加新的工作者角色,因为新添加的实例与现有实例不同,他们不共享他们的数据。 2.由于我的项目是java项目,因此我们无法将c#代码添加到项目中 – Xilang 2012-02-24 05:24:02

1

@Igor和@Mike已经给你很好的答案。让我添加一些细节来处理您的Azure驱动器问题。

您似乎在设计一个单实例每角色配置,只是为了让每个实例都有一个可写驱动器。如果情况确实如此,那么这确实不能很好地扩展:每次需要扩展或扩展时,它都需要您修改项目(并部署新的软件包)。作为替代,只需为每个实例创建一个独特的驱动器相同的角色。提出基于实例ID的命名机制(例如:/Drives/Instance0.vhd)。在实例启动时,让实例收集其ID并创建一个驱动器(或挂载一个现有的驱动器)。该ID可通过RoleEnvironment.CurrentRoleInstance.Id获得。

相关问题