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

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

你可能感兴趣的:(Filip Hanik谈利用Apache Tribes实现异构集群通信)