IPv6大赛获奖项目:IPv6 协议下基于喷泉码的分布式存储系统
发布时间:2023-02-01 14:43:38
组别:
高校创新组-行业应用服务类
奖项:
二等奖
单位:
兰州大学
成员:
付饶、沈钰、罗诺、杨恩鑫
导师:
袁磊
项目背景
随着大数据、人工智能(AI)、5G 移动通信等技术的发展,分布式存储以其低成本、高可靠性和高可扩展性等优势,成为了现代大规模数据存储的主要方式。喷泉码 (Fountain Codes) 作为一种新颖的纠删码,与传统纠删码相比,其编码包具有“无率”+“独立”的优势,将喷泉码应用于分布式存储领域得到了学术界和工业界的广泛关注,如文献[1][2]研究了基于 LT 码的分布式存储系统性能,文献[3]在2019年提出利用喷泉码构造液态云存储(Liquid Cloud Storage)系统的新概念, 美国Quantum公司的 Lattus 对象存储系统也采用喷泉码作为纠删码。
在教育部大力推行“新工科建设[4]”和“IPv6规模部署”的背景下,兰州大学已实现 IPv6 校园网络全覆盖,为助力IPv6前沿技术的创新应用和关键技术的实践教学,本文在IPv6 协议下设计了一种基于喷泉码的分布式存储系统。通过该系统的使用,广大师生不仅可以存储和共享校园内丰富的文件及教学资源,学生在系统学习和搭建的过程中还可以有效锻炼自身编程能力。
项目创新
本系统在 IPv6 协议下,选取喷泉码作为分布式存储系统的纠删码,将喷泉码无码率的优势和UDP协议相结合,实现文件在不同场景下高效可靠的传输。系统创新架构如图1所示,其创新点如下:
(1) 与IPv6协议结合。IPv6海量的地址空间和分布式存储系统的高可扩展性有效结合,可以灵活拓展和提升系统的存储规模。同时系统采用具有跨平台特性的 Qt框架[5]开发,方便跨平台移植,师生在使用时可以灵活自主选择台式机、树莓派、手机等设备作为客户终端。
(2) 将Raptor10码和RaptorQ码作为纠删码引入分布式存储系统。Raptor10码和RaptorQ码是当今性能最好和应用范围最广的两种喷泉码,被多个主流标准所采用,如用于多媒体广播和组播业务的MBMS (Multimedia Broadcast Multicast Service) 标准[6]。
(3) 将喷泉码无码率和动态生成独立编码包的特点与 UDP 协议相结合。在单播及多播场景下,用户可以通过 UDP协议传输文件编码包,从而简化系统调度,用户接收到足够数目的编码包即可译码恢复源文件,实现了分布式存储系统在不同场景下的快速分发、高效存储。
(4) 将GPU并行计算引入系统。Raptor10码和RaptorQ码优秀的译码性能是以增加编译码过程中的时间开销为代价。为进一步提高系统的效率,使用CUDA并行计算框架将文件编译码过程中计算量较大的部分放到GPU上实现加速,从而降低系统编译码的时间开销。
图 1 创新架构
技术路线
IPv6实现
系统的客户端、服务器和存储节点之间控制信息的传输采用TCP协议,数据信息的传输采用UDP协议。通过Qt库中QHostAddress类提供的IPv6编程接口,实现系统节点之间的IPv6地址配置,具体配置如表1和表2所示。
系统TCP传输通信 |
QTcpSocket * tcp_client = new QTcpSocket(this); // 客户端建立QTcpSocket类对象 tcp_client -> connectToHost(Server_IPv6, port); // 连接服务器 connect(tcp_client, SIGNAL(connected()), this, SLOT(startTransfer())); //当连接服务器成功时,发出connected()信号,传送文件头信息
QTcpServer * tcp_server = new QTcpServer(this); // 服务器建立 QTcpServer 类的对象 tcp_server -> listen(QHostAddress::AnyIPv6, port) ; // 服务器监听通信请求 connect(tcp_server, SIGNAL(newConnection()), this, SLOT(acceptConnection())); //当发现新连接时发出newConnection()信号,调用接收连接信号的槽函数 |
表 1 TCP通信的IPv6配置
系统UDP传输通信 |
QUdpSocket * udp_sender = new QUdpSocket(this); // 存储节点建立 QUdpSocket 类对象 udp_sender -> writeDatagram(outBlock, outBlock.length(),QHostAddress(Client_IPv6), port); // 调用writeDatagram()函数发送UDP数据报
QUdpSocket * udp_receiver = new QUdpSocket(this); //客户端建立 QUdpSocket 类对象 udp_receiver -> bind(QHostAddress::AnyIPv6, port); //绑定接收端口号 connect(udp_receiver, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams())); // 接收到UDP数据包时,发送readyRead()信号,调用接收编码包的槽函数 |
表 2 UDP通信的IPv6配置
系统实现
本系统依托兰州大学的IPv6网络环境进行设计,系统由多个客户端、一个服务器和多个存储节点构成,系统的整体架构如图2所示。
客户端是用户操作及文件恢复的终端,主要功能包括①用户的注册和登录;②文件的上传和下载;③接收存储节点传输的编码数据包;④译码恢复源文件。
服务器是负责整个系统综合调度的终端,主要功能有①管理记录用户信息和文件元数据信息(包括文件名称、文件大小和文件存储路径等);②文件喷泉编码;③传输控制信息及文件编码包。
存储节点是负责存储和传输喷泉编码包的设备,主要功能有①存储文件喷泉编码数据包;②向客户端传输编码数据包。
图 2 系统整体架构
系统客户端和服务器的工作界面如图3所示,其主要工作过程如下:
文件上传过程中,用户首先需要通过客户端进行注册和登录,随后选择需要存储的文件上传至服务器,服务器对接收到的文件进行喷泉编码,然后将得到的编码数据包分散存储在不同的存储节点上。
文件下载过程中,用户选择需要下载的文件,服务器将下载信息传输至存储节点,由存储节点负责下载服务。针对不同的下载场景,存储节点通过UDP协议向客户端单播或广播编码数据包,客户端接收到足够的编码包即可对文件进行译码恢复。
图 3 系统界面
应用前景及展望
IPv6 协议下基于喷泉码的分布式存储系统,在校园网环境下,可以为广大师生提供便捷、高效的文件上传、下载和存储服务。同时,该系统专业综合程度高、知识覆盖面广,在教学使用过程中,让学生将理论学习与实际应用相结合,激发学生的学习兴趣,具有极大的研究意义与价值。
在未来研究中,计划将边缘存储[7]引入系统,形成“云边”协同下的分布式存储系统,大幅度缩短数据产生、计算、存储之间的物理距离,为用户提供高速低延迟的数据访问。同时,针对 CUDA 并行计算框架只适用于 NVIDA的GPU的问题,可以使用应用范围更广的Open MP、Open CL并行计算框架进行喷泉码的编译码加速,使系统可以应用于不同的计算平台。
参考文献
[1]
Anglano C, Gaeta R, Grangetto M . Exploiting Rateless Codes in Cloud Storage Systems[J]. Parallel and Distributed Systems, IEEE Transactions on, 2015, 26(5):1313-1322.
[2]
Okpotse T, Yousefi S, Systematic Fountain Codes for Massive Storage Using the Truncated Poisson Distribution[J]. IEEE Transactions on Communications, 2018, 67(2):943-954.
[3]
Luby M, Padovani R, Richardson T J, et al. Liquid cloud storage[J]. ACM Transactions on Storage (TOS) 2019, 15(1): 1-49.
[4]
林 健. 面向未来的中国新工科建设[J]. 清华大学教育研究, 2017, 38(2): 26-35.
[5]
霍亚飞. Qt Creator快速入门[M]. 北京:北京航空航天大学出版社. 2012.
[6]
姜博,晏坚,蒋卫东.喷泉码及其在通信网络中的应用[J].数字通信世界,2007(10):64-67.
[7]
刘铎,杨涓,谭玉娟.边缘存储的发展现状与挑战[J].中兴通讯技术,2019,25(03):15-22.