Java 和聚类的不同类型/方法

标签 java glassfish cloud cluster-computing terracotta

我对 Java EE 比较陌生,并且已经开始听说可以集群的许多不同类型的系统:

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

  • 维基百科将“聚类”定义为:

    A computer cluster consists of a set of loosely connected computers that work together so that in many respects they can be viewed as a single system.



    我想知道对于这些“集群类型/方法”(上面提到的)中的每一种,集群是如何工作的,以及它们是如何相互关联的。

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

    但是因为“聚类”这个词似乎以模糊/模棱两可的方式使用,我没有看到这些中的每一个是如何与其他的联系起来的,或者他们是否甚至这样做。在此先感谢任何勇敢的 StackOverflowers,他们可以帮助我理解这个相互交织的术语!

    最佳答案

    对我来说,集群意味着系统的许多品质,但归结为容错——服务器、网络和数据持久性。有松散和紧密耦合的系统以及介于两者之间的所有风格。紧耦合系统在接近硬件的级别执行集群。许多旧的集群系统与应用程序的耦合更加紧密,这些应用程序通常没有意识到它们是集群的。

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

    你提到的所有例子都有某种“聚类”。描述每个架构如何实现这一点的细节需要很长的答案。对我来说,不同之处在于当您使用该架构时“免费”提供什么,以及您需要做多少工作才能使其以最佳方式工作。

    您如何混合和匹配您提到的解决方案取决于您的架构是什么样子和您的要求。您可以拥有一个 Terracotta 存储来实现本地高速持久性,而使用云来实现其余部分。您可以使用 Glassfish 作为您的应用程序服务器,并使用 Terracotta 作为您的持久层。

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

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

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

  • 这 3 个系统提供了自己的集群功能。它们可能需要您进行大量机器和服务层配置,以使系统在生产环境中运行良好。我听说 Terracotta 是一个分布式持久层的好消息。我在 Jboss 下使用了很多 Jgroups,要正确运行可能很棘手,但 Jboss 也可能有一些很好的默认配置/文档。 Oracle 很可能最难正确地进行集群。 DBA 通过调整 Oracle 配置赚了很多钱。
  • 虚拟机(即“该设备是一组 VM...”)
  • 应用服务器,如Tomcat、GlassFish

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

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

    希望有些帮助。

    关于Java 和聚类的不同类型/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8793781/

    相关文章:

    java - System.out.println(dog1.getName());返回空值

    java - 一个线程总是在没有机会运行其他线程

    java - 部署 WAR 时出现 Glassfish 错误 - 部署期间发生错误 : Exception while preparing the app : Invalid resource :

    java - (Enterprise GlassFish v3 build 11) 通信链路问题 (MySQL DB)

    google-app-engine - 使用 Amazon Web Services S3 与 Google Application Engine 进行存储的相对优势

    java - 在 Get 和 Post Controller 之间传递属性,但不在 URL 中传递属性

    java - java中的字符串匹配操作

    java - 部署错误 : Java-Webproject from netbeans to glassfish 4. 0

    sql - 在云上选择正确的数据库 Azure SQL

    c# - : Azure service client and device client 之间的区别