Dot-Net

Web 角色和雲服務的多站點策略

  • July 8, 2013

我們有 3 個面向公眾的 Web 應用程序正在遷移到 Azure。所有站點都使用埠 80。

選項

據我了解,使用 Web 角色時有三種不同的選擇:

1. 在單一云服務中以一個 Web 角色託管的所有 3 個站點

  • HTTP訪問可以通過hostHeader中的配置ServiceDefinition.csdef
  • 這是最便宜的
  • 要求所有項目需要同時發布
  • 這些站點不能單獨擴展,只能作為一個整體進行擴展
  • 1 Visual Studio 中的雲服務項目

2. 每個站點託管在單個雲服務中的單獨 Web 角色上

  • HTTP訪問可以通過hostHeader中的配置ServiceDefinition.csdef
  • 每個站點都有自己的實例
  • 要求所有項目需要同時發布
  • 這些站點可以單獨擴展
  • 1 Visual Studio 中的雲服務項目

3. 每個站點託管在單獨的雲服務中的 Web 角色上

  • 每個站點都有自己的 cloudapp.net DNS 和 IP
  • 每個站點都有自己的實例
  • 站點可以單獨發布
  • 這些站點可以單獨擴展
  • Visual Studio 中的多個雲服務項目

我還缺少其他重要的東西嗎?

可能的解決方案

選項 1 和 2 的組合。

**在一個雲服務中託管所有內容:**將它們全部發佈在一起很好,因為它們都引用了一個公共庫項目,該項目需要在所有項目中進行一致更新。

**在一個 Web 角色中託管兩個站點:**它們可以很好地擴展在一起。

以自己的網路角色託管第三個站點將需要自己的擴展,因為峰值需求很大。

ServiceDefinition.csdef:

<ServiceDefinition name="WebTestCloudService.Test" xmlns="..." schemaVersion="2012-10.1.8">
 <WebRole name="AzureWebTest1" vmsize="Small">
   <Sites>
     <Site name="AzureWebTest1">
       <Bindings>
         <Binding name="Endpoint1" endpointName="Endpoint1" hostHeader="test1.mydomain.com" />
       </Bindings>
     </Site>
   </Sites>
   <Endpoints>
     <InputEndpoint name="Endpoint1" protocol="http" port="80" />
   </Endpoints>
 </WebRole>
 <WebRole name="AzureWebTest2" vmsize="Small">
   <Sites>
     <Site name="AzureWebTest2">
       <Bindings>
         <Binding name="Endpoint1" endpointName="Endpoint1" hostHeader="test2.mydomain.com" />
       </Bindings>
     </Site>
     <Site name="AzureWebTest3" physicalDirectory="..AzureWebTest4">
       <Bindings>
         <Binding name="Endpoint1" endpointName="Endpoint1" hostHeader="test3.mydomain.com" />
       </Bindings>
     </Site>
   </Sites>
   <Endpoints>
     <InputEndpoint name="Endpoint1" protocol="http" port="80" />
   </Endpoints>
 </WebRole>
</ServiceDefinition>

請確認我在正確的軌道上?任何輸入將不勝感激。

聽起來你在正確的軌道上。澄清幾點:

  • 請記住,在將站點定義為在同一部署中以不同的 Web 角色執行時,您需要為每個 Web 角色提供單獨的埠號。如果您希望所有站點都在埠 80 上,則需要選項 #1 或 #3
  • 在單個部署中,雖然您需要一次發布所有角色程式碼,但您可以選擇更新特定角色而不是所有角色。
  • 您還可以研究部署獨立於您的部署的 Web 程式碼的替代技術,例如將您的網站壓縮儲存在 blob 中,然後根據需要下載/解壓縮/安裝網站,而無需重新部署。
  • 您還可以將所有靜態內容保存在 Blob 儲存中,並隨時以零重新部署更新這些對象。

引用自:https://stackoverflow.com/questions/17464912