立即报名

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.png

图 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.jpg

图 2 系统整体架构

 

系统客户端和服务器的工作界面如图3所示,其主要工作过程如下:

 

文件上传过程中,用户首先需要通过客户端进行注册和登录,随后选择需要存储的文件上传至服务器,服务器对接收到的文件进行喷泉编码,然后将得到的编码数据包分散存储在不同的存储节点上。

 

文件下载过程中,用户选择需要下载的文件,服务器将下载信息传输至存储节点,由存储节点负责下载服务。针对不同的下载场景,存储节点通过UDP协议向客户端单播或广播编码数据包,客户端接收到足够的编码包即可对文件进行译码恢复。

 

喷泉码-3.png

图 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.