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

发布时间:2020-02-28 09:06:10 作者:coveringindex
来源:网络 阅读:295

通信模块分为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通信的次数。

推荐阅读:
  1. 使用Azure Monitor从Azure VM收集数据
  2. kubectl && YAML,深入理解pod对象(下)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

超过半数 lz4 art

上一篇:怎么解决app下载链接被微信屏蔽拦截导致打开显示已停止访问该

下一篇:从心开始的CentOS学习笔记之六:目录操作命令cd、pwd

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》