java - 应用服务器集群与 Terracotta

标签 java glassfish cluster-computing terracotta

我听说过“集群”一词用于应用程序服务器,例如 GlassFish 以及 Terracotta;我正在尝试理解集群这个词在与应用程序服务器结合使用时以及与 Terracotta 结合使用时的含义。

我的理解是:

如果 GlassFish 服务器是集群的,则意味着我们有多个物理/虚拟机,每个都有自己的 JRE/JVM,运行不同的 GlassFish 实例。然而,由于它们是集群的,它们都将通过它们的管理服务器(“DAS”)进行通信,并为它们部署相同的应用程序。它们将(对最终用户)有效地充当单个应用程序服务器 - 但现在添加了负载平衡、故障转移/冗余和可扩展性。

从本质上讲,Terracotta 是一种使多个 JVM 运行在不同物理/虚拟机上的产品,就像它们是单个 JVM 一样。

因此,如果我的理解是正确的,则暗示以下内容:

  • 当您需要负载平衡和故障转移容错时,您可以集群应用服务器
  • 当任何特定的 JVM 太小而无法容纳您的应用程序并且您需要更多“马力”时,您可以使用 Terracotta
  • 因此,从技术上讲,如果您有一个包含 5 个服务器实例的 GlassFish 集群;这 5 个实例中的每一个实际上都可以是 Terracotta 实例的数组/集群;这意味着每个 GlassFish 服务器实例实际上是一个存在于多台机器本身的 JVM 中的 GlassFish 实例

如果这些断言/假设中有任何不正确的,请纠正我!如果我离题太远并且显然不理解集群和/或 Terracotta 的真正目的,请指出正确的方向!

最佳答案

Terracotta 使您能够在所有节点之间共享状态(它是有状态的)。基本上它在不同的 JVM 之间创建了一个共享内存空间。当集群中的节点都需要访问相同的对象时,这很有用。

如果您的应用程序是无状态的并且您只需要负载平衡和故障转移,您可以使用类似 JGroups 的解决方案.在这种情况下,每个节点只处理请求,对其他节点知之甚少。内存中的对象不跨节点共享,每个 JVM 仅独立运行,不知道其他 JVM。这通常适用于请求/响应类型的应用程序。例如,提供内容(无 session )的网络服务器就是这样做的。

处理无状态集群通常比处理有状态集群更简单。这是因为在无状态集群中,节点之间几乎一无所知,这导致可能出错的事情更少。

GlassFish 介于上述概念之间。 GlassFish 内存中的对象对所有节点都是可见的。然而,前端(HTTP 连接器)是无状态工作的。

所以回答你的问题:

1) 是的,这是两个最明显的原因。然而,有时人们只需要故障转移或只需要负载平衡,有时两者兼而有之。并非所有集群解决方案都能解决这两个问题。

2) 是的。虽然从技术上讲 Terracotta 只解决了共享内存部分,没有解决 CPU 部分。但是,通过解决内存部分,它会自动解决 CPU 部分,因为您现在只需将 JVM 添加到共享内存空间即可。

3) 我不知道这是否可行,但作为一个思想实验;是的。

关于java - 应用服务器集群与 Terracotta,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10667321/

相关文章:

Java 图像跟随我的光标

java - 如何让 Maven 使用 Eclipse 工作区默认的 JRE?

debugging - 在远程 Glassfish 上进行日志记录和/或调试

hadoop - 构造远程 block 的Spark I/O错误

MySQL集群错误: 1005: Can't create table 'ndb_schema' (errno: 13)

java - 如何使用谷歌脚本按索引位置打开特定的谷歌工作表

jakarta-ee - java.lang.ClassNotFoundException:org.apache.derby.iapi.services.property.PropertyUtil

java - 记录 Web 应用程序中第三方代码创建的线程中未捕获的异常

java - 获取权限被拒绝(公钥)。在AWS上启动hadoop集群时

java - Android中sqlite和sql server(crud操作)两种方式同步