【问题标题】:ASP.NET MVC on Azure: combine or separate web roles?Azure 上的 ASP.NET MVC:组合还是分离 Web 角色?
【发布时间】:2015-04-01 08:01:58
【问题描述】:

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

  • Web 角色 1:用于 UI 的 ASP.NET MVC 项目:主要是带有 AngularJS 和引导程序的单页应用程序
  • Web 角色 2:一个 ASP.NET MVC Web Api 项目:包含 API 控制器,处理所有授权、数据访问(EntityFramework 6)、缓存等。API 控制器 REST 操作通过 AngularJS 从 Web 的 UI 调用异步角色 1

这些 Web 角色组合在 1 个 Azure 云服务中,包括用于数据存储的 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 云服务中部署 ASP.NET 5 项目,但这可能只是时间问题。

【问题讨论】:

    标签: asp.net asp.net-mvc angularjs azure


    【解决方案1】:

    您对 Web UI 角色的关注点究竟是什么?如果它是一个单页应用程序,它将只提供 index.html 文件和一些静态文件(如果捆绑所有文件,则非常少且相对较小)。如果您将其置于您的 API 角色中,这应该不会产生太大影响。

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

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多