Web 应用程序部署:适用于所有客户的一个版本或每个客户自己的版本

Shi*_*raz 7 deployment web-applications

我有一个关于软件部署的一般问题。在工作中,我们设计了一个通过 Web 浏览器使用的 CRM。最近有人告诉我,每个特定的客户都有自己的服务器(虽然服务器归我公司所有,但它们不是他们的,也不位于他们的办公室)。

这让我有点困扰。在我看来,在设计 Web 应用程序时,他必须牢记他将能够为其所有客户端维护一个“软”运行(不谈论复制或负载平衡),可能有不同的数据库用于每个,但一个应用程序......它特别有助于维护和保持每个人都与补丁和升级保持同步。我错了吗 ??能否通过资源帮助我更好地理解这个问题(我必须缺少正确的关键字才能自己找到它们)。我实际上不明白他们为什么要经历“每个人都使用一个集中式 Web 应用程序”和“每个人使用一个分布式桌面应用程序”之间的“第三种方式”。

谢谢 !

Yar*_*Dot 6

这取决于方法。使用当今的技术(用于工作自动化的工具,例如 docker、puppet、chef、ansible 等 - 数百个),维护数千台服务器要容易得多。

为每个客户拥有一台服务器使您能够更准确地为每个客户规划资源,并让他们为真正使用的资源付费。它还可以使您的问题更小,这也有一些优点。

想象一下,您将在一个数据库上拥有 1000 个客户,总共有 2TB 的数据。您的开发人员必须完美地编写 SQL 查询,才能足够快地拥有这样的数据库。这个问题小得多,每个客户都有一个小数据库。

另一个需要考虑的问题可能是安全性。如果您必须在应用程序级别分离您的客户,您的开发人员必须非常小心他们选择的数据。如果每个客户都有一个数据库,那么泄露其他客户数据的可能性就较小。

另一方面,为所有客户提供单一实例使您能够在客户之间共享资源并节省一些硬件资金。

所以,这个决定应该在项目开始时做出,在列出优点和缺点之后。我还建议创建一些原型,以便您知道部署过程、数据库迁移等对您来说不是问题。

根据我的经验,如果您可以管理多个实例,我个人建议为每个客户创建一个实例。