本发明涉及的分布式存储技术领域,特别是涉及一种分布式存储协议中请求处理保序的方法及装置。
背景技术:
目前,在分布式nas存储中,一般分为两大部分,nas协议服务端与存储系统;nas协议服务端最常用的是nfs协议,nfs服务端负责与nfs客户端交互,提供文件服务给客户。当nfs客户端写数据时,基于缓存机制,会按照顺序连续发送缓存后的脏数据到nfs服务端处理;nfs服务端是多线程机制,多个线程同时处理请求,把不同的写请求交给下层存储系统处理;这样机制下,客户端写单个文件时,按照顺序连续发送写请求到服务端,但服务端会多线程并发处理这些请求,一,会导致不保序,文件存在出现空洞的风险,安全性较低;二,由于同一文件并发处理,会有资源互斥访问,性能抖动大,在媒资场景恒定码流情况下,会有丢帧风险。
技术实现要素:
本发明的目的是提供一种分布式存储协议中请求处理保序的方法及装置,以实现避免文件空洞风险,提高安全性。
为解决上述技术问题,本发明提供一种分布式存储协议中请求处理保序的方法,该方法包括:
在nfs协议的线程组模块中,给每个线程对应配置一个请求队列,在请求队列中存放单个的inode节点;
采用远程调用协议rpc接收写请求,解析出写请求中的inode信息;
按照预设算法将写请求添加到对应的请求队列的inode节点中;
唤醒写请求对应的线程,使线程按照均衡轮询机制,循环处理请求队列中的每个inode节点中的写请求。
优选的,所述预设算法包括哈希算法或者轮询算法。
优选的,所述解析出写请求中的inode信息之后,还包括:
解析写请求获取写偏移信息。
优选的,所述按照预设算法将写请求添加到对应的请求队列的inode节点中,包括:
若请求队列中已存在相同的写请求,根据写偏移信息将接收到的写请求放入同一个inode节点的请求链表对应位置中;
若请求队列中没有相同的写请求,将写请求直接放入请求队列尾端。
本发明还提供一种分布式存储协议中请求处理保序的装置,用于实现上述方法,包括:
配置模块,用于在nfs协议的线程组模块中,给每个线程对应配置一个请求队列,在请求队列中存放单个的inode节点;
解析模块,用于采用远程调用协议rpc接收写请求,解析出写请求中的inode信息;
添加模块,用于按照预设算法将写请求添加到对应的请求队列的inode节点中;
循环模块,用于唤醒写请求对应的线程,使线程按照均衡轮询机制,循环处理请求队列中的每个inode节点中的写请求。
优选的,所述预设算法包括哈希算法或者轮询算法。
优选的,所述解析模块还用于解析写请求获取写偏移信息。
优选的,所述若添加模块具体用于若请求队列中已存在相同的写请求,根据写偏移信息将接收到的写请求放入同一个inode节点的请求链表对应位置中;若请求队列中没有相同的写请求,将写请求直接放入请求队列尾端。
本发明所提供的一种分布式存储协议中请求处理保序的方法及装置,在nfs协议的线程组模块中,给每个线程对应配置一个请求队列,在请求队列中存放单个的inode节点;采用远程调用协议rpc接收写请求,解析出写请求中的inode信息;按照预设算法将写请求添加到对应的请求队列的inode节点中;唤醒写请求对应的线程,使线程按照均衡轮询机制,循环处理请求队列中的每个inode节点中的写请求。可见,采用文件与线程绑定机制,把同一文件的写请求对应到同一个线程的写请求队列上,线程处理请求队列时,采用轮询方式均衡处理请求队列上的不同文件,如此解决了单文件内写请求保序问题,防止文件顺序写时出现空洞,提高安全性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明所提供的一种分布式存储协议中请求处理保序的方法的流程图;
图2为nfs协议中写请求保护处理示意图;
图3为本发明所提供的一种分布式存储协议中请求处理保序的装置的结构示意图。
具体实施方式
本发明的核心是提供一种分布式存储协议中请求处理保序的方法及装置,以实现避免文件空洞风险,提高安全性。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
术语解释如下:
nfsnetworkfilesystem为网络文件系统;
nasnetworkattachstorage为网络附加存储,是以太网的存储服务类型。
请参考图1,图1为本发明所提供的一种分布式存储协议中请求处理保序的方法的流程图,该方法包括:
s11:在nfs协议的线程组模块中,给每个线程对应配置一个请求队列,在请求队列中存放单个的inode节点;
s12:采用远程调用协议rpc接收写请求,解析出写请求中的inode信息;
s13:按照预设算法将写请求添加到对应的请求队列的inode节点中;
s14:唤醒写请求对应的线程,使线程按照均衡轮询机制,循环处理请求队列中的每个inode节点中的写请求。
可见,采用文件与线程绑定机制,把同一文件的写请求对应到同一个线程的写请求队列上,线程处理请求队列时,采用轮询方式均衡处理请求队列上的不同文件,如此解决了单文件内写请求保序问题,防止文件顺序写时出现空洞,提高安全性。
其中,inode节点就是一个inode号,是全局唯一的,一个inode号唯一对应一个文件。将属于同一个文件的写请求挂在这个inode号下,采用单线程处理,就保证了请求的处理顺序。
基于上述方法,具体的,所述预设算法包括哈希算法或者轮询算法。
进一步的,步骤s12中,所述解析出写请求中的inode信息之后,还包括:解析写请求获取写偏移信息。
进一步的,步骤s13的过程具体为:若请求队列中已存在相同的写请求,根据写偏移信息将接收到的写请求放入同一个inode节点的请求链表对应位置中;若请求队列中没有相同的写请求,将写请求直接放入请求队列尾端。
本方法把同一文件的写请求对应到单个线程的队列中,并按照偏移顺序排列,线程处理请求队列时,采用轮询方式均衡处理请求队列上的不同文件,如此解决了单文件内保序问题,防止文件顺序写时出现空洞,并避免了多线程处理同一文件出现的资源竞争,减少了性能抖动的因素。并且,不同文件的写请求在同一个线程内的均衡处理机制,有效改善了整体业务的写入速度,使性能更稳定,保证了在低时延要求的恒定码流场景下业务的高性能。
基于本方法,具体实施过程如下:
首先,nfs协议的线程组模块中,给每个线程对应一个请求队列,队列存放单个的inode节点,同一个inode的多个请求内部关联组成队列;
然后,rpc接收到写请求后,解析请求中的inode信息,按照规定算法对应到一个请求队列中,如果请求队列中已经有此inode的请求,按照请求中偏移进行排序插入到inode请求组的对应位置;
最后,唤醒对应线程进行处理,线程按照均衡轮询机制,循环处理队列中的每个inode中的写请求,调用下层存储系统接口,把数据写到存储中,完成后记录结果把请求回应放入异步发送响应队列,如果队列中每个inode的请求都处理完成,则进入休眠,等待唤醒。
详细的,本方法采用文件与线程绑定的处理机制,主要包括如下几个步骤:
(1)创建全局的二维队列,队列个数与业务处理线程数一一对应;
(2)实现写请求与队列对应算法;
其中,采用hash或者轮询两种算法,针对业务压力不同的场景;
(3)rpc接收请求处理,解析请求关键信息,获取inode和写偏移信息;
(4)调用算法,计算出对应的队列索引;
(5)检查本队列中是否已经有此inode的写请求了,如果没有,直接放入队列尾;
(6)如果队列中有inode写请求,则根据偏移排序,放入同一inode的请求链表对应位置中,使得同一个文件的写请求按偏移顺序排列;
(7)唤醒线程处理;
(8)线程循环队列获取请求,按照轮询机制,处理队列中每个inode上的请求链表,具体是按照偏移顺序获取;
其中,每个inode处理一个写请求,然后轮询下一个inode处理;
(9)获取请求后开始处理,调用存储系统接口进行数据写入,完成后记录结果把请求回应放入异步发送响应队列;
(10)重复第8、9步骤,直到本队列请求处理完成,线程进入休眠,等待唤醒。参考图2,图2为nfs协议中写请求保护处理示意图。
本方法采用同一文件绑定线程处理的机制,使请求能够无互斥的高速串行处理;从而改善单文件的性能稳定性,满足恒定码流场景低时延的高要求;同时由于按照偏移串行执行请处理,避免了顺序写入文件而并发处理时异常造成的文件空洞风险,提升了可靠性、一致性;而且每个文件在同一个线程内的请求均衡处理,有效改善了文件的写入速度,使性能更稳定。
本方法设计请求队列映射机制以及获取请求处理的均衡机制,使得单个文件内的写请求可以无互斥的高速串行处理,并且不同文件之间均衡处理;达到保序执行的目标以及提升性能稳定性的效果。同时本发明可以应用到其他业务流程中,比如读请求的处理,一样能达成改善性能稳定的效果。
请参考图3,图3为本发明所提供的一种分布式存储协议中请求处理保序的装置的结构示意图,该装置用于实现上述方法,该装置包括:
配置模块101,用于在nfs协议的线程组模块中,给每个线程对应配置一个请求队列,在请求队列中存放单个的inode节点;
解析模块102,用于采用远程调用协议rpc接收写请求,解析出写请求中的inode信息;
添加模块103,用于按照预设算法将写请求添加到对应的请求队列的inode节点中;
循环模块104,用于唤醒写请求对应的线程,使线程按照均衡轮询机制,循环处理请求队列中的每个inode节点中的写请求。
可见,采用文件与线程绑定机制,把同一文件的写请求对应到同一个线程的写请求队列上,线程处理请求队列时,采用轮询方式均衡处理请求队列上的不同文件,如此解决了单文件内写请求保序问题,防止文件顺序写时出现空洞,提高安全性。
基于上述装置,具体的,预设算法包括哈希算法或者轮询算法。
进一步的,解析模块还用于解析写请求获取写偏移信息。
进一步的,若添加模块具体用于若请求队列中已存在相同的写请求,根据写偏移信息将接收到的写请求放入同一个inode节点的请求链表对应位置中;若请求队列中没有相同的写请求,将写请求直接放入请求队列尾端。
本发明采用文件与线程绑定处理机制,均衡顺序处理请求,可以降低文件性能抖动,改善恒定码流场景的性能。本发明通过采用文件与线程绑定机制,来解决保序问题,防止文件顺序写时出现空洞;而且单线程处理同一文件,减少了性能抖动的因素,保证了在低时延要求的恒定码流场景下,业务的高性能体现。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
以上对本发明所提供的一种分布式存储协议中请求处理保序的方法及装置进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。