如何将应用程序扩展到多个公司


How to scale an application to multiple companies

我工作的公司有一个ERP软件,或者更好的是,一个家庭事故管理应用程序,用于维修公司,而维修公司又会满足保险公司的要求。

有很多维修公司使用我们的应用程序,该应用程序是从标准复制而来的,并根据他们的特定需求进行定制。

这是更新和扩展它的噩梦!

我想知道优化这一点的好方法:每个公司都有继承类的相同应用程序实例? 接口适合这里吗?我们如何处理不同服务器中的集中式应用程序?我们不想只使用一台服务器。

我使用Java,Spring和OO来实现可配置性和可扩展性。应用程序通常具有带有属性的"配置"表,但对可配置性的需求通常超出了属性可以轻松配置的范围。

这确实是OO编程语言,容器的完全控制和强大的框架(例如用于配置/依赖注入的Spring和用于ORM映射的Hibernate)进入自己的领域。

你可以"尝试"在PHP中完成所有这些工作,但是对于一个严肃的产品,你可能需要考虑转向严肃的语言,在所有语言方面拥有20 +年的经验 - 并且没有不尊重的意思。

至于你实际需要做什么:

  1. 它的配置表和管理UI。这些本质上是键值属性,应用程序将使用键值属性,而不是需要可变性的常量。缓存这些对于性能至关重要,因此在服务器级别控制 Web 应用在这里很重要。

  2. 策略模式。诸如计算税收,构建发票或与外部系统接口之类的算法被实现为可插拔和可配置的策略。https://en.wikipedia.org/wiki/Strategy_pattern

  3. XML Bean 配置/依赖注入。用于部署和算法配置。该层选择、创建和配置您的策略,使您能够根据客户需求选择和参数化适当的算法。这就是模块化生活,它允许您在客户之间共享大多数代码库,但在此处插入必要的差异。在Java中,我们使用Spring:http://docs.spring.io/spring/docs/2.5.3/reference/beans.html

构建实际的软件产品,可以针对不同的客户需求进行配置,是很困难的。它需要一个坚实的平台,真正的工具和适度的设计技能。

与可配置性和策略没有直接关系的单独问题是多租户应用程序(@Lee提到的)。这就是应用程序在同一台服务器上同时运行具有不同设置的多个客户的地方。(我最近在这样的应用程序上做了主要的基础设施工作、架构和升级)。然而,这是一个不同的问题,仍然更复杂(但只是有点复杂),没有必要在本主题中解决。

我的经验是,Java和C#快速可靠,而PHP速度可靠性不高,并且倾向于鼓励安全漏洞。我做了很多具有高级要求、系统集成和高性能功能的主要应用程序(工业、政府、金融、软件产品),从紧凑型到中型大型再到大型应用程序。因此,我非常精通如何交付多客户产品 - 以及哪些平台使我能够成功交付性能良好,可靠的应用程序。