集群通信框架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的同学可以交个朋友:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 13:38:55

集群通信框架Tribes之整体介绍的相关文章

集群通信组件tribes之使用方法

上面已经对tribes的内部实现机制及原理进行了深入的剖析,在理解它的设计原理后看看如何使用tribes,整个使用相当简单便捷,只需要四步: ① 定义一个消息对象,由于这个消息对象是要在网络之间传递的,网络传输涉及到序列化,所以需要实现Serializable接口. public class MyMessage implements Serializable { private String message; public String getMessage() { return message

集群通信组件Tribes之怎样维护集群成员信息

一个集群包括若干成员,要对这些成员进行管理就必需要有一张包括全部成员的列表.当要对某个节点做操作时通过这个列表能够准确找到该节点的地址进而对该节点发送操作消息.怎样维护这张包括全部成员的列表是本节要讨论的主题. 成员维护是集群的基础功能,一般划分一个独立模块或层完毕此功能,它提供成员列表查询.成员维护.成员列表改变事件通知等能力. 因为tribes定位于基于同等节点之间的通信,所以并不存在主节点选举的问题,它所要具备的功能是自己主动发现节点,即新节点增加要通知集群其它成员更新成员列表,让每一个节

集群通信组件tribes之应用程序处理入口

Tribes为了更清晰更好地划分职责.它被设计成用IO层和应用层,IO层专心负责网络传输方面的逻辑处理.把接收到的数据往应用层传送,当然应用层发送的数据也是通过此IO层发送,数据传往应用层后必需要留一些处理入口供应用层进行逻辑处理,而考虑系统解耦,这个入口最好的方式是使用监听器模式,在底层发生各种事件时触发全部安装好的监听器,使之运行监听器里面的处理逻辑.这些事件主要包括了集群成员的加入和退出.消息报文接收完毕等信息,所以整个消息流转过程被分成两类监听器.一类是跟集群成员的变化相关的监听器Mem

集群通信应用开发吐槽(2014年)

在集群通信行业两家公司开发PC应用六年了,但在对开发的理解的道路上感觉还是挺孤独的,于是想写点东西发泄下郁闷,没想到只想了一两小时就写了几十条提纲.好话说在前面,文中的提到的现象可能不全面,甚至是误会的,文中的观点更是需要审视的看待. 产品越复杂(越多硬件)越能卖出好价钱 产品便携易用,越能解决客户问题,越给客户创造价值,才越值钱.产品成本和产品价值没有直接关系,iphone的成本如果只有1元钱,就没人花45千买了? 性能问题需要测试数据来证明 在讨论某个功能的整体设计时,做嵌入式开发的常常随意

用MPI_Send和MPI_Recv实现简单集群通信函数

本片博客总结自我<并行计算>MPI实验 在这里我用阻塞式消息传递函数MPI_Send.MPI_Recv和非阻塞式消息发送函数MPI_Isend实现了三个简单的集群通信函数: MPI_Bcast广播函数 MPI_Gather收集函数 MPI_Scatter散播函数 1.MPI_Bcast广播函数 (1)原型简介 void MPI_Bcast(void* address, int count, MPI_Datatype datatype, int root, MPI_Comm comm); MPI

09 Spring Cloud的集群保护框架Hystrix

1.概述 在很多系统架构中都需要考虑横向扩展.单点故障等问题,对于一个庞大的应用集群,部分服务或机器出现问题不可避免.在出现问题时,如何减少故障的影响.保障集群的高可用,成为一个重要的课题.在微服务集群中,不管是服务器,还是客户端,都支持集群部署,本节将介绍Spring Cloud中所用的集群保护框架:Hystrix. 1.1实际问题   假设有如下应用程序 用户范围销售模块,服务通过Web接口或者其他方式访问会员模块,会员模块访问数据库.如果数据库因为某些原因变得不可用,会员模块就会得到"数据

隧道集群通信覆盖系统

隧道集群通信覆盖方案(北京恒星科通科技发展有限公司 http://www.bjhxkt.com 010-82565576)一.隧道集群通信覆盖系统概述隧道集群通信覆盖方案隧道集群通信覆盖系统包括150M调度对讲子系统.350M公安消防集群子系统和调频广播及应急广播子系统.调度对讲子系统主要用于隧道管理单位的内部通信,能让隧道内维修.巡逻等人员与控制室管理人员之间建立灵活的通信联络,满足内部管理.指挥.调度等的需要.350M公安消防集群子系统通过将隧道外的基站信号引入,满足交警.消防等单位在隧道内

(转帖)开源容器集群管理系统Kubernetes架构及组件介绍

最近在搞Docker还有她的管理工具,选型Kuberetes后,被她的术语和概念搞得晕头转向...看了一篇文章还不错,放到这里分享出来. 地址:http://www.linuxidc.com/Linux/2015-12/125757.htm 引文如下: Kubernetes 作为Docker生态圈中重要一员,是Google多年大规模容器管理技术的开源版本,是产线实践经验的最佳表现.如Urs Hölzle所说,无论是公有云还是私有云甚至混合云,Kubernetes将作为一个为任何应用,任何环境的容

Linux集群架构(2)LVS介绍、LVS的调度算法、NAT模式搭建、 DR模式、keepalive

             负载均衡集群介绍                 LVS介绍 1.LVS NAT模式:(,目标ip转发.适用于小型集群,机器数量不多10台左右) 2.LVS IP Tunnel模式(将目标ip进行更改) (在这个模式下的rs机器都是配置有公网ip) 3.LVS DR模式(把数据包的MAC地址修改) NAT模式适合小型集群,机器在10台左右.其优势是节省公网ip. IP TUNNEL和DR 相差不大,能使用在较大的集群模式下,但是每台rs服务器都要配置有公网ip,这样会比