在集群应用服务器上部署 Java EE 应用程序

Deploying Java EE application on clustered app server

当服务器集群时,应用程序将如何部署。 我不是在谈论 docker。我的意思是 WildFly/JBoss 中的域模式或 Glassfish 或 Websphere 中的集群。

集群中的每个 node/instance 是否都像一个独立的应用程序?就像我有一个 @Singleton 实例一样,它是整个集群上的一个实例还是每个节点一个实例,每个 运行 应用程序一个实例。

或者它会被视为刚刚在引擎盖下的集群上传播的一个应用程序?就像 @Singleton 在节点 X 上的某个地方,如果我从节点 Y 调用它,它将通过 tcp 或其他方式调用它(如果不使用 EJB 客户端)?

Is it occur to be like one standalone application on each node/instance of a cluster? Like if I have a @Singleton instance will it be the one on the whole cluster or one for each node and so one for each running app.

假设集群设置了两个nodes/hosts(即两个JVM),将有两个副本(即每个JVM主机一个副本 ) @Singleton 个对象。

通常,单例 = 每个 Web 应用程序每个 JVM 的单个对象(实例)

换句话说,当您在同一个服务器 (JVM) 中部署多个 Web 应用程序时,您可以在 objects/instances(每个 Web 应用程序一个)中部署相同的 class相同的 JVM。

Or it will be treated like the one application just spread on a cluster under the hood?

一般情况下,集群会搭建在两个或多个独立的主机上(为了实现弹性、负载均衡等原因),即应用程序会被部署到独立的JVM中,所以有将是每个 JVM 中 @Singleton 个对象的单独副本。

If I have nodes n1 n2 n3. And on the node n3, I''ll create some bean with singleton injected like @Inject private SingleBean singleBean; Will it be the singleton from node n3 only or there is some way that the singleton from n1 may be injected?

仅 Node3 (JVM) 为单例。

如果你真的想(因为任何原因)跨 JVM 共享单例实例,你可以参考 here 了解更多细节。