多客户端应用程序的部署(最佳实践)
Deployment of multi-client application (best practices)
(我不确定这是否是 post 这个问题的最佳位置。如果不是,请将我重定向到适当的堆栈交换站点。)
我希望为多个客户端部署 Web 应用程序。
想法是每个客户端只能访问他或她自己的数据。假设客户端是应用程序安装的所有者。每个安装可以有多个用户。
我希望所有安装都在我自己的主机上,这样我可以更好地控制代码和业务模型(客户实际上会为使用服务付费)。
我正在寻找执行此类部署的技术选项。
[选项 1]
执行此操作的简单选项是:
- 更改数据库以便每个相关 table 了解其 "owner id"。
- 更改所有 SQL 查询,以便每个用户只会获取与其 "owner id"
相关的数据
(我没有要求一个用户对多个 client/installation 通用)。
但是,这个解决方案有一些缺点:
- 需要更改大部分 SQL 代码;
- 可能会对性能产生一些影响,因为数据库将包含更多数据(所有安装的数据)。
- 在同一数据库中混合不同客户端的数据可能会导致
一些问题(如果有错误,有人更容易结束
访问其他人的数据);
所以我更喜欢数据隔离的替代方案。
[选项 2]
我正在考虑的一个替代方案是:
- 每次安装,从托管公司购买数据库
- 想出一个配置方案,允许将每个安装与应该执行连接的数据库相关联。
例如,如果用户访问 http://very-nice-app.com/client-3/,代码知道它必须连接到 database-name-for-client-3。这可能可以通过独立于主代码加载的某种配置文件来实现。
这解决了数据泄露的潜在问题,但需要我维护多个数据库(如果 DB tables 发生变化,则必须跨多个安装完成)。这可能可以以某种方式自动化。
[问题]
我的问题是对于这种部署有哪些更好的替代方案。
谢谢。
由于这不是一个非常受欢迎的主题,我将留下一些自 post 提出问题后找到的链接:
Best practices for creating multiple web app instance
我还在 DBA Stack Exchange 中问了这个问题,post 有评论和回复,引发了简短的讨论:
简而言之,"it depends" :).
(我不确定这是否是 post 这个问题的最佳位置。如果不是,请将我重定向到适当的堆栈交换站点。)
我希望为多个客户端部署 Web 应用程序。
想法是每个客户端只能访问他或她自己的数据。假设客户端是应用程序安装的所有者。每个安装可以有多个用户。
我希望所有安装都在我自己的主机上,这样我可以更好地控制代码和业务模型(客户实际上会为使用服务付费)。
我正在寻找执行此类部署的技术选项。
[选项 1]
执行此操作的简单选项是:
- 更改数据库以便每个相关 table 了解其 "owner id"。
- 更改所有 SQL 查询,以便每个用户只会获取与其 "owner id" 相关的数据
(我没有要求一个用户对多个 client/installation 通用)。
但是,这个解决方案有一些缺点:
- 需要更改大部分 SQL 代码;
- 可能会对性能产生一些影响,因为数据库将包含更多数据(所有安装的数据)。
- 在同一数据库中混合不同客户端的数据可能会导致 一些问题(如果有错误,有人更容易结束 访问其他人的数据);
所以我更喜欢数据隔离的替代方案。
[选项 2]
我正在考虑的一个替代方案是:
- 每次安装,从托管公司购买数据库
- 想出一个配置方案,允许将每个安装与应该执行连接的数据库相关联。
例如,如果用户访问 http://very-nice-app.com/client-3/,代码知道它必须连接到 database-name-for-client-3。这可能可以通过独立于主代码加载的某种配置文件来实现。
这解决了数据泄露的潜在问题,但需要我维护多个数据库(如果 DB tables 发生变化,则必须跨多个安装完成)。这可能可以以某种方式自动化。
[问题]
我的问题是对于这种部署有哪些更好的替代方案。
谢谢。
由于这不是一个非常受欢迎的主题,我将留下一些自 post 提出问题后找到的链接:
Best practices for creating multiple web app instance
我还在 DBA Stack Exchange 中问了这个问题,post 有评论和回复,引发了简短的讨论:
简而言之,"it depends" :).