首页 文章

Azure上的ASP.NET MVC:组合或分离Web角色?

提问于
浏览
0

我正在开发一个托管在Azure上的ASP.NET MVC 5 Web应用程序,该应用程序目前具有以下设置:

  • web role 1:用于UI的ASP.NET MVC项目:主要是使用AngularJS和bootstrap的单页面应用程序

  • web角色2:ASP.NET MVC Web Api项目:包含API控制器,处理所有授权,数据访问(EntityFramework 6),缓存等.API控制器REST操作通过AngularJS从Web角色1中的UI调用async

这些Web角色组合在一个Azure Cloud服务中,包括用于数据存储的SQL Azure数据库 . Web角色2使用角色内缓存来缓存最常用的实体 . 使用 Cloud 服务的原因是,角色缓存在 Cloud 服务内的所有Web角色2实例之间共享 .

我最初的理由是将UI与2个Web角色的实际“工作”分开,就是优化性能,不要让缓存和数据处理干扰呈现UI . 此外,在需要时,我可以为Azure中的任何角色配置额外的实例,并且可以指定用于角色2的最大高速缓存大小,而无需从角色1获取内存 . 这一切实际上都很有效 .

现在提出问题......维护和更新这两个角色可能会很痛苦 . 此外,客户端可能有点棘手,因为CORS HTTP POST在所有(移动)浏览器上都不能通过https等运行良好 . 所以我考虑将2个应用程序合并为1个Web角色中的1:1项目,同时使用MVC和MVC web api的东西 . 这会和单独的设置一样好吗?我可以配置Web角色以在Azure中使用更多实例/内存 . 这与在自己的实例中拥有2个独立角色一样好,尤其是在从客户端到服务器上进行大量异步调用的高负载时?

旁注:我正在使用ASP.NET 5(vNext)和MVC 6,它消除了“普通”MVC控制器和Web API控制器之间的差异 . 这也诱使我将我的2个独立项目分成1个ASP.NET 5项目 . Azure SDK / Visual Studio中不支持在Azure Cloud 服务中部署ASP.NET 5项目,但这可能只是时间问题 .

2 回答

  • 0

    为简单起见,将您的网站和API组合在同一个应用中 . 只要确保整个事情的执行和扩展,这意味着可以自动扩展的无状态架构 . 您的MVC页面可以在它们通常执行的所有路由中提供服务,然后将所有WebAPI控制器分组到“/ api”下 .

  • 0

    您对Web UI角色的关注到底是什么?如果它是单页面应用程序,它只会为index.html文件和一些静态文件提供服务(如果捆绑所有内容,则只有极少数和相对较小的文件) . 如果您将其置于API角色中,这不会产生太大影响 .

    另一方面,我使用不同的解决方案 . 我将所有SPA文件部署到blob存储 . 我只有一个API的角色和一个单一的索引操作方法,它转到blob存储,获取Index.html,在需要的位置注入blob存储基本URL(基本上是css,js和图像路径)并将其提供给客户端 . 因此,每次在浏览器中加载SPA时,Web角色只处理一个非常轻的浏览器调用 . 其余的负载转到blob存储(无论如何它都不是很多) .

    我希望这有帮助 .

相关问题