在Azure平台上为不同帐户部署内容管理Web应用程序的正确方法

时间:2014-03-31 13:33:19

标签: asp.net-mvc azure multi-tenant multi-instance-deployment

我开发了一个商业Asp.Net MVC Web应用程序。该应用程序是标准的,在IIS Web服务器上运行并使用SQL Server数据库。我们的业务模式是我们在客户的Intranet或数据中心现场部署我们的应用程序。也就是说,对于每个这样的客户(帐户),我们提供完整的设置,通常安装在专用的独立服务器中。每个此类帐户都有自己的私有内容,用户,配置等。

我们希望在WWW(公共互联网)上扩展并提供我们的服务。经过一些研究,我选择了Microsoft’s Azure cloud platform来托管我们的申请。通过一些小的努力(主要是使用blob教授应用程序与Azure的文件存储一起使用),我已经设法使用三种云服务完全部署到云:网站,数据库和文件存储。

请注意,我对两种部署类型(Intranet和Cloud)使用相同的代码库,方法是使用不同的配置进行调试,发布 - Intranet,登台 - Azure,生产 - Azure。

然而,应用程序(现在正在编写)只能为一个客户帐户提供服务,而我需要我们的云版本为众多帐户服务(希望很多;)...每个帐户都有自己的私有数据集。

问题:我应该在这里采用以下哪种策略?

  1. 更改应用程序,使其支持多个帐户。这意味着在数据模型中更改(在数据层中添加Account实体,将其绑定到所有内容类型等)和业务逻辑中。

  2. 为每个帐户创建自己的云站点(网站+数据库+文件存储服务)。这意味着将相同的应用程序多次部署到不同的Azure服务。

  3. 显而易见的是,第一种方法所需的开发量非常大,系统稳定性的风险也很大,而第二种方法需要的努力要少得多。

    但是,我不清楚如何管理一组服务于不同客户帐户的许多相同服务(应用程序)。我已经开始寻找一些工具来帮助我(例如Red Gate),并希望听到更多。

    另一个问题是成本 - 就是这样一种解决方案,使用许多云服务而不是只有少数,更昂贵的标准“所有帐户的一个应用程序”方法。

    感谢名单,

2 个答案:

答案 0 :(得分:0)

我建议(1)。就开发工作而言,这是一个较高的短期成本,但长期有两个原因会更好:

  1. 便宜。通过添加更多云服务,成本将会上升很多。我想你可以将这笔费用转嫁给你的客户吗?

  2. 在许多客户端管理版本变得更加困难。

  3. 我想说你可以花时间重构你知道的现有代码 - 或者 - 你可以学习如何对Azure进行开发操作来管理版本。可能更容易重构你所知道的而不是学习新的东西。

    作为一个说明,有很多很棒的SDK可以自动部署,扩展云服务等等。

答案 1 :(得分:0)

找到了一些关于这个问题的好读物:

MSDN: Developing Multi-tenant Applications for the Cloud, 3rd Edition

提供两种方法之间的良好比较:

  • 单一实例,多租户(我的第一选择)
  • 多实例,单租户(我的第二个选项)

看起来我将采用多租户方法。所有事情都认为它需要较少的开发工作,并且需要较少的维护工作。此外,我的专长在于应用程序开发,而不是系统管理(这是真正实现多实例解决方案所必需的)。

其他原因:需要在帐户(租户)之间共享一些内容,这在使用单个数据库时更容易实现。此外,该产品的未来计划可以使用此解决方案。

数据隔离将完成(高级别):

  • 文件存储(blob):为每个租户(帐户)使用单独的容器。

  • 数据库:使用租户唯一密钥将内容与租户关联

  • Cahce:使用租户唯一键为缓存的数据项生成缓存键。

可伸缩性:使用一个实例简单地扩展其功能,甚至将网站移动到专用虚拟机更容易。将来还可以将系统增强到多实例,多租户结构,为大租户创建新的单独实例。