2012-02-18 62 views
19

是否可以在同一實例中部署多個角色?Windows Azure中同一實例上的多個角色

我有三個Web角色(網站在asp.net mvc3和兩個WCF服務實例)和兩個工作者角色(Windows服務)。

這個應用程序的負載很小,所以我不想在Windows Azure中創建這麼多的實例,並且現在支付所有的實例。相反,我希望將我的所有應用程序部署在同一個實例中,稍後如果我將從我的應用程序中獲得一些收入,請將其更改。

我用Google搜索,發現了一些論壇的帖子超過了它的可能有的比這是不可能的......但我無法找到信息,該怎麼辦呢?

所以兩個問題: 這可能嗎? 我該怎麼辦?

回答

14

與@Simon的答案略有不同......角色實際上是Windows Server 2008 VM的模板(請參閱我在this SO question上的答案)。每個角色都有一個或多個實例,並且您可以在任何角色上運行您想要的任何內容。

您絕對可以在一個角色中運行您的網站和所有WCF服務。現在,您將把應用程序向上/向下(VM大小)和out/in(實例數)擴展爲單個刻度單位。比方說,如果你的WCF服務是CPU密集型的,導致你的web訪問者虛擬機實例變慢,你需要擴展到足以處理這些訪問者。

一旦你達到了很大的流量負載,它是值得考慮分開的角色。這樣,您可以決定虛擬機大小和數量,每個角色。也許你有2或3個Web角色的小實例來處理你網站上的用戶流量,也可能有2個Worker角色的Medium實例來處理WCF服務(就像一個例子)。您擁有的角色越多,您擁有的細粒度縮放,​​但您必須至少運行每個角色的一個實例,這會提升您的「系統靜止」基準成本。

+0

如果我在一個實例中將我的所有網站和wcf服務部署爲一個webrole - 我無法重新部署系統的某些部分?正確?例如,如果我想在WCF服務中進行更改 - 我必須重新部署所有:wcf服務和網站? – 2012-02-20 19:10:20

7

不,角色是實例,每個角色都佔用整個虛擬機。但是,您可以將多個網站整合到一個角色中,這將允許您將所有MVC和WCF應用程序部署到單個Web角色中。您需要將網站添加到sites element in the ServiceDefinition。似乎有幾篇關於如何完成的博文 - herehere

對於工作者角色,我建議您創建一個單一的輔助角色併合並在這些角色中完成的工作,例如爲每個正在監視的隊列啓動一個單獨的線程。這由歐金尼奧佩斯StackOverflow answer

我不建議嘗試將工作角色功能合併到網絡角色中。除了它對體系結構沒有意義,對於物理基礎結構(IIS vs不是IIS)而言,還存在潛在的問題,例如當工作角色回收時(線程未由IIS啓動的線程可能突然終止),終止運行線程

+0

這不是真正的strcitly。 as'user728584'指出一個web角色總是也是一個工作者角色。現在 - 我不一定把這兩者結合起來是一個好主意 - 但它肯定有可能作爲每個網絡角色的Run()方法 - http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com /2010/12/how-to-combine-worker-and-web-role-in.html – 2012-02-19 18:34:16

+0

網絡和工作者角色的結合是一種破壞。是.NET組件的角色定義還是Azure結構如何處理它?雖然示例表明它*似乎可行,但您必須瞭解織物如何處理關閉,回收和監控等。我不理解這些細節,但懷疑存在'問題' – 2012-02-19 18:40:22

+2

角色的定義是「虛擬機」。而且沒有破解,將功能組合到單個服務器(無論是物理還是虛擬)。人們多年來一直這樣做。在Windows Azure中,它取決於您的可伸縮性和可用性程度。使用多個實例在單個角色中運行網站和後臺任務並不是什麼竅門,就像將功能分離爲單獨的虛擬機並非獨立的虛擬機一樣。 – 2012-02-19 21:25:49

相關問題