2015-04-01 62 views
0

我工作的一個ASP.NET MVC 5 Web應用程序,託管在Azure上,目前有以下設置:Azure上的ASP.NET MVC:結合或分離Web角色?

  • Web角色1:UI中的ASP.NET MVC項目:多單頁面應用程序與AngularJS和引導
  • Web角色2:一個ASP.NET MVC Web API項目:包含API控制器,處理所有授權,數據訪問(EntityFramework 6),緩存等。API控制器REST操作稱爲異步通過AngularJS來自網絡角色中的用戶界面1

這些Web角色合併到1 Azure Cloud服務,包括用於數據存儲的SQL Azure數據庫。 Web角色2使用角色內緩存來緩存大多數使用的實體。使用雲服務的原因是角色內緩存在雲服務內的所有Web角色2實例之間共享。

我最初將UI從實際的「工作」中分離出來的兩個Web角色的原因,是通過緩存和數據處理不會干擾呈現UI來優化性能。此外,在需要時,我可以爲Azure中的任何角色配置額外的實例,並且可以指定最大高速緩存大小以用於角色2,而無需從角色1獲取內存。這一切實際上運行良好。

現在對於這個問題......維護和更新這兩個角色可能是一種痛苦。另外,客戶端可能會有點棘手,CORS HTTP POST在所有(移動)瀏覽器上都不能很好地運行,因此我想將2個應用程序合併到1個Web角色的1:1項目中,同時將MVC和MVC網絡API的東西。這將執行以及單獨的設置?我可以將Web角色配置爲在Azure中使用更多的實例/內存。這會和自己的實例有兩個獨立的角色一樣好嗎,特別是在高負載情況下,從客戶端到服務器進行大量異步調用?

附註:我正在玩ASP.NET 5(vNext)和MVC 6,它消除了'正常'MVC控制器和Web API控制器之間的差異。這也誘使我將2個獨立的項目組成1個ASP.NET 5項目。 Azure SDK/Visual Studio不支持在Azure Cloud Service中部署ASP.NET 5項目,但這可能是時間問題。

回答

0

您對Web UI角色的關注究竟是什麼?如果它是一個單頁面應用程序,它只會服務於index.html文件和一些靜態文件(如果捆綁了所有內容,則只有很少和相對較小)。如果你把它放在你的API角色中,這應該不會有太大的影響。

另一方面,我使用不同的解決方案。我將所有SPA文件部署到blob存儲。我只有一個使用API​​的角色和一個用於blob存儲的Index動作方法,獲取Index.html,在需要的地方(基本上是css,js和圖像路徑)注入blob存儲庫url並將其提供給客戶端。因此,每次在瀏覽器中加載SPA時,Web角色只處理一個非常輕的瀏覽器調用。其餘的負載進入blob存儲(反正它不是很多)。

我希望這會有所幫助。

0

爲了讓事情變得簡單,將您的網站和api合併到同一個應用程序中。只要確保整個事物能夠執行和擴展,就意味着可以自動擴展的無狀態架構。您的MVC頁面可以在他們通常所做的所有路線中使用,然後將所有WebAPI控制器分組到「/ api」下。