基于RDMA和NVM的大数据系统一致性协议研究
基于RDMA和NVM的大数据系统一致性协议研究
吴昊1,2, 陈康1,2, 武永卫1,2, 郑纬民1,2
1 清华大学计算机科学与技术系,北京 100084
2 北京信息科学与技术国家研究中心,北京 100084
关键词:大数据 ; 分布式系统 ; 一致性协议 ; 远程内存直接访问 ; 非易失存储器
论文引用格式:
吴昊, 陈康, 武永卫, 郑纬民. 基于RDMA和NVM的大数据系统一致性协议研究. 大数据[J], 2019, 5(4):89-99
WU H, CHEN K, WU Y W, ZHENG W M.Research on the consensus of big data systems based on RDMA and NVM. Big Data Research[J], 2019, 5(4):89-99
1 引言
2 概述
2.1 一致性协议概述
2.2 RDMA概述
RDMA网络技术是一种新型网络技术,它可以绕过远端CPU直接读取远端内存,同时还具有高吞吐量和低时延的特性,这些特性使其可以有效地降低集群中网络通信的开销。目前,RDMA 网络在数据中心已经被逐渐普及。
RDMA的通信模式分为可靠连接(reliable connection,RC)、不可靠连接(unreliable connection,UC)和不可靠的数据报(unreliable datagram,UD)3种模式。RDMA支持的通信原语分别是RDMA Write、RDMA Read、Send、Receive以及原子操作(Atomic)。其中,Read和Write是单边的操作。单边的读写操作可以绕过远端的CPU。Send和Receive是双边的操作,双边的操作要求通信双方的CPU必须同时参与才能完成通信。原子操作包括Fetch and Add和Compare and Swap等。不同的连接模式支持不同的RDMA原语操作,因此本文采用RC模式以及单边的读写操作。
2.3 NVM概述
NVM是新型存储设备,它能够在设备断电之后仍然保存其中存储的数据。新型非易失性存储器(如PC M)具有可字节寻址、低时延、高密度等特点,其能耗比磁盘低90%以上,同时读写的时延也和DRAM相近。但是与DRAM不同的是,NVM的读写速度不对称,其读数据的速度快于写数据的速度。而且类似于固态硬盘(solid state drive, SSD),其擦写次数存在上限,因此其寿命有限,也需要考虑磨损均衡的问题。
3 基于RDMA和NVM的一致性协议
3.1 RDMA、NVM与一致性协议的结合
在传统的一致性协议中,协议除了要处理指令的共识问题,还要保证指令的持久化。考虑到集群可能出现全部宕机的问题,因此要保证指令在系统重启时可以从持久化的存储中恢复出来。传统的一致性协议使用磁盘或SSD作为持久化指令的存储介质。随之而来的问题是协议中的领导者在复制日志的时候,不知道日志是否已经被持久化。领导者必须等待其他副本进程回复日志已经被持久化的消息后,协议算法才能继续。由于存储介质的问题,即使在RDMA通信环境下,这个问题也同样存在。如APUS 也只是在系统的网络层设计中用RDMA网络替换了传统的以太网,副本进程通过RDMA网络接收复制的指令消息,将其存入SSD后回复领导者。这种方式并没有完全利用RDMA的特性,尤其是RDMA绕过远端CPU的特性。
将NVM作为一致性系统中的存储介质,可为解决上述问题提供帮助。首先, NVM可以替代内存与RDMA直接进行通信,即服务器可以使用RDMA对远端的NVM直接进行读写;其次,NVM还具有持久性,使得使用RDMA通信后的消息同时也被持久化。这样就使得通信和持久化两个问题都通过RDMA的Write操作解决了。使用NVM后,领导者通过RDMA复制日志时,就不需要等待副本进程的回复,通过检查自身的状态就可以判断日志是否被持久化到副本进程中,进而继续判断日志的共识过程是否成功。当领导者使用RDMA的Write操作成功之后,远端的RDMA网卡会发送一个ACK到本地的网卡中,在本地网卡的完成队列(completion queue,CQ)中生成一个发送消息完成的状态。在RDMA的设计中,本地服务器首先调用RDMA Write操作向远端服务器发送消息,远端的服务器网卡收到该消息后会立即返回给本地服务器网卡一个ACK消息。因此Write操作的ACK消息不能确保数据被写入NVM中,即数据不能确保是否被持久化。为了解决这个问题,笔者设计在每个Write操作之后,立刻发送一个RDMA中的Read操作。该Read操作读取大小为0 byte的数据,读取的远端内存地址即Write操作中写入远端内存的地址,如Hyper Loo p中的设计。这个Read操作会保证对应位置的数据已经被成功写入NVM中。本地程序只需要检测本地网卡的CQ中对应Read操作的状态,就可以判断对应的数据是否被成功写入NVM。
使用RDMA网络和NVM存储为网络中断后的领导者选举引入了新的问题。传统协议的解决方法是每次发送指令时,指令都会附带一个系统版本信息。这是一个整型数值,用来存储系统版本。每次系统重新选举领导者的时候,这个版本号就会增加1。当副本进程收到指令的时候,副本进程判断指令附带的版本信息,如果是旧的版本就忽略掉,从而避免旧的领导者对整个日志的破坏。但是由于笔者提出的方案绕过了副本机器的CPU,副本进程无法对消息进行判断,因此还需要对选举的流程进行修改,以保证协议的正确性。
本文针对RDMA网络和NVM存储介质的特性对Multi-Paxos协议进行了修改,并对修改后的协议进行了实现。本文修改了协议流程中对一致性成功的判定方式以及领导者选举和日志恢复中的部分流程,利用RDMA Write操作的绕过目标服务器CPU的特性、NVM的持久性和可字节寻址的特性,使得修改后的协议具有低时延、高吞吐量和低CPU消耗等特点。下面将介绍修改后的具体流程。
3.2 日志复制
图2为日志复制流程。在协议正常运行的情况下,日志的编号和复制都由领导者负责。客户端通过RDMA的Write操作将指令发送给领导者服务器。领导者服务器会不断轮询每一个客户端对应的在本地注册的内存,检测是否有客户端发送指令过来。当领导者服务器接收到从客户端发送过来的指令后,领导者为该条指令分配一个序列号和这个指令在整个系统日志里的地址。然后,领导者服务器将该指令复制到其他的服务器上,领导者通过RDMA的Write操作直接将这条指令写入对应副本机器中的NVM中,指令的地址即刚才分配的地址。当领导者将指令发送到副本机器后,领导者会继续发送对应位置的一个Read操作,这个Read操作读取的字节为0,用于保证数据被持久化到NVM中。同时这个Read操作可以在Write操作后直接使用,不需要等待Write操作的返回。领导者可以通过从RDMA的完成队列中获取相应Read操作对应的消息,判断指令是否被成功写入。领导者通过计算单个指令发送成功的次数判断指令是否可以提交,当单个指令发送成功的次数为f+1次,即领导者已经成功地将该指令发送到f+1个副本机器中时,即可认为该指令已经完成了共识过程。领导者提交该指令,发送commit消息给所有的副本服务器,同时执行该指令,并将执行的结果返回给相应客户端。如果指令的发送次数没有超过f+1次,领导者将不断发送该指令给未接收到的副本服务器,直到其接收到该指令为止。
3.3 领导者选举与日志恢复
由于协议是强领导者协议,因此当领导者出现故障时,整个系统就要重新选举出一个新的领导者,才能继续对外提供服务。每个领导者都对应着一个任期编号(term)。当副本进程检测到与领导者的连接中断时,该副本进程会进入选举领导者的状态。它会将term值增加1,并向其他的副本服务器发送选举其为领导者的消息,在该消息中附带自己的term值。然后等待其他副本进程为其投票。其他副本进程收到该消息后,根据自身情况回复相应消息:如果副本进程检测到与领导者的连接畅通,那么回复不投票给发送该指令的副本进程,并将领导者的编号信息发送给该副本进程;如果其检测到与领导者也断开了连接,但是已经投票给了其他term值更高的副本进程,那么将回复不投票给发送该指令的副本进程;如果其检测到与领导着也断开了连接,并且没有投票给任何其他的副本进程,那么回复投票给发送该指令的副本进程。当某一个副本进程收到大于f+1个为其投票的信息后,该副本进程的角色变为领导者,并进行日志恢复的过程,同时阻止其他副本进程进行新一轮的选举。
系统在复制指令的时候使用了RDMA的Write操作将指令写入副本进程的NVM中,领导者直接绕过了副本进程的CPU和操作系统。这样的好处是减少了副本进程的CPU消耗,同时降低了时延;坏处是副本进程不会判断写入的指令是否是由新的领导者写入的。为了解决这个问题,系统在选举领导者的时候,当副本进程收到某个副本进程选举领导者成功消息的时候,该副本进程就会断开与旧的领导者的RDMA连接。这样使得旧的领导者无法写入任何新系统中存活的副本进程的NVM中,就不会破坏整个日志。图3为领导者选举流程。
进入选举过程后,收到选举消息的副本机器会把与之前的领导者之间的连接切断,销毁相应的资源。断开连接的副本服务器若想重新加入系统集群中,要向领导者发送join指令,该指令表明有新的副本服务器要加入系统。领导者收到该指令后,同样为该指令分配其在日志中的位置,并将其复制到其他副本服务器中。当领导者成功将其发送到了f+1个副本服务器上时,表明该指令已经成功提交到日志中,该副本服务器可以加入系统中。同时,系统中副本机器的多数派的数量也要发生相应的改变,领导者在复制日志的时候也要将日志复制到该副本机器中。
4 相关工作
近年来,使用硬件和一致性协议结合的方法对一致性协议进行优化的工作也有很多。NetPa xos利用网络交换机中消息的顺序实现Paxos算法,同时该工作还能够兼容Open Flow的应用程序编程接口(application programming interface, API),具有很高的应用价值。NO Paxos则首先设计了一个特殊的网络,以支持有序不可靠广播(ordered unreliable multicast, OUM),并在该网络下实现一致性协议。由于该网络是有序的网络,因此要比Paxos等简单很多。同样还有将Paxos协议实现在可编程路由器中,如使用P4语言实现Paxos协议的Switchc y-Paxos。也有学者使用现场可编程门阵列(field programmable gate arr ay,FPGA)在网络层实现ZAB协议,性能也非常优秀。
目前使用RDMA网络实现一致性 协议的工作有DARE系统和APUS。其中, DARE可以看作将Raft协议在RDMA环境下的实现,其利用RDMA的原语对Raft进行了修改。APUS则是Multi-Paxos算法在RDMA中的实现,同时使用SSD存储日志。与本文的实现比较,二者各有不同的缺陷。DARE由于协议的设计,需要两轮通信才可以提交指令,时延比本文的工作要高很多,同时DARE只能运行在内存中,并没有做日志的持久化工作。APUS则存在之前提到的问题,虽然它是一轮通信的协议,但是其领导者必须等待副本的回复才可以判断日志是否可以提交,时延也比本文的工作高。在吞吐量方面,三者相差不大。由于APUS没有提供直接测试的客户端程序,因此第5节中将本文工作和DARE进行了对比。
除了一致性协议的工作,使用RDMA进行数据复制的 工作还有Tailwind。Tailwind的复制过程中使用RDMA的Write操作进行数据复制,与本文的工作有一定程度的重叠。不过Tailwind和本文的工作也有3点区别。一是Tailwind使用的是Primary-Backup的模式,使用f+1个副本容忍f个副本发生错误,而本文使用的是传统的一致性协议设计,使用2f+1个副本容忍f个副本发生错误,提供了更高的可用性。在f个副本发生错误后,仍然能够继续对外提供服务。二是Tailwind的工作中提供了关于数据恢复的方法,但是没有关于选举领导者的工作。三是在数据持久化的工作中,本文使用NVM硬件和RDMA中的Read操作确保数据的持久性。但是Tailwind在保证数据持久性方面没有任何的工作,只是假设服务器存在备用的电源设备,并且服务器能够在断电后利用备用的电源设备将PCIe控制器和RDMA网卡缓存中的数据写入SSD中。因此Tailwind并不具有任何应用价值。同时Tailwind没有提供其实现的代码,因此本文工作也无法和其进行测试对比。
5 系统性能测试
5.1 测试环境
本文使用C++语言对修改后的MultiPaxos协议进行了实现,同时使用 基于InfiniBand网络设施的服务器集群对实现的一致性系统进行测试。集群由10台服务器构成,每台服务器的配置见表3。其中,笔者使用5台服务器作为一致性系统的服务端,另外5台服务器作为客户端,负责和服务端进行通信并发送请求。由于目前市面上没有可用的NVM硬件,因此使用内存模拟测试,同时由于NVM的写时延比内存高,因此在测试时,笔者修改了CentOS内核,使得系统内存的写时延增加150 ns,从而匹配NVM性能。
5.2 性能测试
在性能测试中,本文主要从时延和吞吐量两个方面对一致性系统进行测试。在测试系统时延的过程中,笔者分别对数据大小为8 byte、32 byte、128 byte、512 byte和2 048 byte的指令提交时延进行了测试。每次测试都将指令分别提交,即当客户端收到一个指令提交成功的回复后,再提交下一个指令。每次测试提交10 000条指令,然后对所得的结果取平均值。在测试吞吐量时,笔者随机生成测试数据,数据量大小为32 byte,通过不同数量的客户端同时进行提交,并测试性能。
测试结果如图4所示。由于本文工作是单轮通信协议,而DARE是两轮通信协议,因此本文工作的时延比DARE低。在时延测试中,当数据大小为8 byte时,单次提交指令的时延最低可达到6 μs,相比DARE的9 μs时延来说约减少了33%。由于RDMA操作的时延随着数据大小的增加而增加,因此二者的时延也随着数据大小的增加而增加。
在吞吐量测试中,二者的吞吐量都随着客户端连接数量的增加而增大。DARE协议在第二轮通信中要比本文工作多发送一轮日志的尾指针,发送数据量比本文多一些,因此本文工作的吞吐量要大一些。本文的协议中请求可以并行处理,而DARE只可以等待前面的请求处理结束后才开始处理之后的请求。为了提高性能,DARE在设计中使用了批量处理操作,将相同操作类型的请求打包到一起。随着连接的客户端数量增加,领导者服务器接收到的请求也随之增多,DARE每一次批量处理后的数据大小也随着增大。RDMA的带宽利用率是随着传输数据大小增加而增加的,因此本文工作和DARE的吞吐量差距也随着客户端连接数的增加而减小。
6 结束语
作者简介
吴昊(1992- ),男,清华大学计算机科学与技术系硕士生,主要研究方向为分布式系统。
陈康(1976- ),男,清华大学计算机科学与技术系副教授,中国计算机学会(CCF)会员,主要研究方向为分布式系统、存储系统等。
武永卫(1974- ),男,清华大学计算机科学与技术系教授,CCF高级会员,主要研究方向为并行和分布 式处理、云计算和存储等。
郑纬民(1946- ),男,清华大学计算机科学与技术系教授、博士生导师,CCF会士,主要研究方向为计 算机架构、操作系统、存储和分布式计算等。
《大数据(Big Data Research,BDR)》双月刊是由中华人民共和国工业和信息化部主管,人民邮电出版社主办,中国计算机学会大数据专家委员会学术指导,北京信通传媒有限责任公司出版的中文科技核心期刊。
关注《大数据》期刊微信公众号,获取更多内容
往期文章回顾
基于图查询系统的图计算引擎
大数据环境下的存储系统构建:挑战、方法和趋势
一种软硬件结合的大数据访存踪迹收集分析工具集
开源芯片、RISC-V与敏捷开发
基因大数据的集成分析
基于RDMA和NVM的大数据系统一致性协议研究相关推荐
- 基于智慧防雷系统的大数据应用技术研究
基于智慧防雷系统的大数据应用技术研究 一. 引言 最近几年随着大数据技术的快速发展和应用,智慧城市随即也被正式提出,而且我们也可以深刻感受到"智慧"正在慢慢改变我们的生活方式和城 ...
- 【大数据云原生系列】大数据系统云原生渐进式演进最佳实践
1.引言 随着云原生概念的兴起,越来越多的企业投身于云原生转型的浪潮,以解决传统应用面临的弹性能力不足.资源利用率较低.迭代周期较长等问题.通过云原生技术(如容器,不可变基础设施和声明式API等),使 ...
- 大数据系统发展的技术路线
自从大数据出来后,数据管理界发生了巨大的变化,技术驱动成为大数据管理系统的一个主要变革力量. 传统的数据库管理系统以结构化数据为主,因此关系数据库系统(RDBMS)可以一统天下满足各类应用需求.然而, ...
- 关于缓存一致性协议、MESI、StoreBuffer、InvalidateQueue、内存屏障、Lock指令和JMM的那点事
前言 事情是这样的,一位读者看了我的一篇文章,不认同我文章里面的观点,于是有了下面的交流. 可能是我发的那个狗头的表情,让这位读者认为我不尊重他.于是,这位读者一气之下把我删掉了,在删好友之前,还叫我 ...
- 图解 Paxos 一致性协议
http://blog.jobbole.com/106327/ 前言 Paxos 一致性协议可以说是一致性协议研究的起点,也以难以理解闻名.其实协议本身并没有多难理解,它的难理解性主要体现在:为何如此 ...
- Zookeeper Paxos算法 一致性协议
前言 Paxos 一致性协议可以说是一致性协议研究的起点,也以难以理解闻名.其实协议本身并没有多难理解,它的难理解性主要体现在:为何如此设计协议以及如何证明其正确性.本文尝试通过流程图来说明协议的内容 ...
- 协作的力量——2021-2022年度《大数据系统基础》成果展示
实践单位:清华大学核能与新能源技术研究院 项目名称:核电厂关键敏感设备健康评估与寿命预测建模分析研究 小组成员: 张文济(组长) 核研院 李京人 土木系 刘书呈 机械系 罗儒维 工物系 项拓宇 工物 ...
- 《大数据系统基础》实践项目期末答辩顺利举行 校企联手打造精品实践项目见真章
近期,由清华大学研究生院和数据科学研究院(以下简称:数据院)共同开设的清华大学大数据能力提升项目<大数据系统基础>实践项目期末答辩在清华大学六号教学楼顺利举行.20位企业导师作为评审参与答 ...
- 《大数据系统基础》课程实践项目中期答辩顺利举行,清华持续探索大数据人才教育创新之路
2017年11月15日,清华大学大数据能力提升项目之<大数据系统基础>课程实践项目中期答辩在清华大学六号教学楼顺利举行.160余名同学分为21组,向任课老师和企业导师汇报了各组实践项目的进 ...
最新文章
- asp.net三种重定向方法的总结
- CMake编译工具与项目构建
- 计算机林中鸟歌曲,励志歌曲曲-林中鸟
- vue-cli-service 不是内部或者外部命令的解决办法(用了你就知道了)
- c++ 获取线程id_高效获取当前线程的 id
- mysql使用占位费付_美国大学硕士占位费怎么支付?三种支付方式任选!
- Maven入门指南:仓库
- URAL1815 Farm in San Andreas(费马点,圆圆相交)
- 装扮圣诞海报气氛,你需要这些小元素!
- 工欲善其事,必先利其器——持续更新中……
- 停用zabbix 自动发现的一些规则
- Linux网络协议栈(一)——Socket入门(2)
- 如何快速构建社交APP中的语音房
- word页眉页脚页码设置详解
- phpstudy 报错Error while setting value ‘NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO‘ to ‘sql_mode‘
- 「HTML+CSS」--自定义按钮样式【004】
- 计算机模拟光学图像加密,光学图像加密中级联相位恢复算法的应用
- 如何制作企业在线产品手册?这里有一些简单的方法!
- 【java】-XX:-OmitStackTraceInFastThrow只有空指针,没有堆栈信息
- CleanMyMac X mac2021系统优化清理软件激活云盘分享推荐
热门文章
- 【技巧】搜狗输入法特殊技巧
- 爆破linux密码 $6$3uwqC9JI$d9iPRmTDAoXs/IbsplxS3iyeErHqw7fUycacXNHyZk1UCSwFEydl515/zXN7OEwHnyUaqYcNG...
- spring事务的传播机制新解
- mysql: you can't specify target table 问题解决
- HTTP - PUT 上传文件/Shell
- [收藏]孔庆东-为何要唱样板戏
- 解决MySQL数据库中文模糊检索问题
- www.beihua.edu.cn计划摘录
- 机器学习基石-作业四-代码部分
- Kylin报错classnotfound:org.apache.hadoop.hive.serde2.typeinfo.typeInfo