说MGR - 成员间的通信模块Part2

通信模块分为3部分。

1.本地数据包接收部分负责接收本地成员向其它模块的数据发送请求,接收到的数据包被放入本地数据队列等待处理。

2.成员间的通信部分负责和其它成员通信。通信工作包括:从本地数据队列读取数据包发送给其它成员,以及接收其它成员发送过来的数据包。各个成员之间通信使用了Paxos协议。

3.全局数据包发送部分将所有的数据包按顺序返回给本地成员上的全局事务认证模块。

当各个成员的通信模块接收到上层模块的数据发送请求时,这些并发的数据请求是无序的,如3个成员分别有1个数据包,分别是T1、T2和T3产生的数据包。这些并发、无序的数据包会通过Paxos协议汇聚到每个成员上,并且排序。最终每个成员的通信模块都会拥有同样的数据包,这些数据包会按照同样的顺序发送到各自成员上的全局事务认证模块。

Paxos协议的核心工作就是对所有的数据包进行汇聚和排序,为了完成这些功能,Paxos协议本身会进行3次TCP通信。

·发送数据包给其它成员的通信模块。

·其它成员的通信模块回应收到的数据包。

·当超过半数的通信模块(包括它自己)回应后,发送消息告诉所有成员,这个数据包同步成功。只有当Paxos协议的三个步骤成功完成后,通信模块才会把这个数据包发送给全局认证模块。

Paxos在通信上有如下特点。

·数据包同步成功需要三次TCP传输。

·每个数据包都要发送到所有的成员上,因此需要传输多份,传输的数据量会被放大。

·假设数据包发送到所有成员的过程是并发进行的,那么数据包同步成功需要的时间是成员间最慢的那条链路上完成三次TCP通信的时间。

这些特点决定了MGR在延时大、带宽小的网络中的效率会比较低。MGR为了提高Paxos对网络的适应性,做了以下优化。

·使用LZ4压缩算法对事物信息进行压缩,当数据包的大小超过一个阈值时会自动压缩,具体信息查看变量group_replication_compression_threshold的含义。

·Paxos会将多个本地事务信息封装到一个数据包内进行通信,大大减少了Paxos通信的次数。

    原文作者:coveringindex
    原文地址: https://blog.51cto.com/coveringindex/2438082
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞