写点什么

Filip Hanik 谈利用 Apache Tribes 实现异构集群通信

2009 年 2 月 12 日

Apache Tribes 是 Tomcat 的一个模块,支持服务器集群中的组通信。 Filip Hanik 谈到了异构集群中的挑战以及 Tribes 如何帮助实现 Tomcat 集群的组通信需求。他在 SpringOne 美国大会做了一场关于 Tribes 消息框架的专题讲座

讲座一开始,Filip 谈到几个开源的组通信项目,包括 Appia Spread Erlang JGroups 。他讨论了统一组模型,在该模型里集群中的所有节点都是一样的,它们以同样的方式处理、发送、接收消息. 许多组通信模块都是为一个统一的通信模型建立的。但是在大多数异构集群实现中,这通常都不是达到集群所需性能和可扩展性的最佳解决方案。

当集群每个节点上的处理等是动态的且运行异构硬件环境中,那么一个非统一组通信模式是个更好的解决方案。

Tribes 是一个具有组通信能力的消息传递框架,这些是在 Tomcat 5 容器的集群 /session 复制代码之外创建的。它是为 Tamcat集群实现提供的通信框架。它的目的之一是简化分布式应用点对点(peer-to-peer)及点对组(peer-to-group)通信。Tribes 支持两种类型的消息传递:可用于两个节点间事件的并发(concurrent)消息传递和可用于发送消息给多个节点的平行(parallel)消息传递。

Tribes 框架的其它特性包括:

  • 有保证的消息传递:默认实现是基于 TCP 的,使用了 java.io java.nio 包。
  • 保证级别:Tribes 支持 3 个级别的消息传递保证(NO_ACK、ACK 和 SYNC_ACK)。
  • 每消息传递语义:这些语义允许被传递的每个消息都是不同的,而且每个消息使用不同的保证级别。
  • 可插拔拦截器:可被用来拦截贯穿已定义方法的任何事件并操作消息属性(标记)。 ChannelInterceptorBase 类可以把非拦截方法的冗余代码降至最少。
  • 传递反馈:Tribes 试图对每个消息和每个传递语义(NO_ACK、ACK、SYNC_ACK)都传递反馈。消息传递既可以是同步的也可以是异步的。
  • 并发和平行传递:并发传递意味着任一时刻可以发送或接收多于一个的消息。没有“消息阻塞”意味着使用 SYNC_ACK 保证级别传递 10M 消息不会中断使用 NO_ACK 保证级别传递的 10KB 信息。平行传递则允许一个线程发送消息给多个目的地(NIO)。
  • 固定的节点层级:这一特性支持确定集群领导、自动合并组以及在多点传送不工作的地方发现节点。
  • 失败检测:包括一个简单的拦截器 TcpFailureDetector 以在一个集群成员宕机时提供反馈。这样就不需要等待超时而且也没有在繁忙网络上 ping 节点时上当受骗的风险。

Tribes 还支持像 RPC 消息传递的特性以及把通道构建到 JNDI 树中的 JNDI 通道。该框架架构包含如下组件:

  • 通道:这是链中的第一个拦截器。它有一个或多个 ChannelListener MembershipListener . 它把消息序列化并反序列化,而且支持传递纯 byte[] 数据的 ByteMessage
  • 拦截器:拦截器的例子包括有失败检测 / 静态成员、总体顺序或每个成员顺序、领导选举 / 消息数据加密、消息分派(异步消息传递),以及所有或没有传递担保(delivery guarantee)。
  • 协调器:这是链中的最后一个拦截器。它协调 I/O 组件如 Sender, Receiver 和 Membership。

在这一专题讲座中,Filip 还示范了一个简单的例子应用,展示了如何实现 Tomcat 集群并激活针对 session 和上下文属性复制的 Webapp 配置选项。server.xml 文件包括了对集群元素的配置,比如 Cluster, Session Manager(DeltaManager 或 BackupManager)、Channel(Tribes)、Membership(支持两种成员:使用多点传送在运行时发现其它节点的动态成员和每个节点在 server.xml 定义的静态成员)、Messaging(基于 TCP,每个节点都有一个接收者和一个发送者)、Receiver(接收集群消息)、Sender(发送集群消息)、Interceptors(在功能方面类似于 valves)、Valves(在每个请求结束时初始化 session 复制)、以及 ClusterListener(支持特定类型消息的自定义消息传递 listener)。

查看英文原文: Filip Hanik on Heterogeneous Cluster Communication Using Apache Tribes

2009 年 2 月 12 日 07:281915
用户头像

发布了 150 篇内容, 共 36.3 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

Reactor:深入理解reactor core

程序那些事

响应式编程 reactor 程序那些事 响应式系统 reactivex

架构师训练营第 1 期 第 7 周作业

李循律

极客大学架构师训练营

2020LF AI&DATA DAY(AI开源日):中国开源社区迈入全球化新征程

Geek_459987

架构师训练营第八周总结

邓昀垚

训练营第三周作业

爱码士

训练营

第三届进博会恒大农牧开馆迎客,旗下进口食品受热捧!

最新动态

全面解析ArrayList,超详细!

程序员的时光

面试题 ArrayList JAVA集合

“开源软件供应链点亮计划-暑期2020”公布结果 基于ChubaoFS开发的项目获得最佳质量奖

京东科技开发者

大数据 云原生 开源项目

分库分表的 9种分布式主键ID 生成方案,挺全乎的

程序员内点事

分库分表 Java 分布式

天啦撸!打印日志竟然只晓得 Log4j?

沉默王二

Java 日志 log4j

嗯,查询滑动窗口最大值的这4种方法不错...

王磊

Java 数据结构和算法

第7周 性能优化(一)作业

钟杰

极客大学架构师训练营

大厂程序员必备的一套浏览器书签,我帮你整理好了。[下载导入浏览器]

小傅哥

Java 小傅哥 资料整理 浏览器书签 程序员必备

架构师训练营第 1 期第 7 周作业

du tiezheng

极客大学架构师训练营

架构师训练营第八周作业

邓昀垚

极客大学架构师训练营

数据结构与算法系列之链表操作全集(三)(GO)

书旅

go 数据结构

接口测试如何在post请求中传递文件

测试人生路

接口测试

【涂鸦物联网足迹】API及SDK介绍

IoT云工坊

软件开发 物联网 API sdk 云平台

第七周总结

架构师训练营第 1 期第 8 周作业

业哥

第七周作业

数据结构与算法系列之栈&队列(GO)

书旅

go 数据结构与算法

go-zero如何追踪你的请求链路

Kevin Wan

go Trace microservice

会展云技术解读 | 面对突发事故,APP如何做好崩溃分析与性能监控?

京东科技开发者

云计算 云服务

mongodb 源码实现系列 - 网络传输层模块实现三

杨亚洲(专注mongodb及高性能中间件)

MySQL mongodb 分布式 高性能 分布式数据库mongodb

训练营第三周学习总结

爱码士

训练营

《迅雷链精品课》第一课:认识区块链

迅雷链

区块链

第 7 周 性能优化(一)总结

钟杰

极客大学架构师训练营

区块链usdt支付系统开发方案,承兑系统搭建

WX13823153201

区块链usdt支付系统开发

tomcat打包成rpm包

lee

tomcat rpm

简析低代码开发与传统开发的区别与优势

Marilyn

敏捷开发 低代码

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

Filip Hanik谈利用Apache Tribes实现异构集群通信-InfoQ