我有一个关于软件部署的一般性问题。 在工作中,我们devise了一个通过networking浏览器使用的CRM。 我最近被告知,每个特定的客户端都有自己的服务器(尽pipe服务器是我的公司所有,但他们不在他们的办公室)。
这让我有点困扰。 以我的观点来看,当devise一个Web应用程序时,他必须记住,他将能够为所有客户端(不是谈论复制或负载平衡)保持一个“软”的运行,可能有不同的数据库每一个,而是一个应用程序…它特别有助于维护和保持每个人与修补程序和升级最新。 我错了吗 ?? 愿你帮助我更好地理解这个问题的资源(我必须缺乏正确的关键字或自己find他们)。 其实我不明白他们为什么要通过“一个人的一个集中的networking应用程序”和一个“分布式的桌面应用程序”之间的“第三条路线”。
谢谢 !
这取决于方法。 维护数以千计的现今技术相同的服务器(用于工作自动化的工具,比如我们的docker工人,傀儡,厨师,pipe理人员等等 – 其中数百人)要容易得多。
为每个客户提供一台服务器,使您可以更准确地为每个客户计划资源,并让他们为实际使用的内容付款。 这也使你的问题变小了,这也有一些好处。
想象一下,你将在一个数据库上拥有1000个客户,总共有2TB的数据。 您的开发人员必须完美地编写SQL查询才能让这样的数据库足够快。 对于每个客户来说,这个问题要小得多。
另一个要考虑的问题可能是安全性。 如果您必须在应用程序级别分离您的客户,则开发人员必须非常小心所选的数据。 如果每个客户拥有一个数据库,泄漏其他客户数据的机会就会减less。
另一方面,为所有客户提供单一实例,使您能够在客户之间共享资源,并在硬件上节省一些资金。
所以,这个决定应该在项目开始时做出,然后列出优缺点。 我也build议创build一些原型,所以你知道,例如部署过程,数据库迁移等不会是你的问题。
从我的经验,我个人build议如果你可以处理pipe理多个实例,每个客户都有一个实例。
为每个客户分开服务器,可以隔离客户数据,并允许您拥有多个版本的应用程序。 但是有一些缺点。 您将花费更多的钱在服务器上(因为您不能轻松地在客户之间共享资源),而且您也可以很好地pipe理部署。 另外,如果所有客户端只有一个数据库,则必须确保数据结构或库的要求不会发生重大变化。 你需要有一些地图客户端 – 应用程序版本来pipe理。
我在我的环境中为每个客户端提供了相同版本的软件,这有助于我们维护和扩展服务器(我只能部署与其他服务器相同的新服务器,并将其添加到负载均衡器中)。 另外,我不必为每个客户使用不同的端点。
我认为这是一个相当早的阶段设置,这里有一些原因,我认为在资源开销之外保留单独的服务器是一个坏主意:
对于一个和另一个客户而言正在开发扩展的风险很大,从而导致更进一步的冲突。 由于短期的商业原因,这可能performance出你永远无法摆脱的技术债务。 在未来合并这些冲突的function可能会变得非常困难,并且您最终可能会select放弃旧版本的这些定制客户端,或者在您不想要的时候被阻止。
一个跨国或多国的客户,甚至一个行业的一系列收购可能要求一个数据分离的系统,但可以从总部进行报告。 这会迫使你在任何情况下拥有多租户版本,否定数据库分离的好处。
所有成功的Saas公司最终都将汇总的数据用于组合的匿名function,例如行业统计数据,学习机会等等。我已经看到Xero和Mailchimp成功使用了这个function,我想这个数据非常有价值。