JavaEE-在不同服务器上拆分web和业务层

JavaEE-在不同服务器上拆分web和业务层,java,jakarta-ee,n-tier-architecture,Java,Jakarta Ee,N Tier Architecture,我们正在讨论在多台服务器上拆分JavaEE应用层的利弊 澄清一下:假设我有一个带有.war web层和EJB.jar业务层的JavaEE应用程序。他们通过RMI进行通信 一种部署方法是在一台应用服务器上的一个.ear中部署.war,在另一台应用服务器上的另一个.ear中部署业务层。让我们称之为“拆分”部署模型 另一种方法是将.war和.jar打包在同一个.ear中,并在一个应用服务器中部署这个.ear。让我们称之为“一起”部署模型。 以拆分模型命名的专业人员: 强制完成拆分,因此是面向服务体系结

我们正在讨论在多台服务器上拆分JavaEE应用层的利弊

澄清一下:假设我有一个带有.war web层和EJB.jar业务层的JavaEE应用程序。他们通过RMI进行通信

一种部署方法是在一台应用服务器上的一个.ear中部署.war,在另一台应用服务器上的另一个.ear中部署业务层。让我们称之为“拆分”部署模型 另一种方法是将.war和.jar打包在同一个.ear中,并在一个应用服务器中部署这个.ear。让我们称之为“一起”部署模型。 以拆分模型命名的专业人员:

强制完成拆分,因此是面向服务体系结构的良好准备 遵循Oracle Fusion中间件高可用性框架,参见。 可伸缩性和可重用性见下面的讨论 以together模型命名的专业人员:

易于部署和管理 更好的性能 易于实现负载平衡 双方都声称在以下方面做得更好:

易于监控和容量管理 易于排除故障
你对这两种模式有什么想法和经验?在这篇文章中,你可能会发现我对一方的个人偏见,但是我想用两种方式来听诚实的论证。

你可以考虑可伸缩性和可重用性作为分裂部署模型的优点。在这两种情况下,我看不出两种方式有什么不同:对于可伸缩性,负载均衡器可以保护多个服务器,因此,在我看来,如果您在拆分中有2个业务服务器和2个web服务器,或者在一起有4个通用服务器,则可以进行相同的扩展。为了可重用性,如果需要,您可以在跳过web层的同时通过RMI调用业务层,或者更好地创建一个关于可伸缩性的真正的web服务,我们只能在web层(比如4个web服务器和2个应用程序服务器)中进行扩展,这在企业级环境中是理想的,因为我们将在web服务器中进行缓存,并且希望应用程序服务器能够提供更多的web服务器实例。关于可重用性,我的观点是,如果您需要在同一模式之上的不同产品中单独使用业务逻辑,您可以只联系appserver,而不必查看整个堆栈。如果我错了,请纠正我。在我们的特定情况下,这些参数实际上并不适用:在应用服务器前面有一个用于静态内容的缓存服务器,应用服务器已经允许您通过直接调用业务层跳过堆栈的一部分。但是,其他人会有其他情况,所以我按照您的建议添加了它们作为拆分的优点。您的ejb是否被多个应用程序使用/将被多个应用程序使用,即您提到的war组件除外。如果没有,我没有看到一个强有力的论点分裂。您可以考虑可扩展性和可重用性作为分裂部署模型的优点。在这两种情况下,我看不出任何不同的方式:对于可扩展性,负载平衡器可以保护多个服务器,所以在我看来,如果您有2个业务和2个Web服务器在分裂,则规模相同。或将4个通用服务器放在一起。为了可重用性,如果需要,您可以在跳过web层的同时通过RMI调用业务层,或者更好地创建一个关于可伸缩性的真正的web服务,我们只能在web层(比如4个web服务器和2个应用程序服务器)中进行扩展,这在企业级环境中是理想的,因为我们将在web服务器中进行缓存,并且希望应用程序服务器能够提供更多的web服务器实例。关于可重用性,我的观点是,如果您需要在同一模式之上的不同产品中单独使用业务逻辑,您可以只联系appserver,而不必查看整个堆栈。如果我错了,请纠正我。在我们的特定情况下,这些参数实际上并不适用:在应用服务器前面有一个用于静态内容的缓存服务器,应用服务器已经允许您通过直接调用业务层跳过堆栈的一部分。但是,其他人会有其他情况,所以我按照您的建议添加了它们作为拆分的优点。您的ejb是否被多个应用程序使用/将被多个应用程序使用,即您提到的war组件除外。如果不是,我看不出有强有力的理由支持分裂。