是否可以在同一个实例中部署多个角色?
我有三个网络角色(asp.net mvc3中的网站和两个WCF服务实例)和两个工作角色(Windows服务)。
此应用程序的负载非常小,因此我不想在Windows Azure中创建这么多实例并立即为所有实例付费。相反,我想在同一个实例中部署我的所有应用程序,如果我从应用程序中获得一些收入,我会稍后更改它。
我用Google搜索并发现了一些论坛帖子,而不是一些可能的论坛帖子......但我找不到如何做的信息......
所以有两个问题: 可能吗? 我该怎么办?
答案 0 :(得分:14)
与@ Simon的答案略有不同......角色实际上是Windows Server 2008 VM的模板(请参阅我对this SO question的回答)。每个角色都有一个或多个实例,您可以在任何角色上运行任何您想要的任何内容。
您绝对可以在一个角色中运行您的网站和所有WCF服务。您现在可以将应用程序向上/向下(VM大小)和out / in(实例数)缩放为单个缩放单位。例如,如果您的WCF服务是CPU密集型的,导致VM实例对您的Web访问者来说变慢,那么您需要扩展到足以处理这些访问者。
一旦达到显着的流量负载,就值得考虑单独的角色。这样,您就可以决定每个角色的VM大小和数量。也许你有两个或三个小型的Web角色实例来处理你在网站上的用户流量,也许有2个Medium实例的Worker角色来处理WCF服务(仅作为一个例子)。您拥有的角色越多,您拥有的细粒度扩展,但您必须至少运行每个角色的一个实例,这会提升您的“系统静止”基准成本。
答案 1 :(得分:7)
不,角色是实例,每个角色占用整个VM。但是,您可以将多个网站部署到一个角色中,这样您就可以将所有MVC和WCF应用部署到一个Web角色中。您需要将网站添加到sites element in the ServiceDefinition。似乎有一些关于如何完成此事的博客文章 - here和here。
对于辅助角色,我建议您创建一个辅助角色并组合这些角色中完成的工作,例如为每个受监视的队列启动一个单独的线程。这是Eugenio Pace的StackOverflow answer。
我不建议尝试将工作者角色功能组合到Web角色中。除了它没有建筑意义,对物理基础设施(IIS vs而不是IIS)有意义之外,还存在潜在的问题,例如当工作者角色回收时终止运行线程(IIS未启动的线程可能会突然终止)
答案 2 :(得分:4)
查看此封面的云封面。 您可以将几个Web角色放在同一个实例中。 worker角色你可以随时放置多个线程来处理数据。
http://channel9.msdn.com/Shows/Cloud+Cover/Cloud-Cover-Episode-37-Multiple-Websites-in-a-Web-Role
请注意,每次将新版本上传到azure时,您需要再次将所有Web角色/辅助角色上传到azure
答案 3 :(得分:2)
查看此博文“将多个Azure工作者角色合并到Azure Web角色” http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com/2012/02/combining-multiple-azure-worker-roles.html
我认为这是你需要做的......
韦恩在他的博客上也提到了这一点:http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com/2010/12/how-to-combine-worker-and-web-role-in.html
HTH