在向基于Web的系统引入许可时,应该如何处理多个实例?

时间:2011-12-20 18:38:46

标签: php licensing startup

我们正在使用以前专属于我们业务的功能性网络软件,并引入许可选项,以便其他企业可以使用它。

在两种方法之间进行选择时应考虑哪些因素:

  • 修改代码以允许多个用户
  • 安装多个代码实例;每个新用户一个。 E.G。完全重复,单独的数据库和PHP。

该软件基于PHP。我们打算提供多个套餐。由于通过预定的cron作业进行大量处理,服务器负载随着每个许可证的使用量增加而呈二次方增长。

更新:尽管唯一的答案表明我们不应该这样做,但我们仍然倾向于修改代码以允许多个用户。有没有人有任何意见?

更新2:出于安全原因,我们再次将我们的位置更改为多实例解决方案。

1 个答案:

答案 0 :(得分:3)

在过去几个月里我自己完成了这项工作,我的建议是 不要做我们做的 ,这是修改代码以允许多个用户。原来这是一个兔子洞,并将介绍:

  • 代码复杂性(添加新的简单功能通常会变得困难)
  • 错误(由于复杂性增加)
  • 安全问题(花费了大量时间确保客户无法访问彼此的数据)
  • 性能问题(约5,000行的表将突然增长到约5,000,000行。突然创建的性能问题突然创建~20秒页面加载时间)

如果我们可以再做一次,我们的方法就是:

  • 将每个客户端放在子域(甚至允许它们提供自己的完整域名),允许您为每个客户端分别拥有一个apache虚拟主机。购买cPanel之类的许可证值得认真考虑,并研究如何自动化或半自动化创建新帐户。

  • 为每个客户提供单独的数据库。每个都有不同的数据库密码。这将提供出色的安全性和出色的性能(所有数据库(及其表格)都很小)。

  • 由您决定是否应在所有这些客户端之间共享实际的php源代码,或者为每个客户端分配一个单独的副本。文件的全局目录是完全合理的,并且可以使更新变得容易,而单独的副本将使定制更容易。也许混合动力是正确的方法。

有一天,我们甚至可能最终撕掉过去六个月里完成的大部分工作,再次采用这种方法。

乍一看似乎这会增加服务器负载,但实际上如果你有足够的客户端来加载甚至是一个考虑因素,那么你将希望能够在多个服务器之间传播客户端。如果隔离良好,那就是小菜一碟。