Java&不同类型/聚类方法

时间:2012-01-09 19:10:05

标签: java glassfish cloud cluster-computing terracotta

我对Java EE相对较新,并且已经开始了解可以聚类的许多不同类型的系统:

  • 虚拟机(即“该设备是虚拟机群集...... ”)
  • 应用程序服务器,例如Tomcat,JBoss或GlassFish(即“我们正在运行集群JBoss ...... ”)
  • 像Terracotta这样的群集API
  • 数据库,如Oracle(“集群数据库”)
  • 云应用程序(“云基本上是一个群集...... ”)

维基百科将“ clustering ”定义为:

  

计算机群集由一组松散连接的计算机组成,这些计算机可以协同工作,因此在很多方面它们可以被视为一个系统。

我想知道群集如何适用于这些“群集类型/方法”(如上所述)以及它们如何相互关联。

例如,如果有人可以从拥有群集应用程序中受益,他/她可能会将它们放在群集应用服务器上,然后将群集管理器投入混合(再次像Terracotta一样)。

但是因为“ clustering ”这个短语似乎是用模糊/模糊的方式使用的,所以我没有看到这些中的每一个如何与其他的联系,或者他们是否如此联系。在此之前,感谢任何勇敢的StackOverflowers,他们可以帮助我理解这种交织在一起的术语!

2 个答案:

答案 0 :(得分:2)

对我而言,群集意味着系统具有许多品质,但它归结为容错 - 服务器,网络和数据持久性。松散和紧密耦合的系统以及介于两者之间的所有口味。紧耦合系统具有在靠近硬件的水平上执行的群集。许多旧的集群系统与应用程序紧密耦合,往往没有意识到它们是集群的。

如今,松散耦合系统已成为常态,在软件级别完全实现了很大程度的容错能力。群集中的系统仅共享网络连接,以便能够实现容错。通常有一些专门的负载均衡器使用专用硬件(有时只是软件)将请求路由到各种集群服务器来实现这一点。

您提到的所有示例都有某种“群集”。它将采用非常长的答案来描述每个架构如何实现这一目标的细节。对我来说,不同之处在于您使用架构时“免费”,以及您需要做多少工作才能使其以最佳方式工作。

您如何混合和匹配您提到的解决方案取决于您的架构和您的要求。您可以拥有一个Terracotta商店,用于本地高速持久性,云端用于其余部分。您可以将Glassfish用作应用程序服务器,并将Terracotta用作持久层。

以下是我对您列出的技术的看法:

  • 云应用程序(“云基本上是一个群集......”)

云应用程序显然最容易使用。从架构的角度来看,您唯一的工作就是选择一个优秀的集群提供商。当然,亚马逊和谷歌将在容错和数据完整性方面做得“正确”。还有很多其他玩家可能做得“足够好”并且更便宜。您编程到他们的API,它们有自己的一组限制和费用。云应用程序的一个问题是很可能很难切换到新的应用程序。同样,您可能在云服务器上运行了一些[大部分]应用程序,并且有一些本地系统可满足您更高的延迟要求。趋势是将大多数生产函数放在云中,或者至少以这种方式开始,直到你变得太大或者需要一些他们无法提供的服务为止。

  • 像Terracotta这样的群集API
  • 数据库,如Oracle(“集群数据库”)
  • 的JBoss

这3个系统提供了自己的群集功能。它们可能要求您执行大量机器和服务层配置,以使系统在生产环境中良好运行。我听说Terracotta是一个分布式持久层的好东西。我已经在Jboss下使用了很多Jgroups并且运行正常可能很棘手,但Jboss也可能有一些很好的默认配置/文档。 Oracle很可能最难集群。 DBA通过调整Oracle配置赚了不少钱。

  • 虚拟机(即“该设备是虚拟机群集......”)
  • 应用程序服务器,例如Tomcat,GlassFish

在聚类方面,这些是最无定形的。一些虚拟机被认为是“集群”的,因为它们共享网络硬件和电源背板,但与云计算相比,它们确实不是集群。如前所述,有些集群硬件解决方案非常自定义,需要大量特定的领域知识才能正常运行。

我对Tomcat和Glassfish等应用服务器的经验很少。我们在Jgroups之上拥有自己的集群软件,并完全运行Jetty。应用程序服务器本身并不是“集群”的,但是Jboss和Terracotta等软件包在它们之上运行以提供集群,并且它们具有内部项目,这些项目具有为其编写的集群软件。

希望其中一些有用。

答案 1 :(得分:1)

这是对它的快速打击。您的集群方式取决于您的目标。以下是一些与GlassFish相关的想法。

  • 群集可以将多个实例作为一个实例进行管理,因为它们共享一个公共配置。如果对配置进行更改(例如定义新资源),则属于该集群的所有实例都将继承该更改。将应用程序部署到集群会将其部署到该集群的所有实例。
  • 群集提供服务可用性。如果一个实例失败,则部署的应用程序仍可在其他实例上使用。
  • 群集可以提供会话可用性。如果实例在用户在其购物车中具有项目时死亡,则另一实例可以获得处理该用户会话的所有权,使得购物车内容仍然存在。用户永远不会知道后端服务器发生故障。
  • 使用GlassFish,可以通过GlassFish(内置)管理HTTP会话状态,委派给一致性网格,或者应用程序可以自己管理状态(使用兵马俑,数据库等)。使用内置功能的好处是它可以开箱即用,并且经历了压力测试,QA等。外部化的好处是,您可以在解耦会话管理和应用程序逻辑后获得更好的可伸缩性。外部化使JVM专注于执行业务逻辑,并且由于备份会话存在于其他地方,因此使用较少的HEAP空间。 Oracle已经对Coherence Grid进行了外部化测试/ QA,并且是商业Oracle GlassFish Server的正式功能。如果您通过数据库滚动自己,那么您需要管理&问自己。