0

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

我们希望在 WWW(公共互联网)上扩展和提供我们的服务。经过一番研究,我选择了微软的 Azure 云平台来托管我们的应用程序。通过一些小的努力(主要是教应用程序使用 blob 与 Azure 的文件存储一起工作),我已经成功地使用三种云服务完全部署到云:网站、数据库和文件存储。

请注意,我对两种部署类型(Intranet 和 Cloud)使用相同的代码库,通过对 Debug、Release – Intranet、Staging – Azure、Production – Azure 使用不同的配置。

但是,该应用程序(如现在所写的那样)只能为单个客户帐户提供服务,而我需要我们的云版本来为众多帐户提供服务(希望很多;)……每个帐户都有自己的私有数据集。

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

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

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

很明显,这里第一种方法所需的开发量非常大,系统稳定性的风险也很大,而第二种方法需要的工作量要少得多。

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

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

谢谢,

4

2 回答 2

0

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

MSDN:为云开发多租户应用程序,第 3 版

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

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

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

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

将完成数据分离(高级):

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

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

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

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

于 2014-04-02T09:34:05.007 回答
0

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

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

  2. 跨多个客户端管理版本确实变得更加困难。

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

需要注意的是,有许多出色的 SDK 可用于自动化部署、扩展云服务等。

于 2014-03-31T16:42:26.057 回答