Windows Azure中同一实例上的多个角色

Ale*_*lov 19 azure azure-worker-roles azure-web-roles

是否可以在同一实例中部署多个角色?

我有三个Web角色(asp.net mvc3中的网站和两个WCF服务实例)和两个工作者角色(Windows服务).

此应用程序的负载非常小,因此我不想在Windows Azure中创建这么多实例并立即为所有实例付费.相反,我想在同一个实例中部署我的所有应用程序,如果我从应用程序中获得一些收入,则稍后更改它.

我用Google搜索并发现了一些论坛帖子而不是可能的,有些比不可能......但我找不到信息怎么做......

所以有两个问题:有可能吗?我该怎么做?

Dav*_*gon 14

与@ Simon的答案略有不同......角色实际上是Windows Server 2008 VM的模板(请参阅我在这个SO问题上的答案).每个角色都有一个或多个实例,您可以在任何角色上运行任何您想要的任何操作.

您绝对可以在一个角色中运行您的网站和所有WCF服务.您现在可以将应用程序向上/向下(VM大小)和out/in(实例数)缩放为单个缩放单位.例如,如果您的WCF服务是CPU密集型的,导致VM实例对您的Web访问者来说变慢,那么您需要扩展到足以处理这些访问者.

一旦达到显着的流量负载,就值得考虑单独的角色.这样,您就可以决定每个角色的 VM大小和数量.也许你有两个或三个小型的Web角色实例来处理你在网站上的用户流量,也许有2个Medium实例的Worker角色来处理WCF服务(仅作为一个例子).您拥有的角色越多,您拥有的细粒度扩展,但您必须至少运行每个角色的一个实例,这会提升您的"系统静止"基准成本.


Sim*_*nro 7

不,角色是实例,每个角色占用整个VM.但是,您可以将多个网站部署到一个角色中,这样您就可以将所有MVC和WCF应用部署到一个Web角色中.您需要将网站添加到ServiceDefinition中sites元素.似乎有一些关于如何做到的博客文章 - 这里这里.

对于辅助角色,我建议您创建一个辅助角色并组合这些角色中完成的工作,例如为每个受监视的队列启动一个单独的线程.这个StackOverflow由Eugenio Pace 回答.

我不建议尝试将工作者角色功能组合到Web角色中.除了它没有建筑意义,对物理基础设施(IIS与非IIS)的意义之外,还存在潜在的问题,例如当工作者角色回收时终止运行线程(IIS未启动的线程可能会突然终止)

  • 角色的定义是"虚拟机".并且没有黑客攻击,将功能组合到单个服务器(无论是物理还是虚拟).人们多年来一直这样做.在Windows Azure中,它取决于您的可伸缩性和可用性程度.在具有多个实例的单个角色中运行网站和后台任务并不是一件容易的事,就像它不是将功能分离到单独的VM中的黑客一样,每个VM都是独立扩展的. (2认同)