文档章节

Bela Ban's JGroups Manual Translation Serial II - JGroups概述

今幕明
 今幕明
发布于 2016/08/31 11:06
字数 1782
阅读 21
收藏 0

   群组通信使用的组和成员的概念,一般来说,成员是组的一个部分,一个组中包括很多成员。比较常见的术语,成员是一个节点,一组即是一个集群。我们这里就使用这些术语。

    一个节点是一个进程,位于一些主机上。一个群集可以有一个或多个节点。在同一台主机可以有多个节点,所有节点可能会或可能不会是相同群集的一部分。节点当然也可以运行在不同的主机上。

    JGroups 是一个可靠的组通信工具包。节点进程可以加入到一个组,发送消息给所有成员或单个成员,接收组中任何的成员发送的消息。系统跟踪组中的每一个成员,当新成员加入,已有成员退出或已有成员异常时会发送消息通知组成员时。 一个组使用名字来识别它自己。组没必要显式地创建,当一个进程加入一个不存在的组,该组将被自动创建。一组进程可以位于同一台主机上,在同一个局域网内,或通过广域网。成员可以是多个组的一部分。

The_architecture_of_JGroups.png

如上为 JGroups 的架构图,它包括三个部分:

  • 通道,用来构建可靠群组通信的应用
  • 构建块,位于通道之上,是对通道提供了一个更高层面的抽象
  • 协议栈,实现指定属性定义的协议,被通道使用

这里我们主要介绍如何通道 API,构建块,协议栈,通过这些介绍我们可以构建需要群组通信的分布式应用。

    一个信道需要连接到一个协议栈,每当应用程序发送消息,通道传递给它的协议栈,并将它传递给最顶层的协议。该协议处理该消息将其传递给下层协议,因此消息 被处理从一个协议到下一个协议直到最底层的协议,最底层的协议(传输层协议)将消息发送到网络上面。同样的情况发生在相反的方向上:传输层协议监听网络上 的消息,当消息接收到同样会被从一个协议到下一个协议的处理,直到最上层到达通道。通道接着触发应用程序的 receive() 交付消息。

   当应用程序连接到通道,协议栈将被启动。当应用程序断开通道,协议栈将被停止。当通道关闭,协议栈将被销毁,释放资源。接下来我们对通道,构建块,协议栈做一个简单介绍。

 

通道

    一个节点程序要加入一个集群发送消息,这个节点程序必须首先创建一个通道,通过此通道使用一个集群名字可连接到集群(具有相同名称的所有通道组成一组)。通道是一个组的句柄,通道建立完成后,成员可发送和接收消息到/从 所有其他组成员。组中成员通过断开通道离开群组。通道可以重新利用,断开连接后的成员可以通过重新连接连接到群组。然而,在某一特定时间点通道只允许被一 个客户端连接。如果多个群组创建则需要创建多个通道。客户端成员的不在使用通道的信号将会关闭通道,当通道关闭之后则不能在被使用。

    每个通道有一个唯一的地址,任何一个成员也有一个唯一的地址。通道总是知道群组中的所有成员的地址,我们可以通过通道检索出所有成员的地址的列表,这个列 表叫做试图,一个成员可以从视图中选择一个成员并发送一对一的单波消息,一个成员也可以发送多波消息到所以群组成员(视图中)。无论成员加入或离开群组, 或者错误被检查到,一个新的视图被创建,视图信息发送到剩余的其他成员,所有成员保持同步。

    通道使用的属性通过 XML 文件提供,当然 JGroups 也允许通过简单字符串,URLDOM树或编程接口。通道相关 API 我们将会在下面介绍。

 

构建块

    通道是简单而原始的。通过对网络通信协议的简单封装,它很直观的提供了群组通信的功能,被广泛使用,很好理解。通常应用程序不需要使用所有 JGroups 很复杂的接口,只需要要使用 JGroups 接口中很少的一部分便能达到要求;JGroups 接口简单易懂,一般客户端应用只需使用 JGroups 的几个简单方法便可以创建的使用通道。

    通道提供异步的消息发送/接收的功能,有点类似于UDP,消息发送到网络上后发送方法 send()将立即返回。概念上讲,对异步请求的响应是无序的,应用程序则要根据自己的业务逻辑处理处理返回消息的顺序。

    JGroups 构建块是在通道之上,对通道通进一步封装,对应用提供了更复杂的 API。构建块即可以在内部使用的创建通道,也可以根据需要基于已存在的通道创建构建块。应用程序可以直接和构建块进行交互。使用构建块接口,程序员不在去写乏味重复的代码(请求-响应),总的来说构建块基于 JGroups 通道提供了更抽象的群组交互接口。同样我们将在下一章详细介绍构建块接口。

 

协议栈

    协议栈包含一系列双向作用的协议,所有通过通道发送和接收的消息都需要在经过所有协议的处理,每一层协议都可以修改(添加消息头),重新排列,传递或删除消息,分离层协议可以将一个消息分成多个小的消息,给每个消息添加一个 ID 头,根据这些 ID 在接收端重新组装原来消息。

    协议栈的组成,即它的协议,由通道的创建者决定,一个XML文件中定义所有被使用的协议(并为设定每个协议的参数)。然后,使用该配置来创建的协议栈。

    如果只是简单的使用通道,那么对协议栈的详细理解是没有必要的,但是如果想理解 JGroups 更底层的原理,想对 JGroups 进行调优,那就需要研究详细的协议栈中的协议,可以通过设定协议栈中协议的参数来调优 JGroups

本文转载自:https://developer.jboss.org/wiki/BelaBansJGroupsManualTranslationSerialII-JGroups

今幕明
粉丝 46
博文 224
码字总数 39350
作品 0
朝阳
程序员
私信 提问
Memcached的JGroups实现支持失败转移和JMX

Memcached 是一个分布式内存对象缓存系统, 用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于的...

JavaGG
2008/10/15
928
0
JGroups 3.0.11/3.1.0 发布

JGroups 刚发布了两个新版本,分别是 3.0.11 和 3.1.0 ! JGroups 3.0.11 用于 EAP 6 / JBoss 7.x 应用服务器的版本,主要是 bug 修复,包含两个性能方面的改进。 而 3.1.0 解决了超过 90 个问...

红薯
2012/07/09
810
0
bbossgroups 2.0-RC版本中如何通过JGroups来实现集群节点间远程服务调用,或者多服务器之间远程服务调用

bbossgroups 2.0-RC中对jgroups已经升级到Jgroups 2.10.0版本,因此对aop中基于JGroups的rpc也做了相应的调整,本文详细讲解新的使用方法: 1.配置文件目录调整: jgroups本身协议配置文件和...

bboss
2010/07/17
0
0
JGroups 3.3.0.Final 发布,Java 多播通讯框架

JGroups 3.3.0.Final 今天发布了,包含一些优化和新特性,值得关注的有: 消息批处理 : messages received as bundles by the transport are passed up as batches . Compared to passing i...

红薯
2013/05/08
1K
2
JGroups 3.2.0.Final 发布,Java 多播通讯框架

JGroups 3.2.0.Final 发布了,该版本最重要的特性包括: RELAY2 Used for cross-site replication in Infinispan . Compared to RELAY, RELAY2 allows to be connected to more than 1 site.......

红薯
2012/10/21
1K
4

没有更多内容

加载失败,请刷新页面

加载更多

面向对象方面的一些东东

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" cont......

流年那么伤
34分钟前
2
0
git 过滤文件夹和文件(IDEA)

最近使用git版本管理工具遇到一件很烦的事情,commit时总会把.idea、.*.iml和target文件添加进来,实际开发中,这些是需要过滤掉的。在.gitnore文件添加了过滤不起作用。下面介绍一种成功过滤...

uug
42分钟前
2
0
Spark Streaming 实时统计商户当日累计PV流量

一、问题 对实时流量日志过滤筛选商户流量,对每个商户的流量进行累计,统计商户实时累计流量。 当时间超过24时时,重新统计当日商户的实时累计流量。 二、实现步骤 1、采用Spark Streaming...

boonya
47分钟前
2
0
如果Task与Event 创建了记录类型后,不出现在Lightning的Activities中

如果在Lightning的Activities没出现这两个Button,但是在页面布局的Lightning 按钮区也存在,全局操作的记录类型就需要选择一个,否则不会出现

在山的那边
55分钟前
2
0
ddd中的子域和界限上下文

我们先来说说子域是什么?子域在我的理解是在一个庞大的系统中可以明显感知的不同的区块,如果在电商模块中,商品目录,订单,物流,库存,发票等等都可以感知他们明显的不同,可以认为是子域...

算法之名
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部