java - Tomcat 具有同一应用程序的多个实例

标签 java tomcat deployment architecture

我们正在构建一个 Java Web 应用程序,每个客户都将拥有一个具有自己的数据库架构的实例。

它将由我的公司管理,因此我想知道在同一个 Tomcat 运行时上运行多个应用程序实例的最佳方法是什么,因为我们尝试在单个 Tomcat 上运行 3 个实例,但最终失败了内存异常。 我们考虑在同一服务器中运行多个 tomcat 实例,但我们尚未对其进行测试。此外,我们正在考虑为每个客户提供单独的服务器。

根据您对类似场景的经验,您有何看法?

已编辑:此应用程序不能是 Multi-Tenancy 的,因为其中的某些部分将进行代码自定义,以及需要每个客户端一个应用程序实例的其他一些业务事实。因此,应用程序架构不是这里的主题。

谢谢,

最佳答案

您想使用multi tenant architecture 。将只有一个数据库和 Web 应用程序实例,并且每条记录都将由“所有者”公司进行验证。您可以使用客户端用来访问您的应用程序的子域/域来区分它们。

简单地说,您向每个表添加一个“domain_id”列,并且您有一个“where domain_id=?”在每个查询中。每个用户都会有一个关联的domain_id,您将在登录时获取该domain_id 并将其放入 session 中。实际上还会有其他考虑。

已编辑:根据问题中的编辑,这里是答案的附加部分。

在 Multi-Tenancy 架构中,可以自定义每个实例,而无需维护单独的代码库。一些定制可以是“配置文件”的一部分。这适用于数据值和标志,例如货币、日期格式等。如果需要特定于客户端的新功能,可以通过支持插件来实现。

一次性将您的解决方案融入 Multi-Tenancy 架构中,比持续为每个客户维护多个单独版本的代码的痛苦要好。您可能想阅读“技术债务”主题。

ERP 是业务应用程序的复杂案例,您可以从阅读 OpenBravo Trial FAQ 中获得灵感。了解我们在说什么。 Openbravo 是开源的,您可以通过查看他们的代码来获取技术详细信息。

关于java - Tomcat 具有同一应用程序的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20995502/

相关文章:

java - 合并列表中的重复项

java - Spark Sql 中的poseexplode() 的替代方案是什么,因为它不动态采用可变数量的参数?

jsp - 从 jsp 输出中去除空格

debugging - Tomcat 关机失败

java - 停止 Tomcat 不会删除 Derby db.lck

database - 使用用户生成的内容自动部署数据库(类似于 CMS)

java - 使用 Openfire、Smack 和 Play 的聊天网站架构!框架

java - Jenkins 部署插件。内存不足

svn - 如何部署 Subversion 外部?

java - 使用 Maven 创建 Wicket 项目