具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。
本发明对业务文件采用两级存储模式,将部分常用文件保存在本地硬盘中,并部署有多台文件服务器分别存储所有文件,当所需文件没有存储在本地硬盘上时,则再从文件服务器上下载所需文件至本地硬盘。如图1所示,本发明一种网络文件管理的实现方法,包括有:
步骤一、构建输入和输出消息队列,并启动资源管理进程;
步骤二、将外部进程发来的文件下载请求保存到输入消息队列中,资源管理进程从输入消息队列中逐一提取文件下载请求,然后从所连接的多个文件服务器中选择其一来下载请求文件,最后将文件下载结果保存到输出消息队列中。
所述输入和输出消息队列中的每个文件下载请求/或结果可以包含有以下参数:文件类型、文件服务器编号、请求文件名(包含文件服务器上的存放相对路径)、请求文件数量、下载次数、文件下载状态等。由于文件下载请求可以分为2类:一类是一般下载请求,即不限制下载文件的文件服务器;一类是特定下载请求,即指定下载文件的文件服务器,因此,文件类型用于保存一般下载请求中的文件所属具体类型(例如普通文件、排行文件等),文件服务器编号用于保存特定下载请求中指定下载的文件服务器编号,下载次数用于标识资源管理进程已经尝试下载的次数,文件下载状态用于标识文件是下载成功或失败状态。
为了提高资源管理进程的处理效率,资源管理进程可以同时启动多个文件下载线程来并行处理输入消息队列中的文件下载请求。本发明可以支持2种工作模式:主备和负荷分担模式,其中,主备模式是按照主备优先级的顺序将多台文件服务器进行排序,排序在后的文件服务器作为排序在前的文件服务器的备份,即先选择优先级高的文件服务器作为主用服务器来下载请求文件,当所述文件服务器发生异常时,则再选择优先级排在其后的文件服务器继续作为主用服务器,并依次类推;负荷分担模式是将收到的文件下载请求平均分发给当前可用的所有文件服务器。下面,将分别具体介绍本发明在两种模式下的不同工作流程:
1、主备模式
在主备模式下,资源管理进程启动多个文件下载线程,每个文件下载线程的工作流程都相同,这样,如图2所示,步骤二中,每个文件下载线程的工作流程进一步包括有:
步骤A1、文件下载线程从输入消息队列中取出一个文件下载请求;
步骤A2、获取主用服务器编号;
步骤A3、判断文件服务器信息列表中主用服务器的状态是否是可用?如果是,则从主用服务器上下载请求文件,然后更新文件下载请求中的“下载次数”和“文件下载状态”,继续下一步;如果否,则转向步骤A6;
当文件下载失败,则“文件下载状态”更新成下载失败状态,当文件下载成功,则“文件下载状态”更新成下载成功状态,“下载次数“可以每次递增加1;
步骤A4、判断文件下载请求中的“文件下载状态”是否是下载成功状态?如果是,则转向步骤A7;如果否,则继续下一步;
步骤A5、判断文件下载请求中的“下载次数”是否达到一定阈值?如果是,则转向步骤A7;如果否,则继续下一步;
步骤A6、判断是否还存在有优先级排在主用服务器之后的文件服务器?如果是,则将优先级排在主用服务器之后的文件服务器选作主用服务器,转向步骤A3;如果否,则将文件下载请求中的“文件下载状态”更新成下载失败状态,然后继续下一步;
步骤A7、将更新后的文件下载请求作为文件下载结果保存到输出消息队列中,继续从输入消息队列中取出下一个文件下载请求,转向步骤A2。
所述文件服务器信息列表保存有所有文件服务器的数据,可以包含但不仅限于:“线程锁”、“最近一次正常使用时间”、“状态”等参数,其中,“线程锁”是修改文件服务器信息列表中的文件服务器的数据所需获得的线程锁,“状态”用于标识文件服务器当前是可用或不可用状态。
2、负荷分担模式
在负荷分担模式下,资源管理进程启动多个文件下载线程,且每个文件下载线程分别和一个文件服务器绑定,即每个文件下载线程只负责从其绑定的文件服务器上下载文件,这样,如图3所示,步骤二中,每个文件下载线程的工作流程进一步包括有:
步骤B1、文件下载线程判断输入消息队列中是否有文件下载请求的“文件服务器编号”是自己所绑定的文件服务器编号?如果是,则从输入消息队列中取出所述文件下载请求,继续下一步;如果否,则转向步骤B6;
步骤B2、文件下载线程查找文件服务器信息列表中自己所绑定的文件服务器的状态是否是可用?如果是,则从自己所绑定的文件服务器上下载请求文件,然后更新文件下载请求中的“下载次数”和“文件下载状态”,继续下一步;如果否,则转向步骤B4;
步骤B3、判断文件下载请求中的“文件下载状态”是否是下载成功状态?如果是,则将更新后的文件下载请求作为文件下载结果保存到输出消息队列中,转向步骤B1;如果否,则继续下一步;
步骤B4、判断文件下载请求中的“下载次数”是否达到一定阈值?如果是,则将文件下载请求的“文件下载状态”更新成下载失败状态,然后将更新后的文件下载请求作为文件下载结果保存到输出消息队列中,转向步骤B1;如果否,则继续下一步;
步骤B5、从文件服务器信息列表中挑选出一个状态是可用的文件服务器,然后将文件下载请求的“文件服务器编号”修改成所挑选出的可用状态的文件服务器编号,最后将修改后的文件下载请求再保存到输入消息队列中,转向步骤B1;
每个文件下载线程在输入消息队列中分别寻找自己的文件下载请求,从而能有效避免任务分发异常而导致的系统故障,当文件下载请求所指定的文件服务器不可用时,文件下载线程能修改文件下载请求所指定的文件服务器,并重新排入输入消息队列中由其他文件下载线程继续处理;
步骤B6、判断输入消息队列中是否有文件下载请求的“文件服务器编号”是空?如果是,则说明输入消息队列中还存在有一般下载请求,从输入消息队列中取出所述文件下载请求,转向步骤B2;如果否,则等待一段时间后转向步骤B1。
文件服务器发生异常中断会导致文件下载出现阻塞,从而影响系统工作效率。为了避免这种阻塞情况,本发明中的资源管理进程还可以对每个文件服务器的状态进行实时监测,本发明还包括有:
资源管理进程为每个文件服务器分别创建一个服务器监测线程,服务器监测线程定时(例如1秒)向自己所监测的文件服务器发出访问请求,并判断访问请求是否被正常执行?如果是,则获取当前时间,然后将文件服务器信息列表中所监测的文件服务器的“最近一次正常使用时间”更新为当前时间,
同时,为所有文件下载线程创建一个下载线程信息列表,所述下载线程信息列表保存有所有文件下载线程的数据,可以包含但不仅限于:“线程锁”、“最近一次正常使用时间”等参数,其中“线程锁”是修改下载线程信息列表中的文件下载线程数据所需获得的线程锁,在主备或负荷分担模式中,在每次文件下载线程将文件下载结果保存到输出消息队列中之后,还包括有:
文件下载线程获取当前时间,将下载线程信息列表中自己的“最近一次正常使用时间”更新为当前时间,
这样,如图4所示,本发明的资源管理进程创建一个状态监测维护线程,还包括有:
步骤C1、状态监测维护线程逐一读取文件服务器信息列表中的每个文件服务器;
步骤C2、获取文件服务器的“线程锁”,并使用“线程锁”对文件服务器信息列表中所述文件服务器的数据进行加锁,然后读取所述文件服务器的“最近一次正常使用时间”,并获取当前时间,再判断当前时间和所述“最近一次正常使用时间”的差值是否大于一定门限值?如果是,则说明该文件服务器发生阻塞,将文件服务器信息列表中所述文件服务器的“状态”更新为不可用;如果否,则将文件服务器信息列表中所述文件服务器的“状态”更新为可用;所述门限值可以根据实际业务需要而设定,例如3秒;
步骤C3、对文件服务器信息列表中所述文件服务器的数据进行解锁,然后判断是否已读取完文件服务器信息列表中的所有文件服务器?如果是,则继续下一步;如果否,则继续读取文件服务器信息列表中的下一个文件服务器,转向步骤C2;
步骤C4、为文件下载线程信息列表加锁;
步骤C5、逐一读取文件下载线程信息列表中的每个文件下载线程;
步骤C6、获取文件下载线程的“线程锁”,并使用“线程锁”对文件下载线程信息列表中所述文件下载线程的数据进行加锁,然后读取所述文件下载线程的“最近一次正常使用时间”,并获取当前时间,然后判断当前时间和所述文件下载线程的“最近一次正常使用时间”的差值是否大于一定门限值?如果是,则说明文件下载线程出现异常,取消所述文件下载线程,从文件下载线程信息列表中删除所述文件下载线程的数据,然后重新启动一个新的文件下载线程,将新的文件下载线程绑定到已取消的文件下载线程所绑定的文件服务器上,最后在文件下载线程信息列表中增加所述新的文件下载线程的数据,继续下一步;如果否,则对文件下载线程信息列表中所述文件下载线程的数据进行解锁,然后继续下一步;
步骤C7、判断是否已读取完文件下载线程信息列表中的所有文件下载线程?如果是,则继续下一步;如果否,则继续读取文件下载线程信息列表中的下一个文件下载线程,转向步骤C6;
步骤C8、为文件下载线程信息列表解锁。
如图5所示,本发明一种网络文件管理的系统,包括有:
资源管理启动装置,用于构建输入和输出消息队列,启动资源管理进程装置,将外部进程发来的文件下载请求保存到输入消息队列中;
资源管理进程装置,用于从输入消息队列中逐一提取文件下载请求,然后从所连接的多个文件服务器中选择其一来下载请求文件,最后将文件下载结果保存到输出消息队列中。
所述输入和输出消息队列中的每个文件下载请求/或结果可以包含有以下参数:文件类型、文件服务器编号、请求文件名(包含文件服务器上的存放相对路径)、请求文件数量、下载次数、文件下载状态等,文件类型用于保存一般下载请求中的文件所属具体类型(例如普通文件、排行文件等),文件服务器编号用于保存特定下载请求中指定下载的文件服务器编号,下载次数用于标识资源管理进程已经尝试下载的次数,文件下载状态用于标识文件是下载成功或失败状态。
为了提高资源管理进程的处理效率,资源管理进程装置可以同时启动多个文件下载线程单元来并行处理输入消息队列中的文件下载请求。本发明可以支持2种工作模式:主备和负荷分担模式。下面,将分别具体介绍本发明在两种模式下的不同组成结构:
1、主备模式
资源管理进程装置启动多个文件下载线程单元,如图6所示,文件下载线程单元可以进一步包括有:
主备下载执行部件,用于从输入消息队列中取出每个文件下载请求,获取主用服务器编号,判断文件服务器信息列表中主用服务器的状态是否是可用,如果是,则从主用服务器上下载请求文件,然后更新文件下载请求中的“下载次数”和“文件下载状态”,最后将更新后的文件下载请求作为文件下载结果保存到输出消息队列中。
所述文件服务器信息列表保存有所有文件服务器的数据,可以包含但不仅限于:“线程锁”、“最近一次正常使用时间”、“状态”等参数,其中,“线程锁”是修改文件服务器信息列表中的文件服务器数据所需获得的线程锁,“状态”用于标识文件服务器当前是可用或不可用状态。
当判断文件服务器信息列表中主用服务器的状态不可用时,所述主备下载执行部件将通知主用服务器重设部件,这样,文件下载线程单元还可以包括有:
主用服务器重设部件,用于判断是否还存在有优先级排在主用服务器之后的文件服务器,如果是,则将优先级排在主用服务器之后的文件服务器选作主用服务器,再通知主备下载执行部件继续判断文件服务器信息列表中主用服务器的状态是否可用;如果否,则将文件下载请求中的“文件下载状态”更新成下载失败状态,然后通知主备下载执行部件将更新后的文件下载请求作为文件下载结果保存到输出消息队列中;
主备结果处理部件,用于当主备下载执行部件从主用服务器上下载请求文件、并更新文件下载请求中的“下载次数”和“文件下载状态”之后,判断如果“文件下载状态”是下载成功状态、或“下载次数”达到一定阈值时,则通知主备下载执行部件将更新后的文件下载请求作为文件下载结果保存到输出消息队列中,如果“文件下载状态”不是下载成功状态、且“下载次数”没有达到一定阈值时,则通知主用服务器重设部件重新选用主用服务器。
2、负荷分担模式
资源管理进程装置启动多个文件下载线程单元,且每个文件下载线程单元分别和一个文件服务器绑定,即每个文件下载线程单元只负责从其绑定的文件服务器上下载文件,如图7所示,每个文件下载线程单元可以进一步包括有:
负荷分担请求提取部件,用于判断输入消息队列中是否有文件下载请求的“文件服务器编号”是自己所绑定的文件服务器编号,如果是,则从输入消息队列中取出所述文件下载请求,并转发给负荷分担下载执行部件;
负荷分担下载执行部件,用于查找文件服务器信息列表中自己所绑定的文件服务器的状态是否是可用,如果是,则从自己所绑定的文件服务器上下载请求文件,然后更新文件下载请求中的“下载次数”和“文件下载状态”,最后将更新后的文件下载请求作为文件下载结果保存到输出消息队列中。
当判断输入消息队列中没有文件下载请求的“文件服务器编号”是自己所绑定的文件服务器编号时,所述负荷分担请求提取部件将继续判断输入消息队列中是否有文件下载请求的“文件服务器编号”是空,如果有,就从输入消息队列中取出“文件服务器编号”是空的文件下载请求,并转发给负荷分担下载执行部件,
当查找文件服务器信息列表中自己所绑定的文件服务器的状态不可用时,所述负荷分担下载执行部件会继续判断文件下载请求中的“下载次数”是否达到一定阈值,如果是,则将文件下载请求的“文件下载状态”更新成下载失败状态,并将更新后的文件下载请求作为文件下载结果保存到输出消息队列中;如果否,则将文件下载请求转发给文件服务器重设部件,这样,文件下载线程单元还可以包括有:
文件服务器重设部件,用于从文件服务器信息列表中挑选出一个状态是可用的文件服务器,然后将文件下载请求的“文件服务器编号”修改成所挑选出的可用状态的文件服务器编号,最后将修改后的文件下载请求再保存到输入消息队列中;
负荷分担结果处理部件,用于当负荷分担下载执行部件从文件服务器上下载请求文件、并更新文件下载请求中的“下载次数”和“文件下载状态”之后,判断如果“文件下载状态”是下载成功状态、或“下载次数”达到一定阈值时,通知负荷分担下载执行部件将更新后的文件下载请求作为文件下载结果保存到输出消息队列中,如果“文件下载状态”不是下载成功状态、且“下载次数”没有达到一定阈值时,将文件下载请求转发给文件服务器重设部件。
为了避免文件服务器、文件下载线程发生异常而出现阻塞情况,资源管理进程装置为每个文件服务器分别创建一个服务器监测线程单元:
服务器监测线程单元,用于定时(例如1秒)向自己所监测的文件服务器发出访问请求,并判断访问请求是否被正常执行,如果是,则获取当前时间,然后将文件服务器信息列表中所监测的文件服务器的“最近一次正常使用时间”更新为当前时间,
资源管理进程装置为所有文件下载线程单元创建一个下载线程信息列表,所述下载线程信息列表保存有所有文件下载线程单元的数据,可以包含但不仅限于“:线程锁”、“最近一次正常使用时间”等参数,其中“线程锁”是修改下载线程信息列表中的文件下载线程单元数据所需获得的线程锁,每个文件下载线程单元还可以包括有:
下载线程监测部件,用于当主备下载执行部件/或负荷分担下载执行部件将文件下载结果保存到输出消息队列中之后,获取当前时间,将下载线程信息列表中自己所属的文件下载线程单元的“最近一次正常使用时间”更新为当前时间,
这样,资源管理进程装置还可以包括有:状态监测维护线程单元,所述状态监测维护线程单元进一步包括有:
服务器状态监测部件,用于读取文件服务器信息列表中的每个文件服务器,获取文件服务器的“线程锁”,并使用“线程锁”对文件服务器信息列表中所述文件服务器的数据进行加锁,然后读取所述文件服务器的“最近一次正常使用时间”,并获取当前时间,再判断当前时间和所述“最近一次正常使用时间”的差值是否大于一定门限值,如果是,则将文件服务器信息列表中所述文件服务器的“状态”更新为不可用;如果否,则将文件服务器信息列表中所述文件服务器的“状态”更新为可用,最后对文件服务器信息列表中所述文件服务器的数据进行解锁;
下载线程状态监测部件,用于逐一读取文件下载线程信息列表中的每个文件下载线程单元,获取文件下载线程单元的“线程锁”,使用“线程锁”对文件下载线程信息列表中所述文件下载线程单元的数据进行加锁,然后读取所述文件下载线程单元的“最近一次正常使用时间”,并获取当前时间,然后判断当前时间和所述文件下载线程单元的“最近一次正常使用时间”的差值是否大于一定门限值,如果是,则取消所述文件下载线程单元,从文件下载线程信息列表中删除所述文件下载线程单元的数据,然后重新启动一个新的文件下载线程单元,将新的文件下载线程单元绑定到已取消的文件下载线程单元所绑定的文件服务器上,最后在文件下载线程信息列表中增加所述新的文件下载线程单元的数据;如果否,则对文件下载线程信息列表中所述文件下载线程单元的数据进行解锁。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。