【问题标题】:Scalability of Remote EJB vs Local EJB远程 EJB 与本地 EJB 的可扩展性
【发布时间】:2013-09-16 00:30:38
【问题描述】:

我一直试图在数据访问层的本地和远程 EJB 之间做出决定。经过大量研究,似乎普遍的共识是,如果我想要可扩展性,我应该使用远程 EJB。

那是什么意思?我找不到任何明确说明为什么 Remote EJB 可以扩展而 Local 不能。

【问题讨论】:

  • 远程与本地与可扩展性完全无关。它仅指是否可以从远程调用或本地调用访问 EJB。实际上,Remote 从未使用过,但在极少数情况下使用,因为所有逻辑通常都在同一个应用服务器中,因此进行远程调用会增加延迟并降低一般情况下的性能。

标签: java jakarta-ee ejb data-access-layer


【解决方案1】:

我不确定你是从哪里得到这种普遍共识的。

记住Fowler's First Law of Distributed Objects

您必须通过网络从 Java 对象调用关系数据库(除非它是内存数据库)。为什么从会话 bean 添加一个额外的跃点到远程对象会更快或更可扩展?

此外,可扩展性的决定因素远不止于此。

我想说你的共识是错误的:如果可以的话,更喜欢本地。

【讨论】:

  • 虽然我知道这是错误的,但我认识到十年前的情绪。人们认为将业务逻辑放在单独的服务器上有助于扩展,因为您可以为业务逻辑添加更重量级的服务器,并添加许多额外的节点来处理 Web 请求。这个想法非常普遍。那时我已经谈了好几个小时才把它从人们的脑海中抹去。
【解决方案2】:

区别在于:

  • LocalBean: 这将在与其调用者相同的 EJB 容器中运行。这意味着与远程调用相比,每次调用都更快。但即使资源耗尽,它也会停留在同一个服务器节点上。

  • RemoteBean: 这将在 EJB 集群中的一个节点上运行。如果一个正在运行资源的 auf,它将跳转到另一个节点。您还可以添加节点以扩大规模。

编辑 如果您只想让您的 bean 编辑数据库,请使用 LocalBeans.. 正如@duffymo 所写

【讨论】:

  • 如果一个正在运行 auf 的资源,很可能 Servlet 层已经耗尽了资源,并且您的负载均衡器会将请求路由到另一个节点。在大多数情况下,EJB 做的工作太少而无法获得回报。数据库、搜索引擎、消息系统、作业服务器等通常(几乎总是)可以从它们自己的服务器中受益,但 EJB 很少。
【解决方案3】:

我假设我们谈论的是经典的 Java EE 场景:

 client (usually browser) ----> Servlet ----> EJB ----> DB

在这种情况下,我们可以将 Servlet 和 EJB 放在一起,并使用本地接口,或者将 Servlet 和 EJB 放在不同的层中,因此需要远程接口 - 当然,使用远程接口需要额外的网络跃点,但是它可以可以想象得到好处。

考虑首先扩展本地场景。 Servlet/EJB 引擎耗尽了动力,所以我们部署了另一个引擎,获得更多动力(显然,servlet 前面的一些喷雾器必须分配工作。我们需要更多动力,添加更多 Servlet/EJB 层。它可以扩展。但是……

假设我们的 EJB 层碰巧真的很重,可能在获取数据后进行了一些复杂的计算。为了达到我们所需的性能,我们扩展了组合的 Servlet/EJB 层,但我们不需要 Servlet 引擎的所有副本,它们几乎不做任何工作,所有工作都在 EJB 层中,我们消耗内存和其他资源没原因。在这种情况下,使用远程 EJB 可能会给我们带来胜利,我们可以独立部署,获得尽可能多的 servlet 引擎和 EJB 引擎副本,并且与复杂的计算成本相比,远程跃点的成本可以忽略不计.

【讨论】:

  • 实际上最后一个例子很少见。 EJB 做的工作很少,如果当更多请求进来时我们通常需要更多的能力,这意味着我们需要额外的 Servlet、JSF 支持 bean 和 EJB bean。也许有时有一个 bean(或几个)进行大量计算。如果是这样;仅将这些放在额外的服务器上。但是 OP 要求默认情况下将所有 EJB 放在远程服务器上以进行扩展,这是不对的。大多数 EJB bean 通常只协调一个事务和几个 DB 调用。
  • 同意。仅分离“特殊”EJB 的这一点很重要。
【解决方案4】:

嗯,我理解公认的答案,但使用远程 EJB 并不总是意味着在多个服务器中分布业务逻辑。

API Gateways 是使用远程 EJB 进行可伸缩性的一个很好的例子。您可以将 API 网关配置为 EJB 客户端(例如单个 WAR),以使用来自包含业务逻辑的不同服务器(例如 EAR)的远程 EJB。

使用这个想法,您可以拥有多个服务器来为 API 网关提供远程 EJB,将工作分配给每个 lookup 中的所有服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多