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

Deployment of multi-client application (best practices)

(我不确定这是否是 post 这个问题的最佳位置。如果不是,请将我重定向到适当的堆栈交换站点。)

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

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

我希望所有安装都在我自己的主机上,这样我可以更好地控制代码和业务模型(客户实际上会为使用服务付费)。

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

[选项 1]

执行此操作的简单选项是:

(我没有要求一个用户对多个 client/installation 通用)。

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

  1. 需要更改大部分 SQL 代码;
  2. 可能会对性能产生一些影响,因为数据库将包含更多数据(所有安装的数据)。
  3. 在同一数据库中混合不同客户端的数据可能会导致 一些问题(如果有错误,有人更容易结束 访问其他人的数据);

所以我更喜欢数据隔离的替代方案。

[选项 2]

我正在考虑的一个替代方案是:

  1. 每次安装,从托管公司购买数据库
  2. 想出一个配置方案,允许将每个安装与应该执行连接的数据库相关联。

例如,如果用户访问 http://very-nice-app.com/client-3/,代码知道它必须连接到 database-name-for-client-3。这可能可以通过独立于主代码加载的某种配置文件来实现。

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

[问题]

我的问题是对于这种部署有哪些更好的替代方案。

谢谢。

由于这不是一个非常受欢迎的主题,我将留下一些自 post 提出问题后找到的链接:

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 中问了这个问题,post 有评论和回复,引发了简短的讨论:

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

简而言之,"it depends" :).