JGroups学习(二)
来源:互联网 发布:淘宝加入游戏专营网址 编辑:程序博客网 时间:2024/06/05 19:45
一. JGroups协议栈简介
JGroups最强大的功能在于它灵活的协议栈配置,允许开发者调整协议栈中的协议从而适应自己实践的环境和需求。
JGroups启动时会根据配置的协议栈,构成一个协议栈Java对象,发送的消息会自顶向下的依次经过各层协议进行处理,直至发送到网络链路层。同样,收到的消息,JGroups也会将消息自底向上的传递,直至回调ReceiverAdapter交由应用程序。
消息在协议栈的流程如图:
二. JGroups协议栈详解
1. State Transfer(状态传输协议)
STATE_TRANSFER 是一个已有状态的传输协议,向周围节点传输二进制流。在state的提供端,JGroups创建一个outputStream并放到一个byte[]中,然后将这个output stream传递给getState(outputStream)回调,在state状态的请求端,创建一个inputstream并传递到回调方法setState(InputStream)中。为了将程序的state传送给刚加入的集群新节点。
STATE_TRANSFER必须要加载整个节点状态到内存中,然后传输给加入的节点。主要的限制是要传输的State过大,可能会导致内存好进。如果是很大的State 传输用STATE或者STATE_SOCK协议。如果state很小,就可以用STATE_TRANSFER。
2. RSVP(资源预留协议)
不是一个可靠交付的协议。但是在可靠消息交付的协议中(如NAKACK, UNICAST2, UNICAST)中作为参数。
3. FRAG and FRAG2(消息分片协议)
FRAG和FRAG2协议会将大消息分片成小消息,然后发送这些小的消息,在接收端,这些分片的小消息会再重新组装成一个大消息,然后交付给应用程序。FRAG和FRAG2可以同时为单播和多播工作。FRAG和FRAG2的区别是FRAG2比FRAG少了一份复制,因此推荐使用FRAG2作为分片协议。FRAG序列号一个消息需要知道确切的大小(包括消息头),而FRAG2不包含消息头,故更快。
参数:frag_size,消息的最大字节数,如果超过就要分片。
4. Flow Control(流量控制协议)
5. STABLE(消息稳定协议)
这个稳定矢量将会广播给组里的所有节点,然后节点就可以将他的重传表中比稳定矢量小的消息全部删除,这些消息就能够被垃圾回收了。
STABLE 垃圾回收消息是被所有的节点都收到了的消息,每个节点必须存储所有的消息是因为它可能被要求重传。只要当我们确定了某个消息被所有节点收到后才能把该消息从重传Buffer中删除。稳定的周期性告知他收到消息的最大值和最小值,这样就可以通过计算集群中收到消息的最小值来丢弃那些小于最小值消息。
6. UNICAST,UNICAST2,UNICAST3 (点对点的可靠消息交付)
7. NAKACK,NAKACK2(组播的可靠消息交付)
8. GMS(Group Membership:组成员消息协议)
- find initial members (discovery)
- if no responses:
- become singleton group and break out of the loop
- else:
- determine the coordinator (oldest member) from the responses
- send JOIN request to coordinator
- wait for JOIN response
- if JOIN response received:
- install view and break out of the loop
- else
- sleep for 5 seconds and continue the loop
9. BARRIER
10. VERIFY_SUSPECT(检查疑似故障节点协议)
11.FD_ALL(节点故障检查,组播心跳包方式)
12. FD_SOCK(节点故障检查,tcp连接环)
每个节点连接到他的邻近节点,这样如果A检测到B的socket异常关闭,则B可能出现了问题,可组播一个怀疑B的消息。
13.MERGE2,MERGE3(子集群合并协议)
14. PING(初始节点发现协议)
和TCPPING不同,PING能够动态发现,以为着该节点不需要知道其他以前节点的位置(地址),PING用IP多播来发送一个发现请求给其他节点,因为它需要UDP作为传输手段。
15. TCPPING(初始节点发现协议)
16. UDP(数据传输层协议)
17. TCP(数据传输层协议)
- JGroups学习(二)
- JGroups学习(一)
- 学习JGroups总结
- JGroups
- jgroups
- JGroups使用范例(聊天小程序)
- JGroups(1)
- JGroups(2)
- JGroups(3)
- JGroups(4)
- JGroups 体验
- JGroups入门
- JGroups 介绍
- JGroups 手册
- jgroups 例子
- jgroups API
- 组通信之jgroups篇----jgroups综述
- 组通信之jgroups篇----jgroups接口
- 循环-13. 求特殊方程的正整数解(15)
- Linux下的用户及用户组概念
- 《机器学习》学习笔记(一):线性回归、逻辑回归
- leetcode Rotate Array
- 二分查找
- JGroups学习(二)
- php遍历目录的所用文件
- HTTP POST GET详解
- constructor super&this
- UNIX多进程 - 销毁僵尸进程 - wait()和waitpid()函数
- 在windows环境下运行GNUstep
- leetcode Factorial Trailing Zeroes
- import javax.servlet.ServletException出错
- 泛函编程(3)-认识Scala和泛函编程