1

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

那是什么意思呢?我找不到任何明确说明为什么远程 EJB 可以扩展而本地不能扩展的东西。

4

4 回答 4

4

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

记住福勒的分布式对象第一定律

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

此外,可伸缩性的决定因素远不止于此。

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

于 2013-09-11T20:19:40.110 回答
0

我假设我们正在谈论一个经典的 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 引擎副本,并且与复杂的计算成本相比,远程跃点的成本可以忽略不计.

于 2013-09-11T20:32:18.307 回答
0

区别在于:

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

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

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

于 2013-09-11T20:20:22.493 回答
0

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

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

使用这个想法,您可以拥有多个服务器来为 API 网关提供远程 EJB,从而为每个lookup.

于 2017-02-21T13:35:08.897 回答