gpt4 book ai didi

java - 单耳?还是多个 EAR?

转载 作者:搜寻专家 更新时间:2023-10-31 19:47:06 27 4
gpt4 key购买 nike

我们正在开发要部署在 JBoss EAP 6.1 上的基于 JavaEE 6 的应用程序。该应用程序有 2 个主要的表示机制:Web 管理控制台和 RESTful 服务 API。在后端,管理控制台和 RESTful 服务 API 都依赖于一系列 EJB 来执行事务逻辑和 POJO 服务来检索数据。

所有这些不同层的性能和资源需求完全有可能不同。 RESTful 服务相当薄且完全无状态,而管理控制台是有状态的并且具有更多交互功能(因此需要更多内存和处理)。由于我们的 EJB 执行我们的主要事务业务逻辑,因此它们需要比我们仅查询数据库的 POJO 数据服务更多的处理能力。

鉴于这样的设置,是部署具有所有这些组件的单个 EAR(在集群配置中的多个应用程序服务器中),还是将单个组件分解为单独的 EAR 更有意义?我对单独的 EAR 的想法是,例如,如果我发现它们存在可伸缩性问题,我可以部署更多的 EJB 服务实例,即使 Web 控制台(例如)可伸缩性很好。

鉴于每个层/组件的可扩展性不同,我应该采取什么方法?必须跨 EAR 进行远程 EJB 调用的开销是否太高而无法考虑这种模型?非常感谢任何建议!

最佳答案

“Java EE”方式是将应用程序作为单个 EAR 部署在集群上。我假设您正在使用从 REST/管理控制台到 EJB-s 的本地接口(interface)调用。部署会很简单,如果你不需要 session 复制(你可以使用粘性 session )那么可扩展性会很好。

您唯一需要的额外元素是 Web 应用程序的负载平衡器(例如,Apache 服务器也将负责 SSL 解码、静态资源服务以及可能的缓存请求)。

这种设置的唯一问题可能出现在重负载时,例如 EJB 可能会占用大量服务器资源,因此 Web 应用程序的吞吐量将难以控制并且可能会受到 EJB 的严重影响。如果您使用粘性 session ,用户总是被重定向到同一台服务器,因此只要用户 session 持续,就没有机会将一些用户移动到负载较少的服务器。

因此,如果您计划高负载,那么将 Web 应用程序和 EJB 放在单独的盒子(或虚拟机)上是有意义的,这样可以更容易地识别瓶颈并更容易地扩展需要它的层。

对此的惩罚是:

  1. 远程调用 EJB。然而 JBoss 6 有相当先进的 EJBs 池配置,所以它可能不是一个可怕的问题。
  2. 由这些远程调用引起的网络流量(因此,如果您在 EJB 和 Web 层之间传递大量数据,这可能是个问题)。

关于java - 单耳?还是多个 EAR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16673409/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com