2019独角兽企业重金招聘Python工程师标准>>>

群组通信使用“组和成员”的概念。一般来说,成员是组的一个部分,一个组中包括多个成员。或者可以理解为,成员是一个节点,一组是一个集群。 一个节点是一个进程,位于某个主机上。一个集群可以有一个或多个节点。在同一台主机上可以有多个节点,所有节点可能会分属不同的集群。当然节点也可以运行在不同的主机上。

  • JGroups是一个可靠的组通信工具包。

  • 节点进程可以加入到一个组,发送消息给组内的所有成员或单个成员,接收组中任何成员发送的消息。

  • JGroups会跟踪组中的每一个成员,当新成员加入、已有成员退出、已有成员异常时,会发送通知消息给组成员。

  • 一个组使用名字来标识它自己。

  • 组没必要显式地创建,当一个节点进程加入一个不存在的组,该组就被自动创建。

  • 一个群组可以位于同一台主机上、可以位于同一个局域网内、或通过广域网。

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

  • 通道,为应用层提供构建可靠群组通信的机制。

  • 构建块,位于通道之上,是对通道进行了一个更高层面的抽象和封装,预留了更多的程序弹性,用法上也更复杂。

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

通道

一个节点程序要加入一个集群发送消息,这个节点程序必须首先创建一个通道。通过此通道使用一个集群名字可连接到这个集群(具有相同集群名称的所有通道组成的一个通讯网络)。

通道建立完成后,成员可发送消息给组内其他成员,也可以从组内其他成员接收消息。组中成员通过断开通道离开群组。通道可以重新利用,断开连接的成员可以重连到群组。如果客户端需要连接多个群组,则需要创建独立的通道连接到不同群组。客户端程序主动关闭通道后,这个通道不能再被使用。

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

通道使用的属性通过 XML 文件提供,当然 JGroups 也允许通过简单字符串,URL,DOM树或编程接口。

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

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

构建块

JGroups 构建块是基于通道之上的,对通道进一步做了封装,对应用提供了更复杂的 API。构建块即可以在内部创建通道,也可以根据需要创建构建块。应用程序可以直接和构建块进行交互。总的来说构建块基于 JGroups 通道提供了更抽象的群组交互接口。

协议栈

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

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

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

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

转载于:https://my.oschina.net/blacklands/blog/864146

JGroups - 02架构概述相关推荐

  1. 1小时学会:最简单的iOS直播推流(二)代码架构概述

    最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有,愿意懂直播技术的同学快来看!! 源 ...

  2. NR 5G 安全架构概述

    安全架构概述 安全域 安全体系结构概述 该图说明了以下安全域: 网络接入安全性(I):一组安全功能,使UE能够安全地通过网络进行身份验证和接入服务,包括3GPP接入和非3GPP 接入,特别是防止对(无 ...

  3. netty系列之:netty架构概述

    文章目录 简介 netty架构图 丰富的Buffer数据机构 零拷贝 统一的API 事件驱动 其他优秀的特性 总结 简介 Netty为什么这么优秀,它在JDK本身的NIO基础上又做了什么改进呢?它的架 ...

  4. Java生鲜电商平台-微服务架构概述

    Java生鲜电商平台-微服务架构概述 单体架构存在的问题 在传统的软件技术架构系统中,基本上将业务功能集中在单一应用内,或者是单一进程中.尽管现代化的软件架构理论以及设计原则已推广多年,但实际技术衍化 ...

  5. Nvidia CUDA初级教程4 GPU体系架构概述

    Nvidia CUDA初级教程4 GPU体系架构概述 视频:https://www.bilibili.com/video/BV1kx411m7Fk?p=5 讲师:周斌 本节内容: 为什么需要GPU 三 ...

  6. LAMP+LNMP(一) LAMP架构概述

    一.LAMP架构概述 LAMP就是 Linux.Apache(httpd).MySQL.PHP四个东东的统称,我们常见的大部分网站都是由这个体系提供的,比如google.Taobao.51CTO等等. ...

  7. Kafka概念和基本架构概述

    Kafka概念和基本架构概述 一.Kafka介绍 Kafka是最初由 Linkedin 公司开发,是一个 分布式.分区的.多副本的.多生产者.多订阅者,基于zookeeper协调的分布式日志系统(也可 ...

  8. NVIDIA CUDA初级教程(P2-P3)CPU体系架构概述、并行程序设计概述

    文章目录 1.CPU体系架构概述 2.并行程序设计概述 1.CPU体系架构概述 现代CPU架构 CPU的定义 (1)执行指令.处理数据的器件:完成基本的逻辑和算术指令 (2)内存接口.外部设备接口 ( ...

  9. 【TA-霜狼_may-《百人计划》】图形2.7.2 GPU硬件架构概述

    [TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 @[TOC]([TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 GPU是什么 GP ...

最新文章

  1. Java 函数式编程和 lambda 表达式
  2. Spring boot maven 搭建框架
  3. socket的系统调用
  4. 电脑计算机的硬盘那些可以删除吗,我的电脑出现多个可移动磁盘该怎么删除?...
  5. MySQL查询更新所有满足条件的数据
  6. java 二进制反码_Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题...
  7. 【Ubuntu-Tensorflow】程序结束掉GPU显存没有释放的问题
  8. VS2019 更新MSDN并创建快捷方式
  9. 作者:唐碧霞(1984-),女,中国科学院北京基因组研究所生命与健康大数据中心工程师...
  10. 微软在 ARM 上成功移植 OpenJDK for Windows 10
  11. 转换运行时获取DTP语义组
  12. 黑鲨helo支持html吗,黑鲨游戏手机Helo综合评测 到底值不值得买
  13. vasp和ms_武汉理工大学赵焱课题组开发脚本 MS建模一键获取VASP输入文件POSCAR
  14. 微信域名防封最全代码
  15. 设置JTree树形结构文字的颜色以及文字背景颜色的方法_-Chaz-_新浪博客
  16. fc坦克大战游戏完美复刻
  17. 2022年度学习总结
  18. linux删除slave网卡,Linux bonding网卡与其slave共同使用
  19. CentOS7 安装 RabbitMQ 3.6(方法适用于安装任意版本 RabbitMQ)
  20. 那些你可能不知道的 PDF 工具

热门文章

  1. 区别js中的3/2(结果1.5))与 java 中的 2/3(结果:0)
  2. maven项目发布到tomcat后没有lib目录解决方案
  3. 虚拟机ubuntu 网速慢的解决方法
  4. ajax的content-download时间过慢问题的解决与思考
  5. 如何实现vue前端跨域,proxyTable解决开发环境前端跨域问题
  6. 虚拟机中PXE-MOF:Exiting intel PXE ROM.Operating system not found解决方法
  7. Android错误:无法在设备上安装* .apk *:超时
  8. 计算机中的管理应用,计算机在企业管理中应用_29067.doc
  9. 笔记本电脑黑屏但还在运作怎么办
  10. ros之旋转加平移公式