任务处理方法及装置的制造方法
【专利说明】
[0001] 本发明专利申请是申请日为2011年12月27日、申请号为201110444845. 6、名称 为"任务处理方法及装置"的中国发明专利申请的分案申请。
技术领域
[0002] 本申请涉及网络技术领域,特别是涉及一种任务处理方法及装置。
【背景技术】
[0003] 多道流水线处理技术,是一种基于网络消息通信的工作调度系统。在大规模分布 式环境中,常使用多道流水线处理技术对数据处理任务进行高效地发布、分配和处理。
[0004] 目前,多道流水线处理技术一般使用分布式消息队列实现。分布式消息队列中, 通常包含三个基本组件,即,消息发布组件,消息中转组件和消息处理组件。其中,消息 发布组件,为系统的使用者提供了固定的API (Application Programming Interface, 应用程序接口),方便使用者提交自己的任务消息,消息被提交后,消息发布组件,将通 过 TCP(Transmission Control Protocol,传输控制协议)协议或 UDP(User Datagram Protocol,用户数据报协议)协议,将任务消息发送至消息中转组件;消息中转组件的作用 是临时存储消息,并将任务消息的发布信息通信给消息处理组件;当消息处理组件接收到 来自消息中转组件的通知,将通过TCP协议或UDP协议接收任务消息,之后将该任务消息提 交给处理单元进行处理,此时,消息中转组件将负责将消息置为不可见状态,防止多个任务 处理单元接收到同样的任务消息;处理单元完成处理后,将根据处理结果发布消息至消息 中转组件,当处理成功时,消息处理组件将通知消息中转组件删除该消息;当处理失败时, 消息处理组件将通知消息中转组件把该消息重新置为可见状态,这样可以使其他处理单元 有机会再次处理该任务。
[0005] -种分布式消息队列系统是如图1所示的Gearman系统。Gearman是目前基于 C/C++实现的一个分布式消息队列系统,主要包含三个组件:Gearman Client,Gearman Server与Gearman Worker,分别对应于上述的消息发布组件、消息中转组件和消息处 理组件。Gearman系统对于消息处理的流程,如图1中所示,包括:Gearman Client向 Gearman Server发布任务;Gearman Server接收任务后,通过任务调度,将任务交给 Gearman Worker进行处理;Gearman Worker对任务进行处理,并将处理结果返回给Gearman Server ;Gearman Server根据返回的处理结果对其保存的任务进行相应地处理,如删除或 重置为可见状态等,至次,一次任务处理完成。
[0006] 可见,使用分布式消息队列这一实现方式,使得任务发布组件无需关心任务处理 单元的位置,只需发送任务消息至消息中转组件,实现了任务发布与任务处理的解耦合。另 一方面,任务消息由中转组件进行统一管理,降低了任务处理失败后的重新调试难度。
[0007] 然而,目前的各类分布式消息队列系统,都缺乏对于网络连接的有效管理,对于已 经建立的网络连接,通常不对其连接状态进行监控与管理,而仅仅依赖于系统的网络功能 进行控制。这样,虽然可以在理想的网络环境中取得比较好的性能测试结果,但在实际使用 中,特别是大规模分布式集群中,常常因为单个节点的故障,而使得所有消息发送与接收环 节都要多次尝试连接一个失败的节点,这样对于性能的影响非常巨大。
【发明内容】
[0008] 本申请所要解决的技术问题是提供一种任务处理方法及装置,以解决目前的分布 式消息队列系统中,因节点失效造成集群处理能力下降的问题。
[0009] 为了解决上述问题,本申请公开了一种任务处理方法,包括:设置一个或多个用于 存储所述分布式消息队列中各个组件之间的网络连接信息的连接池;在分布式消息队列中 的至少一个组件接收任务消息;根据所述网络连接的信息,从所述连接池中选择一个有效 的网络连接;使用选择的所述有效的网络连接发送所述任务消息,进行所述任务消息所请 求的任务处理。
[0010] 优选地,所述分布式消息队列的每个组件中均设置有连接池,每个所述组件的连 接池用于存储本组件与其它组件之间的网络连接的信息;所述根据所述网络连接的信息, 从所述连接池中选择一个有效的网络连接的步骤包括:根据所述网络连接的信息,从接收 到所述任务消息的组件的所述连接池中选择一个有效的网络连接。
[0011] 优选地,任务处理方法还包括:若使用选择的所述有效的网络连接发送所述任务 消息失败,则重新选择一个有效的网络连接发送所述任务消息,并中断失败的网络连接并 释放其资源,将该网络连接设置为失效的网络连接;记录该网络连接中断的时间点,在设定 的时间间隔内,不再使用该网络连接发送任何任务消息。
[0012] 优选地,任务处理方法还包括:当经过所述设定的时间间隔后,接收到新的任务消 息,则尝试恢复所述中断的网络连接。
[0013] 优选地,任务处理方法还包括:若尝试恢复所述中断的网络连接失败,则重新设置 该网络连接中断的时间点,在所述设定的时间间隔内,不再使用该网络连接发送任何任务 消息;若尝试恢复所述中断的网络连接成功,则将该网络连接设置为有效的网络连接。
[0014] 优选地,在所述根据所述网络连接的信息,从所述连接池中选择一个有效的网络 连接的步骤之前,还包括:根据所述网络连接的信息,判断所述连接池中是否存在有效的网 络连接;若存在,则执行所述根据所述网络连接的信息,从所述连接池中选择一个有效的网 络连接的步骤;若不存在,将所述连接池中所有的网络连接的中断时间点设置为当前时间 点,并尝试恢复所述连接池中所有的网络连接。
[0015] 优选地,任务处理方法还包括:当使用选择的所述有效的网络连接发送所述任务 消息成功完成后,将该网络连接返回给所述连接池,并判断该网络连接的当前连接状态,根 据判断结果,将该网络连接设置为有效的网络连接或者无效的网络连接。
[0016] 优选地,在所述多道流水线处理系统的分布式消息队列中的至少一个组件接收到 任务消息的步骤之前,还包括:在所述分布式消息队列的各个组件中设置负载均衡算法。
[0017] 优选地,所述根据所述网络连接的信息,从接收到所述任务消息的组件的所述连 接池中选择一个有效的网络连接的步骤包括:根据所述网络连接的信息,按照所述负载均 衡算法从接收到所述任务消息的组件的所述连接池中选择一个有效的网络连接。
[0018] 优选地,所述分布式消息队列包括消息发布组件、消息中转组件和消息处理组件; 在所述多道流水线处理系统的分布式消息队列中的至少一个组件接收到任务消息的步骤 之前,还包括:将所述分布式消息队列的各个组件中的连接池分别封装为网络连接循环队 列,并且在所述消息中转组件中设置消息优先级队列。
[0019] 优选地,所述根据所述负载均衡算法和所述网络连接的信息,从接收到所述任务 消息的组件的所述连接池中选择一个有效的网络连接的步骤包括:根据所述网络连接的信 息,从接收到所述任务消息的组件的所述网络连接循环队列的头部开始,选择一个有效的 网络连接;所述方法还包括:当使用选择的所述有效的网络连接发送所述任务消息成功完 成后,将该网络连接返回所述网络连接循环队列的尾部。
[0020] 优选地,所述消息中转组件中的所述消息优先级队列为先进先出方式的消息优先 级队列;所述多道流水线处理系统的分布式消息队列中的至少一个组件接收到任务消息的 步骤包括:所述消息中转组件从所述消息优先级队列的头部开始,向后查找第一个可见状 态的任务消息作为当前待处理的任务消息。
[0021] 为了解决上述问题,本申请还公开了一种任务处理装置,包括:连接池,用于存储 所述分布式消息队列中各个组件之间的网络连接的信息;接收模块,用于在分布式消息队 列中的至少一个组件中接收任务消息;选择模块,用于根据所述网络连接的信息,从所述连 接池中选择一个有效的网络连接;连接模块,用于使用选择的所述有效的网络连接发送所 述任务消息,进行所述任务消息所请求的任务处理。
[0022] 优选地,所述分布式消息队列的每个组件中均设置有连接池,每个所述组件的连 接池用于存储本组件与其它组件之间的网络连接的信息;所述选择模块,用于根据所述网 络连接的信息,从接收到所述任务消息的组件的所述连接池中选择一个有效的网络连接。
[0023] 优选地,任务处理装置还包括:失败模块,用于若所述连接模块使用选择的所述 有效的网络连接发送所述任务消息失败,则重新选择一个有效的网络连接发送所述任务消 息,并中断失败的网络连接并释放其资源,将该网络连接设置为失效的网络连接;记录该网 络连接中断的时间点,在设定的时间间隔内,不再使用该网络连接发送任何任务消息。
[0024] 优选地,任务处理装置还包括:重连模块,用于当经过所述设定的时间间隔后,所 述接收模块接收到新的任务消息,尝试恢复所述中断的网络连接。
[0025] 优选地,任务处理装置还包括:重连设置模块,用于若所述重连模块尝试恢复所述 中断的网络连接失败,则重新设置该网络连接中断的时间点,在所述设定的时间间隔内,不 再使用该网络连接发送任何任务消息;若尝试恢复所述中断的网络连接成功,则将该网络 连接设置为有效的网络连接。
[0026] 优选地,任务处理装置还包括:判断模块,用于在所述选择模块根据所述网络连接 的信息,从所述连接池中选择一个有效的网络连接之前,根据所述网络连接的信息,判断所 述连接池中是否存在有效的网络连接;若存在,则执行所述选择模块;若不存在,将所述连 接池中所有