部署多客户端应用程序(最佳实践)

时间:2015-09-02 07:35:47

标签: web-applications deployment multiple-instances multiple-databases

(我不确定这是否是发布此问题的最佳位置。如果没有,请将我重定向到相应的堆栈交换网站。)

我希望为多个客户端部署Web应用程序。

这个想法是每个客户只能访问他或她自己的数据。让我们说客户端是应用程序安装的所有者。每个安装都可以有多个用户。

我希望所有安装都在我自己的托管中,以便我可以更好地控制代码和业务模型(客户端实际上将为服务的使用付费)。

我正在寻找执行此类部署的技术选项。

[选项1]

这样做的简单选择是:

  • 更改数据库,以便每个相关表格知道其"所有者ID"。
  • 更改所有SQL查询,以便每个用户只能获取与其"所有者ID相关的数据"

(我不要求用户与多个客户端/安装相同)。

但是,这种解决方案有一些缺点:

  1. 需要更改大部分SQL代码;
  2. 可能会对性能产生一些影响,因为数据库将拥有更多数据(所有安装的数据)。
  3. 混合同一数据库中不同客户端的数据可能会导致 一些问题(如果有错误,最终有人会更容易 访问其他人的数据);
  4. 所以我更愿意选择一种可以隔离数据的替代方案。

    [选项2]

    我正在考虑的另一种选择是:

    1. 对于每个安装,从托管公司购买数据库
    2. 提出一种配置方案,允许将每个安装与应该执行连接的数据库相关联。
    3. 例如,如果用户访问http://very-nice-app.com/client-3/,则代码知道它必须连接到database-name-for-client-3。这可能是通过某种独立于主代码加载的配置文件来实现的。

      这解决了潜在的数据泄漏问题,但需要我维护多个数据库(如果数据库表发生变化,则必须在多个安装中完成)。这可能会以某种方式自动化。

      [问题]

      我的问题是什么是这种部署的更好的替代方案。

      感谢。

1 个答案:

答案 0 :(得分:1)

由于这不是一个非常受欢迎的主题,我会留下一些自发布问题以来我找到的链接:

Best practices for creating multiple web app instance

http://forums.devshed.com/mysql-help-4/practice-opinions-multi-user-multi-organisation-web-app-812530.html

我还在DBA Stack Exchange中提出了这个问题,该帖子有评论和回复,引起了一个简短的讨论:

https://dba.stackexchange.com/questions/114330/web-application-for-software-as-a-service-shared-database-or-multiple-database/

简而言之,"它取决于" :)