我开发了一个商业Asp.Net MVC Web应用程序。该应用程序是标准的,在IIS Web服务器上运行并使用SQL Server数据库。我们的业务模式是我们在客户的Intranet或数据中心现场部署我们的应用程序。也就是说,对于每个这样的客户(帐户),我们提供完整的设置,通常安装在专用的独立服务器中。每个此类帐户都有自己的私有内容,用户,配置等。
我们希望在WWW(公共互联网)上扩展并提供我们的服务。经过一些研究,我选择了Microsoft’s Azure cloud platform来托管我们的申请。通过一些小的努力(主要是使用blob教授应用程序与Azure的文件存储一起使用),我已经设法使用三种云服务完全部署到云:网站,数据库和文件存储。
请注意,我对两种部署类型(Intranet和Cloud)使用相同的代码库,方法是使用不同的配置进行调试,发布 - Intranet,登台 - Azure,生产 - Azure。
然而,应用程序(现在正在编写)只能为一个客户帐户提供服务,而我需要我们的云版本为众多帐户服务(希望很多;)...每个帐户都有自己的私有数据集。
问题:我应该在这里采用以下哪种策略?
更改应用程序,使其支持多个帐户。这意味着在数据模型中更改(在数据层中添加Account实体,将其绑定到所有内容类型等)和业务逻辑中。
为每个帐户创建自己的云站点(网站+数据库+文件存储服务)。这意味着将相同的应用程序多次部署到不同的Azure服务。
显而易见的是,第一种方法所需的开发量非常大,系统稳定性的风险也很大,而第二种方法需要的努力要少得多。
但是,我不清楚如何管理一组服务于不同客户帐户的许多相同服务(应用程序)。我已经开始寻找一些工具来帮助我(例如Red Gate),并希望听到更多。
另一个问题是成本 - 就是这样一种解决方案,使用许多云服务而不是只有少数,更昂贵的标准“所有帐户的一个应用程序”方法。
感谢名单,
答案 0 :(得分:0)
我建议(1)。就开发工作而言,这是一个较高的短期成本,但长期有两个原因会更好:
便宜。通过添加更多云服务,成本将会上升很多。我想你可以将这笔费用转嫁给你的客户吗?
在许多客户端管理版本变得更加困难。
我想说你可以花时间重构你知道的现有代码 - 或者 - 你可以学习如何对Azure进行开发操作来管理版本。可能更容易重构你所知道的而不是学习新的东西。
作为一个说明,有很多很棒的SDK可以自动部署,扩展云服务等等。
答案 1 :(得分:0)
找到了一些关于这个问题的好读物:
MSDN: Developing Multi-tenant Applications for the Cloud, 3rd Edition
提供两种方法之间的良好比较:
看起来我将采用多租户方法。所有事情都认为它需要较少的开发工作,并且需要较少的维护工作。此外,我的专长在于应用程序开发,而不是系统管理(这是真正实现多实例解决方案所必需的)。
其他原因:需要在帐户(租户)之间共享一些内容,这在使用单个数据库时更容易实现。此外,该产品的未来计划可以使用此解决方案。
数据隔离将完成(高级别):
文件存储(blob):为每个租户(帐户)使用单独的容器。
数据库:使用租户唯一密钥将内容与租户关联
Cahce:使用租户唯一键为缓存的数据项生成缓存键。
可伸缩性:使用一个实例简单地扩展其功能,甚至将网站移动到专用虚拟机更容易。将来还可以将系统增强到多实例,多租户结构,为大租户创建新的单独实例。