发明内容
本发明的目的在于克服现有技术之不足,提供一种基于UDP分布式小文件存储系统及其数据处理方法,利用对外服务器来接收用户的读写要求,封装对内部存储操作,利用全局命名服务器来对新增文件进行内部唯一命名,利用信息索引库服务器来登记每个内部文件名所对应的存储器,利用任务管理服务器来执行对存储器的读写管理操作,利用存储服务器来存放文件内容,利用UDP改装协议,来做为内部服务器的通信协议,以提高整个平台的并发能力与高速I/O能力,解决了大容量存储和负载均衡的问题,特别适合以文件为载体的在线服务。
本发明解决其技术问题所采用的技术方案是:一种基于UDP分布式小文件存储系统,包括:
一个或多个第一服务器,该第一服务器内包含有一个对外服务器和一个用来管理对外服务器的运行与停止、以及定时对对外服务器进行检查的服务监控服务器;该对外服务器,对外负责向其它系统及用户提供管理控制其文件和目录的接口,对内负责向其它服务器传送用户的命令,并检查命令执行状态,最后将命令执行结果反馈给用户;
一个第二服务器,该第二服务器内包含有一个全局命名服务器和一个用来管理全局命名服务器的运行与停止、以及定时对全局命名服务器进行检查的服务监控服务器;该全局命名服务器设在客户应用和文件系统之间的一个逻辑层中,该全局命名服务器为每个新添加的文件分配一个唯一的内部名称;
一个第三服务器,该第三服务器内包含有一个信息索引库服务器和一个用来管理信息索引库服务器的运行与停止、以及定时对信息索引库服务器进行检查的服务监控服务器;该信息索引库服务器与全局命名服务器一起组成位于客户应用和文件系统之间一个逻辑层,该信息索引库服务器采用NoSQL数据库,用来保存全局名称与文件存储的对应Kye-Value数据、全局名称与用户路径的对应数据;
一个第四服务器,该第四服务器内包含有一个任务管理服务器和一个用来管理任务管理服务器的运行与停止、以及定时对任务管理服务器进行检查的服务监控服务器;该任务管理服务器设为系统的控制中心,负责识别并解决任何容量问题,运行存储服务器负载平衡,优化存储服务器的使用,负责与对外服务器合作进行增加/删除文件;
一个或多个第五服务器,该第五服务器内包含有一个存储服务器和一个用来管理存储服务器的运行与停止、以及定时对存储服务器进行检查的服务监控服务器;该存储服务器按照对外服务器与任务管理服务器的指令进行文件写入与读出;
该第一服务器、第二服务器、第三服务器、第四服务器和第五服务器的相互之间是通过用户数据包协议来实现数据的相互传递和处理。
所述的用户数据包协议为UDP改装协议,该UDP改装协议具有如下协议格式:
2位head:表示消息开始;
6位版本号:表示该UDP改装协议的版本;
8位命令号:表示此消息包含的命令;
16位生存时间:表示此消息所保留的时间,如果超时,此消息会被丢弃,会由发送端重发一次此消息;
32位序列号:表示此消息的编号,由系统随机生成,用来确认消息的成功发送与接收对应;
16位子命令与16位序列号:由应用程序自己指定,用来进一步明确消息包含内容;
数据:表示消息内容;
16位数据大小:发送数据的大小为子命令、子序列号与数据的总和,用来检查数据传送过程的完整;
5位key:表示所使用的加密类型;
1位ack:代表是否需要接收方进行返回确认包;
2位tail:表示消息到此结束。
所述的UDP改装协议,包括如下处理流程:
由发送消息模块负责将m_SendPacket_List需要发送包队列缓存中的消息包发送出去,并判断是否超时,一旦超时,会将数据进行重发;
由接收消息模块负责接收消息包,并进行判断包的首尾标志与数据长度是否一致,并把符合条件的消息包放入到m_RecvPacket_List需要接收包队列缓存中,提供给消息处理模块处理;
由消息处理模块对消息包进行处理,并将需要发送的消息包放入m_SendPacket_List需要发送包队列缓存中。
所述的发送消息模块的发送数据包过程,包括如下步骤:
a1.从m_SendPacket_List需要发送包队列缓存中按顺序取出消息包;
a2.查询该消息包的属性,判断该消息包是否已发送过;判断为是时,继续下一步骤,判断为否时转步骤a5;
a3.判断该消息包是否超时重发;判断为是时,继续下一步骤,判断为否时则返回步骤a1;
a4.判断该消息包是否重发超过3次;判断为是时,返回步骤a1,判断为否时继续下一步骤;
a5.调用标准UDP SocketAPI发送出该消息包;
a6.查询该消息包的消息属性,判断是否需要对方进行确认包,判断为是时,返回步骤a1,判断为否时,将该消息包从m_SendPacket_List需要发送包队列缓存中删除。
所述的接收消息模块的接收数据包过程,包括如下步骤:
b1.调用标准UDP SocketAPI从网卡上接收新的消息数据;
b2.对消息数据包进行验证,判断是否有新消息;判断为是时,继续下一步骤,判断为否时返回步骤b1;
b3.对该消息数据包的首尾标志进行判断,判断首尾标志与数据长度是否一致;判断为是时,继续下一步骤,判断为否时则返回步骤b1;
b4.将该消息数据包放入m_RecvPacket_List需要接收包队列缓存中,交给消息处理模块处理。
所述的消息处理模块的处理数据包过程,包括如下步骤:
c1.从m_RecvPacket_List需要接收包队列缓存中按顺序取出消息包,并将m_RecvPacket_List需要接收包队列缓存中删除该消息包;
c2.判断该消息包否已加密;判断为是时,继续下一步骤,判断为否时转步骤c4;
c3.对该消息包进行解密处理;
c4.判断该消息包是否为确认包;判断为是时,继续下一步骤,判断为否时转步骤c1;
c5.从m_SendPacket_List需要发送包队列缓存中将确认包所对应发送包删除,而后返回步骤c1;
c6.按系统命令执行,而后返回步骤c1。
一种基于UDP分布式小文件存储系统的数据处理方法,包括:
接受系统外部的用户的访问请求,将用户的指定数据文件从系统中读取出来的处理步骤;
接受系统外部的用户的写入请求,将用户的指定数据文件写入系统中的处理步骤;
系统在读取指定数据文件错误时,系统进行自动恢复的处理步骤;
系统在扩充存储空间时,系统主动进行负载均衡的处理步骤;
系统对数据文件进行定期自检的处理步骤。
所述的接受系统外部的用户的访问请求,将用户的指定数据文件从系统中读取出来的处理步骤,包括:
d1.系统的对外服务器得到来自其它系统或用户的访问请求后,获取请求中的其它系统或用户的唯一标志字串与所需要访问的文件路径,并将该标志字串与文件路径发送到系统的信息索引库服务器中;
d2.系统的信息索引库服务器根据内部唯一名称查询得到所述访问请求对应文件所存储的存储服务器的地址,并将此消息返回给对外服务器;
d3.对外服务器得到文件对应的存储服务器的地址编号与内部名称、MD5,向系统的存储服务器发出请求,发送内部名称与MD5;
d4.存储服务器接收到对外服务器的请求后,进行读取相应的文件内容,并计算出MD5进行校验,如果校验通过,存储服务器向对外服务器返回文件内容,否则返回出错信息。
所述的接受系统外部的用户的写入请求,将用户的指定数据文件写入系统中的处理步骤,包括:
e1.系统的对外服务器得到来自其它系统或用户的访问请求后,取得其它系统与用户的唯一标志字串、所需要写入的文件路径与文件内容,该对外服务器将标志字串与文件路径发送到系统的全局命名服务器中;
e2.全局命名服务器收到对外服务器的请求之后,根据标志字串与文件路径等参数,生成一个唯一的内部名称,发回给对外服务器;
e3.对外服务器将取到的内部名称、标志字串、文件路径与文件内容,发送到系统的任务管理服务器,由任务管理服务器执行写入文件操作;
e4.任务管理服务器收到写入文件请求之后,确定要存储数据文件的存储服务器;
e5.存储服务器收到任务管理服务器的写入命令后,将文件内容写入存储服务器中,写入完成后,进行MD5检验,若检验正确,存储服务器向任务管理服务器返回成功消息,若检验不正确,返回步骤e4由任务管理服务器重新确定一个分配存储服务器写入;
e6.任务管理服务器收到存储服务器成功写入的返回消息后,任务管理服务器向信息索引库服务器写入索引信息;
e7.信息索引库服务器向任务管理服务器返回写入成功与否的消息,如果失败,由任务管理服务器向信息索引库服务器重新发送一次写入索引信息的命令;
e8.任务管理服务器向对外服务器返回写入成功与否的消息,对外服务器收到信息后,向外部系统或用户返回状态消息。
所述的系统在读取指定数据文件错误时,系统进行自动恢复的处理步骤,包括:
f1.系统的对外服务器收到从系统的存储服务器读取文件时返回的错误编码时,向系统的任务管理服务器提交文件相应的内部名称与存储服务器地址;
f2.任务管理服务器得到对外服务器的自动恢复消息,向系统的信息索引库服务器发送内部名称,取得要访问的三个存储服务器地址;
f3.信息索引库服务器得到任务管理服务器发来的内部名称,查询到相应的三个存储服务器地址,并将三个存储服务器地址信息发回到任务管理服务器中;
f4.任务管理服务器将三个存储服务器地址、MD5与内部名称发送到报错的存储服务器上,让它自行恢复;
f5.存储服务器收到任务管理服务器的恢复命令后,向其它二个存储服务器读取内部名称的文件内容,并进行MD5检验,检验通过后,删除本地内部名称的文件内容,用新的文件内容替代,完成操作后,存储服务器向任务管理服务器发送操作状态。
所述的系统在扩充存储空间时,系统主动进行负载均衡的处理步骤,包括:
g1.系统的各个存储服务器会定期给任务管理服务器发送自身容量消息,包含剩余空间与剩余空间所占的百分比;
g2.任务管理服务器进行比较,当发现有两个存储服务器的剩余空间所占的百分比相差超过预先确定的阈值时,任务管理服务器向剩余空间所占的百分比较高的一个存储服务器发送负载均衡命令;该负载均衡命令中包含剩余空间所占的百分比较低的另一个存储服务器地址;
g3.剩余空间所占的百分比较高的存储服务器向剩余空间所占的百分比较低的存储服务器发送读取随机文件命令;
g4.剩余空间所占的百分比较低的存储服务器向剩余空间所占的百分比较高的存储服务器发送随机文件内容、内部名称与相应MD5值;
g5.剩余空间所占的百分比较高的存储服务器保存从剩余空间所占的百分比较低的存储服务器得到的文件内容、内部名称与相应MD5值,并将文件写入存储设备中,通过MD5检验之后,向任务管理服务器发送完成命令,包含剩余空间所占的百分比较低的存储服务器地址、内部名称与相应MD5值;
g6.任务管理服务器得到剩余空间所占的百分比较高的存储服务器的反馈消息,向信息索引库服务器提交更改命令,包含剩余空间所占的百分比较高的存储服务器地址、剩余空间所占的百分比较低的存储服务器地址、内部名称与相应MD5值;
g7.信息索引库服务器得到任务管理服务器的更改命令时,将内部名称中关于存储服务器地址中的剩余空间所占的百分比较低的存储服务器改为剩余空间所占的百分比较高的存储服务器,并MD5确认;更新完成后返回状态给任务管理服务器;
g8.任务管理服务器得到信息索引库服务器的确认之后,向剩余空间所占的百分比较低的存储服务器发送删除给定内部名称的文件内容;
g9.剩余空间所占的百分比较低的存储服务器删除完成后,向任务管理服务器返回状态。
所述的系统对数据文件进行定期自检的处理步骤,包括:
h1.系统的存储服务器会定期把存储服务器上的内部名称分批发送到任务管理服务器上;
h2.任务管理服务器收到存储服务器提交上来的内部名称与存储服务器地址后,进行转发到信息索引库服务器上查询;
h3.信息索引库服务器进行查询确认,并把确认的结果返回给任务管理服务器;
h4.任务管理服务器确认该内部名称在信息索引库服务器的查询结果,如果并无此记录,则任务管理服务器向存储服务器下达删除此内部名称及文件内容的指令;如果有此记录,任务管理服务器向存储服务器下达查询成功的指令。
本发明的有益效果是,由于采用了一个或多个第一服务器、一个第二服务器、一个第三服务器、一个第四服务器和一个或多个第五服务器来构成基于UDP分布式小文件存储系统,且第一服务器内包含有一个对外服务器和一个服务监控服务器,第二服务器内包含有一个全局命名服务器和一个服务监控服务器,第三服务器内包含有一个信息索引库服务器和一个服务监控服务器,第四服务器内包含有一个任务管理服务器和一个服务监控服务器,第五服务器内包含有一个存储服务器和一个服务监控服务器;第一服务器、第二服务器、第三服务器、第四服务器和第五服务器的相互之间是通过UDP改装协议来实现数据的相互传递和处理;该系统是通过对外服务器向用户与其它系统提供服务,采用UDP改装协议,做为内部服务器的通信协议,以提高整个平台的并发能力与高速I/O能力;采用对外服务器来接收用户的读写要求,封装对内部存储操作,对用户而言是透明;全局命名服务器对新增文件进行内部唯一命名,信息索引库服务器里登记每个内部文件名所对应的存储器,任务管理服务器执行对存储器的读写管理操作,存储服务器存放文件内容;该系统在对外服务器上提供了API访问方法,能为其它系统及用户提供高效、快速的访问接口,使用户与系统能透明方便的使用与管理此海量、稳定、便捷分布式小文件存储系统;解决了大容量存储和负载均衡的问题,特别适合以文件为载体的在线服务。
以下结合附图及实施例对本发明作进一步详细说明;但本发明的一种基于UDP分布式小文件存储系统及其数据处理方法不局限于实施例。
具体实施方式
实施例,请参见图1所示,本发明的一种基于UDP分布式小文件存储系统,包括:
二个第一服务器,该第一服务器内包含有一个对外服务器和一个用来管理对外服务器的运行与停止、以及定时对对外服务器进行检查的服务监控服务器;该对外服务器,对外负责向其它系统及用户提供管理控制其文件和目录的接口,对内负责向其它服务器传送用户的命令,并检查命令执行状态,最后将命令执行结果反馈给用户;当然,第一服务器也可以选择采用一个或二个以上,根据需要进行设置;
一个第二服务器,该第二服务器内包含有一个全局命名服务器和一个用来管理全局命名服务器的运行与停止、以及定时对全局命名服务器进行检查的服务监控服务器;该全局命名服务器设在客户应用和文件系统之间的一个逻辑层中,该全局命名服务器为每个新添加的文件分配一个唯一的内部名称;
一个第三服务器,该第三服务器内包含有一个信息索引库服务器和一个用来管理信息索引库服务器的运行与停止、以及定时对信息索引库服务器进行检查的服务监控服务器;该信息索引库服务器与全局命名服务器一起组成位于客户应用和文件系统之间一个逻辑层,该信息索引库服务器采用NoSQL数据库,用来保存全局名称与文件存储的对应Kye-Value数据、全局名称与用户路径的对应数据;信息索引库服务器对于文件存储的作用就好像是DNS对于网络的作用一样;
一个第四服务器,该第四服务器内包含有一个任务管理服务器和一个用来管理任务管理服务器的运行与停止、以及定时对任务管理服务器进行检查的服务监控服务器;该任务管理服务器设为系统的控制中心,负责识别并解决任何容量问题,运行存储服务器负载平衡,优化存储服务器的使用,负责与对外服务器合作进行增加/删除文件;
二个第五服务器,该第五服务器内包含有一个存储服务器和一个用来管理存储服务器的运行与停止、以及定时对存储服务器进行检查的服务监控服务器;该存储服务器按照对外服务器与任务管理服务器的指令进行文件写入与读出;当然,第五服务器也可以选择采用一个或二个以上,根据需要进行设置;
第一服务器、第二服务器、第三服务器、第四服务器和第五服务器中均有选用服务监控服务器,该服务监控服务器负责管理其它服务器的运行与停止,并可以定时对所管理的其它服务器进行检查,如果所管理的其它服务器出错时,可由它对所管理的其它服务器进行重启,也可对自身与所管理的其它服务器进行定期重启,及自动更新操作;
该第一服务器、第二服务器、第三服务器、第四服务器和第五服务器的相互之间是通过用户数据包协议来实现数据的相互传递和处理。
本发明的系统提供多个对外服务器的用户访问入口点,以及对内部的文件存储管理,解决了大容量存储和负载均衡的问题,特别适合以文件为载体的在线服务。在对外服务器中提供完整的API操作接口,可以方便与第三方软件相合,以扩展第三方软件的文件存储应用;同时,系统可以在文件数据量的增长时,进行顺滑扩展。
所述的用户数据包协议为UDP改装协议。
本发明为了系统高速通信的需要对UDP协议进行改造,我们将改装后的UDP协议称为QDP(Quick UDP)。UDP是User Datagram Protocol的简称,中文名是用户数据包协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
UDP特性有以下几个方面:
(1)UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段;
(2)由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
(3)UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小;
(4)吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制;
(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数);
(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
由于UDP所具有以上的特性,所以在高速的IO数据通信方面,具有较强的优势。然而UDP也有一些弱点。
与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。
相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突法性的多个数据报。不同于TCP,UDP并不能确保数据的发送和接收顺序。例如,一个位于客户端的应用程序向服务器发出了以下4个数据报。
D1
D22
D333
D4444
但是UDP有可能按照以下顺序将所接收的数据提交到服务端的应用:
D333
D1
D4444
D22
为了避免UDP的弱点,本发明在正常的UDP协议通信中增加一个确认,就可以对消息进行有限的保护以防丢失。在一个正常的对话中,NCPA发送数据消息<data,m>,并等待来自NCP B的确认消息<ack>。当接到这个确认消息时,NCPA关闭对话。NCP B一旦接收到这一消息<data,m>,就把m传送到b,并用<ack>消息进行应答,然后关闭。
NCPA发送<data,m>;
NCP B接收<data,m>,传送m,发送<ack>,关闭;
NCPA接收<ack>,通知关闭。
如果在某段时间后,NCPA没有接到确认应答,数据丢失的可能性迫使NCPA再次发送数据<data,m>。(由于缺乏全局状态知识,在接收<data,m>和发送<ack>之间,NCP A不能观测到是否<data,m>已丢失、<ack>已丢失或NCP B机器已关闭。)因此,NCPA在有限时间内,等侯接收确认消息,如果不能接收到这一消息,则计时器断定时间用完,就会产生超时(timeout)信息。显而易见,这种选择重传消息的机制仍然有丢失的可能性。情形如下:
NCPA发送<data,m1>;
NCPB接收<data,m1>,传送m1,发送<ack>,关闭;
NCPA超时,发送<data,m1>;
NCPB接收<data,m>,传送m1,发送<ack>,关闭;
NCPA接收<ack>,通知关闭;
NCPA发送<data,m2>;
DN<data,m2>丢失;
NCPA接收<ack>(Step 2),通知关闭。
这样会使m2消息没有被成功发送。为了确认消息的成功发送与接收对应。在协议中添加一个序列号,可避免以前对话的信息传送。
NCPA发送<data,m1,x>;
NCPB接收<data,m1,x>,传送m1,发送<ack,x>,关闭;
NCPA接收<ack,x>,通知关闭。
QDP主要的目标就是在UDP层之上实现以上的协议算法,使得应用程序能够在UDP层之上获得通用、可靠、高效的通信能力。QDP提供的用于开发的应用程序接口与Socket API非常相像,姑且称之为QDP Socket API,基本上的函数名与参数等都与Socket API相一致,但是QDP Socket API的API接口都位于命名空间QDP当中。QDP协议栈应用如图2所示。
参见图3所示,所述UDP改装协议即QDP具有如下协议格式:
2位head:表示消息开始;
6位版本号:表示该QDP的版本,为以后可能QDP协议升级留下空间;
8位命令号:表示此消息包含的命令;
16位生存时间:表示此消息所保留的时间,如果超时,此消息会被丢弃,会由发送端重发一次此消息;
32位序列号:表示此消息的编号,由系统随机生成,用来确认消息的成功发送与接收对应;
16位子命令与16位序列号:由应用程序自己指定,用来进一步明确消息包含内容;
数据:表示消息内容;
16位数据大小:发送数据的大小为子命令、子序列号与数据的总和,用来检查数据传送过程的完整;
5位key:表示所使用的加密类型;
1位ack:代表是否需要接收方进行返回确认包;
2位tail:表示消息到此结束。
参见图4所示,所述的UDP改装协议即QDP协议,包括如下处理流程:
由发送消息模块负责将m_SendPacket_List需要发送包队列缓存中的消息包发送出去,并判断是否超时,一旦超时,会将数据进行重发;
由接收消息模块负责接收消息包,并进行判断包的首尾标志与数据长度是否一致,并把符合条件的消息包放入到m_RecvPacket_List需要接收包队列缓存中,提供给消息处理模块处理;
由消息处理模块对消息包进行处理,并将需要发送的消息包放入m_SendPacket_List需要发送包队列缓存中;消息处理模块是协议中主要处理流程,可以创建多个实例,以提高消息包并发处理速度,主动确认返回消息包,并主动将其对应的消息包从m_SendPacket_List队列中消除。
参见图5所示,所述的发送消息模块的发送数据包过程,包括如下步骤:
a1.从m_SendPacket_List需要发送包队列缓存中按顺序取出消息包;如图5框501所示的步骤;
a2.查询该消息包的属性,判断该消息包是否已发送过;判断为是时,继续下一步骤,判断为否时转步骤a5;如图5框502所示的步骤;
a3.判断该消息包是否超时重发;判断为是时,继续下一步骤,判断为否时则返回步骤a1;如图5框503所示的步骤;
a4.判断该消息包是否重发超过3次;判断为是时,返回步骤a1,判断为否时继续下一步骤;如图5框504所示的步骤;
a5.调用标准UDP SocketAPI发送出该消息包;如图5框505所示的步骤;
a6.查询该消息包的消息属性,判断是否需要对方进行确认包,判断为是时,返回步骤a1,判断为否时,将该消息包从m_SendPacket_List需要发送包队列缓存中删除;如图5框506所示的步骤。
参见图6所示,所述的接收消息模块的接收数据包过程,包括如下步骤:
b1.调用标准UDP Socket API从网卡上接收新的消息数据;如图6框601所示的步骤;
b2.对消息数据包进行验证,判断是否有新消息;判断为是时,继续下一步骤,判断为否时返回步骤b1;如图6框602所示的步骤;
b3.对该消息数据包的首尾标志进行判断,判断首尾标志与数据长度是否一致;判断为是时,继续下一步骤,判断为否时则返回步骤b1;如图6框603所示的步骤;
b4.将该消息数据包放入m_RecvPacket_List需要接收包队列缓存中,交给消息处理模块处理;如图6框604所示的步骤。
参见图7所示,所述的消息处理模块的处理数据包过程,包括如下步骤:
c1.从m_RecvPacket_List需要接收包队列缓存中按顺序取出消息包,并将m_RecvPacket_List需要接收包队列缓存中删除该消息包;如图7框701所示的步骤;
c2.判断该消息包否已加密;判断为是时,继续下一步骤,判断为否时转步骤c4;如图7框702所示的步骤;
c3.对该消息包进行解密处理;如图7框703所示的步骤;
c4.判断该消息包是否为确认包;判断为是时,继续下一步骤,判断为否时转步骤c1;如图7框704所示的步骤;
c5.从m_SendPacket_List需要发送包队列缓存中将确认包所对应发送包删除,而后返回步骤c1;如图7框705所示的步骤;
c6.按系统命令执行,而后返回步骤c1;如图7框706所示的步骤。
在本发明中,配备大容量的存储设备,需要对这些设备进行管理,同时还要为其它系统与用户提供良好的文件存储服务。本发明将系统中所有的存储设备整合起来,建立一个统一的名字空间(各个服务器的IP地址与目录组织),在集成的个个存储服务的目录结构是一致,其它系统与用户可以以透明的方式通过对外服务器访问其文件。
本发明的一种基于UDP分布式小文件存储系统的数据处理方法,包括:
接受系统外部的用户的访问请求,将用户的指定数据文件从系统中读取出来的处理步骤;
接受系统外部的用户的写入请求,将用户的指定数据文件写入系统中的处理步骤;
系统在读取指定数据文件错误时,系统进行自动恢复的处理步骤;
系统在扩充存储空间时,系统主动进行负载均衡的处理步骤;
系统对数据文件进行定期自检的处理步骤。
参见图8所示,所述的接受系统外部的用户的访问请求,将用户的指定数据文件从系统中读取出来的处理步骤,包括:
d1.系统的对外服务器得到来自其它系统或用户的访问请求后,获取请求中的其它系统或用户的唯一标志字串与所需要访问的文件路径,并将该标志字串与文件路径发送到系统的信息索引库服务器中,查询所对应的内部唯一名称;如图8所示的步骤8.1;
其中:
信息索引库服务器中的外部映射数据采用如下的结构形式:
它包含有用户ID、文件路径以及内部名称的字段,该用户ID是用于识别不同的系统与用户的识别符,该文件路径表示在逻辑上此文件的储存位置,该内部名称是用来表示内部文件的唯一标志;
d2.系统的信息索引库服务器根据内部唯一名称查询得到所述访问请求对应文件所存储的存储服务器的地址,并将此消息返回给对外服务器;如图8所示的步骤8.2;
其中:
信息索引库服务器中的存储地址数据采用如下的结构形式:
它包含有内部名称、MD5、存储服务器1、存储服务器2与存储服务器3的字段,该内部名称是用来表示内部文件的唯一标志,MD5做为文件的校验值,存储服务器1、2、3分别为存储服务器地址编号;
d3.对外服务器得到文件对应的存储服务器的地址编号与内部名称、MD5,向系统的存储服务器发出请求,发送内部名称与MD5;如图8所示的步骤8.3;
d4.存储服务器接收到对外服务器的请求后,进行读取相应的文件内容,并计算出MD5进行校验,如果校验通过,存储服务器向对外服务器返回文件内容,否则返回出错信息,对外服务器会继续步骤8.3请求下一个存储服务器。如三个都出错,对外服务器向外部系统或用户返回错误消息。
参见图9所示,所述的接受系统外部的用户的写入请求,将用户的指定数据文件写入系统中的处理步骤,包括:
e1.系统的对外服务器得到来自其它系统或用户的访问请求后,取得其它系统与用户的唯一标志字串、所需要写入的文件路径与文件内容,该对外服务器将标志字串与文件路径发送到系统的全局命名服务器中,以请求全局命名服务器为此文件分配一个唯一的内部名称;如图9所示的步骤9.1;
e2.全局命名服务器收到对外服务器的请求之后,根据标志字串与文件路径等参数,生成一个唯一的内部名称,发回给对外服务器;如图9所示的步骤9.2;
e3.对外服务器将取到的内部名称、标志字串、文件路径与文件内容,发送到系统的任务管理服务器,由任务管理服务器执行写入文件操作;如图9所示的步骤9.3;
e4.任务管理服务器收到写入文件请求之后,确定要存储数据文件的存储服务器;如图9所示的步骤9.4;
任务管理服务器收到写入文件请求之后,进行分配相应的三个存储服务器;其分配算法,根据各个存储服务器的空间进行累加,然后进行随机分配,以确定三个随机存储服务器;
根据各个存储服务器的剩余空间的不同,其权值也不同,这样空间大的存储服务器可更多可能得到新分配文件,空间小的存储服务器得到新分配文件的机会会比较小;
任务管理服务器将文件内容与内部名称发送到对应的三个分配存储服务器;
e5.存储服务器收到任务管理服务器的写入命令后,将文件内容写入存储服务器中,写入完成后,进行MD5检验,若检验正确,存储服务器向任务管理服务器返回成功消息,若检验不正确,返回步骤e4由任务管理服务器重新确定一个分配存储服务器写入;如图9所示的步骤9.5;
e6.任务管理服务器收到存储服务器成功写入的返回消息后,任务管理服务器向信息索引库服务器写入索引信息;如图9所示的步骤9.6;
该索引信息包括外部映射数据与存储地址数据;其外部映射数据结构如:
它包含有用户ID、文件路径以及内部名称的字段,该用户ID是用于识别不同的系统与用户的识别符,该文件路径表示在逻辑上此文件的储存位置,该内部名称是用来表示内部文件的唯一标志;
存储地址数据采用如下的结构形式:
它包含有内部名称、MD5、存储服务器1、存储服务器2与存储服务器3的字段,该内部名称是用来表示内部文件的唯一标志,MD5做为文件的校验值,存储服务器1、2、3分别为存储服务器地址编号;
e7.信息索引库服务器向任务管理服务器返回写入成功与否的消息,如果失败,由任务管理服务器向信息索引库服务器重新发送一次写入索引信息的命令;如图9所示的步骤9.7;
e8.任务管理服务器向对外服务器返回写入成功与否的消息,对外服务器收到信息后,向外部系统或用户返回状态消息;如图9所示的步骤9.8。
参见图10所示,所述的系统在读取指定数据文件错误时,系统进行自动恢复的处理步骤,包括:
f1.系统的对外服务器收到从系统的存储服务器读取文件时返回的错误编码时,向系统的任务管理服务器提交文件相应的内部名称与存储服务器地址;如图10所示的步骤10.1;
f2.任务管理服务器得到对外服务器的自动恢复消息,向系统的信息索引库服务器发送内部名称,取得要访问的三个存储服务器地址;如图10所示的步骤10.2;
f3.信息索引库服务器得到任务管理服务器发来的内部名称,查询到相应的三个存储服务器地址,并将三个存储服务器地址信息发回到任务管理服务器中;如图10所示的步骤10.3;
f4.任务管理服务器将三个存储服务器地址、MD5与内部名称发送到报错的存储服务器上,让它自行恢复;如图10所示的步骤10.4;
f5.存储服务器收到任务管理服务器的恢复命令后,向其它二个存储服务器读取内部名称的文件内容,并进行MD5检验,检验通过后,删除本地内部名称的文件内容,用新的文件内容替代,完成操作后,存储服务器向任务管理服务器发送操作状态;如图10所示的步骤10.5。
当系统增加新的存储设备时,任务管理服务器会主动进行负载均衡处理,指导旧的存储服务器向新的存储服务器写入数据,直到两者差别不超过预先设定的百分比。
参见图11所示,所述的系统在扩充存储空间时,系统主动进行负载均衡的处理步骤,包括:
g1.系统的各个存储服务器会定期给任务管理服务器发送自身容量消息,包含剩余空间与剩余空间所占的百分比;如图11所示的步骤11.1;
g2.任务管理服务器进行比较,当发现有两个存储服务器的剩余空间所占的百分比相差超过预先确定的阈值时(比如相差在30%),任务管理服务器向剩余空间所占的百分比较高的一个存储服务器即存储服务器1发送负载均衡命令;该负载均衡命令中包含剩余空间所占的百分比较低的另一个存储服务器地址即存储服务器n地址;如图11所示的步骤11.2;
g3.存储服务器1向存储服务器n发送读取随机文件命令;如图11所示的步骤11.3;
g4.存储服务器n向存储服务器1发送随机文件内容、内部名称与相应MD5值;如图11所示的步骤11.4;
g5.存储服务器1保存从存储服务器n得到的文件内容、内部名称与相应MD5值,并将文件写入存储设备中,通过MD5检验之后,向任务管理服务器发送完成命令,包含存储服务器n地址、内部名称与相应MD5值;如图11所示的步骤11.5;
g6.任务管理服务器得到存储服务器1的反馈消息,向信息索引库服务器提交更改命令,包含存储服务器1地址、存储服务器n地址、内部名称与相应MD5值;如图11所示的步骤11.6;
g7.信息索引库服务器得到任务管理服务器的更改命令时,将内部名称中关于存储服务器地址中的存储服务器n改为存储服务器1,并MD5确认;更新完成返回状态给任务管理服务器;如图11所示的步骤11.7;
g8.任务管理服务器得到信息索引库服务器的确认之后,向存储服务器n发送删除给定内部名称的文件内容;如图11所示的步骤11.8;
g9.存储服务器n删除完成后,向任务管理服务器返回状态;如图11所示的步骤11.9。
参见图12所示,所述的系统对数据文件进行定期自检的处理步骤,包括:
h1.系统的存储服务器会定期把存储服务器上的内部名称分批发送到任务管理服务器上;如图12所示的步骤12.1;
h2.任务管理服务器收到存储服务器提交上来的内部名称与存储服务器地址后,进行转发到信息索引库服务器上查询;如图12所示的步骤12.2;
h3.信息索引库服务器进行查询确认,并把确认的结果返回给任务管理服务器;如图12所示的步骤12.3;
h4.任务管理服务器确认该内部名称在信息索引库服务器的查询结果,如果并无此记录,则任务管理服务器向存储服务器下达删除此内部名称及文件内容的指令;如果有此记录,任务管理服务器向存储服务器下达查询成功的指令;如图12所示的步骤12.4。
采取本发明的基于UDP分布式小文件存储系统和设备,可以为各种需要分布式存储服务的系统提供服务,采用UDP协议显著提高系统的并发量与访问速度,在协议中添加命令与数据的独立空间,可以使各系统之间接口服务如函数调用一样方便,更可降低系统的藕合性,让各个流程更加自由通信,如:让任务管理服务器上的接收文件写入、系统自检、负载均衡、自动恢复等功能可以分开到不同设备上,以减轻设备压力。
上述实施例仅用来进一步说明本发明的一种基于UDP分布式小文件存储系统及其数据处理方法,但本发明并不局限于实施例,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均落入本发明技术方案的保护范围内。