集群通信组件Tribes之整体介绍
接下来一系列文章会对集群通信框架tribes进行源码级别的分析,欢迎讨论。
把若干机器组合成一个集群,集群为了能协同工作,成员之间的通信是必不可少的,当然可以说这也是集群实现中重点需要解决的核心问题,一个强大的通信协同机制是集群的基础。
简约地说,Tribes是一个具备让你通过网络向组成员发送和接收信息、动态检测发现其他节点的组通信能力的高扩展性的独立的消息框架。在组成员之间进行信息复制及成员维护是一个相对复杂的事情,因为不仅要考虑各种通信协议还要有必要的机制提供不同的消息传输保证级别,且成员关系的维护要及时准确,同时针对IO不同场景需提供不同的IO模式,这些都是组成员消息传输要遇到的需要深入考虑的几点。而Tribes很好地将点对点、点对组的通信抽象得即简单又相对灵活。
Tribes拥有消息可靠的传输机制,它默认基于TCP协议传输,TCP拥有三次握手机制保证且有流量控制机制,另外在应用层面的消息可靠保证分为三个级别:
①NO_ACK级别,这是可靠级别最低的方式,使用此种级别时则认为Tribes一旦把消息发送给socket的发送队列则认为发送成功,尽管传输过程中发生异常导致接收方可能没有接收到,当然这种级别也是发送最快的方式。
②ACK级别,这是最推荐使用的一种方式,它能保证接收方肯定接能收到消息,Tribes向其他节点发送消息后只有接收到了接受者的确认消息才会认为发送成功,这种确认机制能在更高层面保证消息可靠性,不过发送效率会有影响,因为每个消息都需要确认,得不到确认的会重发。
③SYNC_ACK级别,这种方式不仅保证传输成功还保证执行成功,Tribes向其他节点发送消息后接收者接收到不马上返回ACK确认而是对接收到的消息进行处理,直到处理成功才返回ACK确认。如果接收成功处理失败接收者会返回ACK_FAIL给发送者,发送者将会重发。当然这种级别消息发送效率是最低最慢的。
整个Tribes的设计核心可以用上图表示,在IO层有三个重要的模块,其中MembershipService模块主要负责组成员关系的维护,包括维护现有成员及发现新成员,这些工作都是模块自动运行完成,你无需关心组成员的维护工作;ChannelSender模块负责向组内其他成员发送消息及其各种机制的详细实现;ChannelReceiver模块用于接收组内其他成员发送过来的消息及其各种机制的详细实现。消息的可靠性就是通过ChannelSender及ChannelReceiver的协同得到不同级别的保证的。拦截器栈提供了在消息传送到应用层之前对消息进行一些额外的操作,例如对某些信息进行过滤编码等等操作;最后到应用层,多数情况下我们只需关注应用层的东西即能使用起来,应用层面主要就是一些监听器,所以只要实现监听器里面指定的方法即可以对IO层传输上来的消息做逻辑处理。
拦截器、监听器的引入都是经典的模式,抽象一个底层作为数据处理层,实现各种复杂的通信及机制,而拦截器则是对底层数据的一种统一额外加工处理,监听器则作为接口提供应用层对数据做业务逻辑处理,组成了一个优雅的设计方案。
喜欢研究java的同学可以交个朋友:
集群通信组件Tribes之整体介绍的更多相关文章
- 集群通信组件tribes之使用方法
上面已经对tribes的内部实现机制及原理进行了深入的剖析,在理解它的设计原理后看看如何使用tribes,整个使用相当简单便捷,只需要四步: ① 定义一个消息对象,由于这个消息对象是要在网络之间传递的 ...
- 集群通信组件tribes之用法
上面已经对tribes的内部实现机制及原理进行了深入的剖析.在理解它的设计原理后看看怎样使用tribes.整个使用相当简单便捷,仅仅须要四步: ① 定义一个消息对象,因为这个消息对象是要在网络之间传递 ...
- 集群通信组件tribes之集群的平行通信
前面的集群成员维护服务为我们提供了集群内所有成员的地址端口等信息,可以通过MembershipService可以轻易从节点本地的成员列表获取集群所有的成员信息,有了这些成员信息后就可以使用可靠的TCP ...
- 集群通信组件Tribes之如何维护集群成员信息
一个集群包含若干成员,要对这些成员进行管理就必须要有一张包含所有成员的列表,当要对某个节点做操作时通过这个列表可以准确找到该节点的地址进而对该节点发送操作消息.如何维护这张包含所有成员的列表是本节要讨 ...
- 集群通信组件tribes之集群的消息接收通道
与消息发送通道对应,发送的消息需要一个接收端接收消息,它就是ChannelReceiver.接收端负责接收处理其他节点从消息发送通道发送过来的消息,实际情况如图每个节点都有一个ChannelSende ...
- 集群通信组件Tribes之怎样维护集群成员信息
一个集群包括若干成员,要对这些成员进行管理就必需要有一张包括全部成员的列表.当要对某个节点做操作时通过这个列表能够准确找到该节点的地址进而对该节点发送操作消息.怎样维护这张包括全部成员的列表是本节要讨 ...
- 集群通信组件tribes之应用程序处理入口
Tribes为了更清晰更好地划分职责,它被设计成用IO层和应用层,IO层专心负责网络传输方面的逻辑处理,把接收到的数据往应用层传送,当然应用层发送的数据也是通过此IO层发送,数据传往应用层后必须要留一 ...
- 集群通信组件tribes之通道拦截器
拦截器应该可以说是一个很经典的设计模式,它有点类似于过滤器,当某信息从一个地方流向目的地的过程中,可能需要统一对信息进行处理,如果考虑到系统的可扩展性和灵活性通常就会使用拦截器模式,它就像一个个关卡被 ...
- 【原创】强撸基于 .NET 的 Redis Cluster 集群访问组件
Hello 大家好,我是TANZAME,我们又见面了.今天我们来聊聊怎么手撸一个 Redis Cluster 集群客户端,纯手工有干货,您细品. 随着业务增长,线上环境的QPS暴增,自然而然将当前的单 ...
随机推荐
- Go 语言函数
函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回类型,和参数. ...
- Java第5次实验提纲(Java图形界面编程)
1. Swing与NetBeans 使用NetBeans编写简单界面.见GUI实验参考文件中的0.第06次实验(图形程序设计.事件处理与Swing).doc 题目1: Swing用户界面组件与事件处理 ...
- 微信小程序基础之开源项目库汇总
awesome-github-wechat-weapp 是由OpenDigg整理并维护的微信小程序开源项目库集合.我们会定期同步OpenDigg上的项目到这里,也欢迎各位提交项目给我们. (链接:ht ...
- Zookeeper核心工作机制(zookeeper特性、zookeeper数据结构、节点类型)
10.1 zookeeper特性 1.Zookeeper:一个leader,多个follower组成的集群. 2.全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个ser ...
- Dubbo框架应用之(三)--Zookeeper注册中心、管理控制台的安装及讲解
我是在linux下使用dubbo-2.3.3以上版本的zookeeper注册中心客户端.Zookeeper是Apache Hadoop的子项目,强度相对较好,建议生产环境使用该注册中心.Dubbo未对 ...
- Openstack: MP-BIOS bug: 8254 timer not connected to IO-APIC
Issue: After you import an linux image into openstack and run an instance of it, you may find that t ...
- Gazebo機器人仿真學習探索筆記(六)工具和实用程序
Gazebo附带了许多工具和实用程序. 这些教程说明了这些可用的工具,以及如何使用它们. 主要有: 1 记录和播放 2 日志过滤 3 应用力/扭矩 4 HDF5数据集 官网介绍通俗具体,非常容易,请参 ...
- TextView的升级版———AutoCompleteTextView
TextView的升级版---AutoCompleteTextView AutoCompleteTextView顾名知义,可以自动提示的TextView,还可以提示错误信息. 这里介绍基本的使用,能够 ...
- Redis 学习笔记1:CentOS 6.7下安装Redis
在linux环境搭建Redis环境,首先从官网(http://redis.io/)下载Redis 版本,本人使用的3.21版本. 1. 将redis 解压到 /usr/local目录下. [root ...
- BASH如何获得某个目录下的某类文件的文件名
假设某个目录下有一堆以jpeg为后缀的文件名,我们需要在另一个目录中获得他们的文件名,并输出. 可以联合使用ls,awk,sed等命令来完成. 方法一: 使用ls列出目录下以.jpeg为结尾的文件,然 ...