2015-04-01 61 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”下。