发明内容
本发明实施例提供了一种任务分发方法、分发节点及系统,能够实现在云计算场景下的海量计算任务的分发和会话保持。
本发明实施例第一方面提供的任务分发方法,包括:第一分发节点接收客户端发送的任务请求;
所述第一分发节点根据第一DHT环的信息,将所述任务请求发送给位于所述第一DHT环上且与所述任务请求匹配的业务节点,以便于所述与所述任务请求匹配的业务节点对所述任务请求进行处理,且所述第一分发节点通过与所述与所述任务请求匹配的业务节点对应的布隆过滤器记录所述客户端与所述业务节点的会话信息。
结合本发明实施例的第一方面,在本发明实施例的第一方面的第一种实施方式中,在所述第一分发节点接收客户端发送的任务请求的步骤之前,还包括:所述第一分发节点接收业务节点的注册信息;
所述第一分发节点根据所述注册信息将所述业务节点加入所述第一DHT环,并初始化与所述业务节点对应的布隆过滤器。
结合本发明实施例的第一方面,或者第一方面的第一种实施方式,在本发明实施例的第一方面的第二种实施方式中,还包括:当所述第一分发节点再次接收到所述任务请求时,所述第一分发节点根据所记录的会话信息查找处理过所述任务请求的业务节点,并将所述任务请求发送给所述业务节点,以便于所述业务节点再对所述任务请求进行处理。
结合本发明实施例的第一方面的第一种实施方式,在本发明实施例的第一方面的第三种实施方式中,还包括:所述第一分发节点与至少一个其它分发节点根据各自对应的哈希值组成第二DHT环;
所述第一分发节点将初始化后的与所述业务节点对应的布隆过滤器按照预定的顺序存放在所述第二DHT环中的一个或多个分发节点中。
结合本发明实施例的第一方面的第三种实施方式,在本发明实施例的第一方面的第四种实施方式中,还包括:所述第一分发节点接收第二分发节点发送的第一通知消息,其中,所述第一通知消息用于指示所述第二分发节点将要离开所述第二DHT环;
所述第一分发节点根据所述第一通知消息将所述第二分发节点上保存的布隆过滤器迁移到所述第一分发节点进行保存。
结合本发明实施例的第一方面的第三种实施方式,在本发明实施例的第一方面的第五种实施方式中,还包括:所述第一分发节点接收所述业务节点发送的第二通知消息,其中,所述第二通知消息用于指示所述业务节点将要离开所述第一DHT环;
所述第一分发节点根据所述第二通知消息删除自身保存的所述业务节点的注册信息,并通知保存有与所述业务节点对应的布隆过滤器的至少一个分发节点删除保存的所述业务节点的布隆过滤器。
结合本发明实施例的第一方面的第三种实施方式,在本发明实施例的第一方面的第六种实施方式中,所述注册信息中包含所述业务节点的地址、所述业务节点处理的业务类型;所述任务请求中包含任务关键字以及任务类型,其中,所述任务关键字用于唯一标识一个任务请求。
结合本发明实施例的第一方面的第六种实施方式,在本发明实施例的第一方面的第七种实施方式中,所述第一分发节点将所述任务请求发送给位于所述第一DHT环上且与所述任务请求匹配的业务节点具体包括:所述第一分发节点提取所述任务请求中携带的任务关键字以及任务类型;
所述第一分发节点根据所述任务请求中携带的任务关键字以及任务类型计算哈希值;
所述第一分发节点在所述第一DHT环中以所述哈希值为起点按照预定的方向查找处理的业务类型与所述任务类型匹配的业务节点;
所述第一分发节点将所述任务请求发送给所述业务节点。
结合本发明实施例的第一方面的第七种实施方式,在本发明实施例的第一方面的第八种实施方式中,在所述第一分发节点查找到处理的业务类型与所述任务类型匹配的业务节点之后,在所述第一分发节点将所述任务请求发送给所述业务节点之前,还包括:所述第一分发节点判断是否存在与所述业务节点具有冲突关系的冲突节点;
若不存在所述冲突节点,则所述第一分发节点执行将所述任务请求发送给所述业务节点的步骤,并通知保存有与所述业务节点对应的布隆过滤器的至少一个分发节点将所述布隆过滤器置位;
若存在所述冲突节点,则判断与所述冲突节点对应的布隆过滤器是否已置位,若已置位,则将所述任务请求发送给所述冲突节点。
结合本发明实施例的第一方面,在本发明实施例的第一方面的第九种实施方式中,所述布隆过滤器用位数组表示一个集合,或者用计数器数组表示一个集合。
本发明实施例的第二方面提供了一种分发节点,所述分发节点包括:接收单元,用于接收客户端发送的任务请求;
处理单元,用于根据第一DHT环的信息,将所述任务请求发送给位于所述第一DHT环上且与所述任务请求匹配的业务节点,以便于所述与所述任务请求匹配的业务节点对所述任务请求进行处理,且所述处理单元通过与所述与所述任务请求匹配的业务节点对应的布隆过滤器记录所述客户端与所述业务节点的会话信息。
结合本发明实施例的第二方面,在本发明实施例的第二方面的第一种实施方式中,所述接收单元还用于接收业务节点的注册信息;
所述分发节点还包括:
加入单元,用于根据所述注册信息将所述业务节点加入所述第一DHT环,并初始化与所述业务节点对应的布隆过滤器。
结合本发明实施例的第二方面,或者第二方面的第一种实施方式,在本发明实施例的第二方面的第二种实施方式中,所述处理单元包括:处理子单元,用于在所述接收单元再次接收到所述任务请求时,所述处理子单元根据所记录的会话信息查找处理过所述任务请求的业务节点,并将所述任务请求发送给所述业务节点,以便于所述业务节点再对所述任务请求进行处理。
结合本发明实施例第二方面的第一种实施方式,在本发明实施例的第二方面的第三种实施方式中,所述分发节点还包括:组成单元,用于与至少一个其它分发节点根据各自对应的哈希值组成第二DHT环;
存放单元,用于将初始化后的与所述业务节点对应的布隆过滤器按照预定的顺序存放在所述第二DHT环中的一个或多个分发节点中。
结合本发明实施例的第二方面的第三种实施方式,在本发明实施例的第二方面的第四种实施方式中,所述接收单元还用于:接收所述其它分发节点发送的第一通知消息,其中,所述第一通知消息用于指示所述其它分发节点将要离开所述第二DHT环;
所述分发节点还包括:
迁移单元,用于根据所述第一通知消息将所述将要离开所述第二DHT环的所述其它分发节点上保存的布隆过滤器迁移到所述分发节点进行保存。
结合本发明实施例的第二方面的第三种实施方式,在本发明实施例的第二方面的第五种实施方式中,所述接收单元还用于:接收所述业务节点发送的第二通知消息,其中,所述第二通知消息用于指示所述业务节点将要离开所述第一DHT环;
所述分发节点还包括:
删除单元,用于根据所述第二通知消息删除所述分发节点上保存的所述业务节点的注册信息;
通知单元,用于通知保存有与所述业务节点对应的布隆过滤器的至少一个分发节点删除保存的所述业务节点的布隆过滤器。
结合本发明实施例的第二方面的第三种实施方式,在本发明实施例的第二方面的第六种实施方式中,所述注册信息中包含所述业务节点的地址、所述业务节点处理的业务类型;所述任务请求中包含任务关键字以及任务类型,其中,所述任务关键字用于唯一标识一个任务请求。
结合本发明实施例的第二方面的第六种实施方式,在本发明实施例的第二方面的第七种实施方式中,所述处理单元包括:提取单元,用于提取所述任务请求中携带的任务关键字以及任务类型;
计算单元,用于根据所述任务请求中携带的任务关键字以及任务类型计算哈希值;
查找单元,用于在所述第一DHT环中以所述哈希值为起点按照预定的方向查找处理的业务类型与所述任务类型匹配的业务节点;
执行单元,用于将所述任务请求发送给所述业务节点,并通过与所述与所述任务请求匹配的业务节点对应的布隆过滤器记录所述客户端与所述业务节点的会话信息。
结合本发明实施例的第二方面的第七种实施方式,在本发明实施例的第二方面的第八种实施方式中,所述执行单元包括:第一判断子单元,用于判断是否存在与所述业务节点具有冲突关系的冲突节点;
第一执行子单元,用于当不存在所述冲突节点时,执行将所述任务请求发送给所述业务节点的步骤,并通知保存有与所述业务节点对应的布隆过滤器的至少一个分发节点将所述布隆过滤器置位;
第二判断子单元,用于当存在所述冲突节点时,判断与所述冲突节点对应的布隆过滤器是否已置位;
第二执行子单元,用于在与所述冲突节点对应的布隆过滤器已置位时,将所述任务请求发送给所述冲突节点。
结合本发明实施例的第二方面,在本发明实施例的第二方面的第九种实施方式中,所述布隆过滤器用位数组表示一个集合,或者用计数器数组表示一个集合。
本发明实施例的第三方面提供了一种任务分发系统,所述任务分发系统包括:至少一个分发节点、至少两个业务节点以及至少一个客户端,所述至少两个业务节点组成第一DHT环;
所述分发节点用于:接收所述客户端发送的任务请求;根据所述第一DHT环的信息,将所述任务请求发送给位于所述第一DHT环上且与所述任务请求匹配的业务节点,且所述分发节点通过与所述与所述任务请求匹配的业务节点对应的布隆过滤器记录所述客户端与所述业务节点的会话信息;
所述业务节点用于:接收和处理所述分发节点发送的任务请求;
所述客户端用于:向所述分发节点发送任务请求。
结合本发明实施例的第三方面,在本发明实施例的第三方面的第一种实施方式中,在所述分发节点接收客户端发送的任务请求的步骤之前,还包括:所述分发节点接收业务节点的注册信息;
所述分发节点根据所述注册信息将所述业务节点加入所述第一DHT环,并初始化与所述业务节点对应的布隆过滤器。
结合本发明实施例的第三方面,或者第三方面的第一种实施方式,在本发明实施例的第三方面的第二种实施方式中,所述分发节点还用于:当再次接收到所述任务请求时,所述分发节点根据所记录的会话信息查找处理过所述任务请求的业务节点,并将所述任务请求发送给所述业务节点,以便于所述业务节点再对所述任务请求进行处理。
结合本发明实施例的第三方面,在本发明实施例的第三方面的第三种实施方式中,所述分发节点与至少一个其它分发节点根据各自对应的哈希值组成第二DHT环;
所述分发节点将初始化后的与所述业务节点对应的布隆过滤器按照预定的顺序存放在所述第二DHT环中的一个或多个分发节点中。
结合本发明实施例的第三方面的第三种实施方式,在本发明实施例的第三方面的第四种实施方式中,所述分发节点将所述任务请求发送给位于所述第一DHT环上且与所述任务请求匹配的业务节点具体包括:所述分发节点提取所述任务请求中携带的任务关键字以及任务类型;
所述分发节点根据所述任务请求中携带的任务关键字以及任务类型计算哈希值;
所述分发节点在所述第一DHT环中以所述哈希值为起点按照预定的方向查找处理的业务类型与所述任务类型匹配的业务节点;
所述分发节点将所述任务请求发送给所述业务节点。
结合本发明实施例的第三方面的第四种实施方式,在本发明实施例的第三方面的第五种实施方式中,在所述分发节点查找到处理的业务类型与所述任务类型匹配的业务节点之后,在所述分发节点将所述任务请求发送给所述业务节点之前,还包括:所述分发节点判断是否存在与所述业务节点具有冲突关系的冲突节点;
若不存在所述冲突节点,则所述分发节点执行将所述任务请求发送给所述业务节点的步骤,并通知保存有与所述业务节点对应的布隆过滤器的至少一个分发节点将所述布隆过滤器置位;
若存在所述冲突节点,则判断与所述冲突节点对应的布隆过滤器是否已置位,若已置位,则将所述任务请求发送给所述冲突节点。
从以上技术方案可以看出,本发明实施例具有以下优点:
在本发明实施例中,第一分发节点接收客户端发送的任务请求;第一分发节点根据第一DHT环的信息,将任务请求发送给位于第一DHT环上且与任务请求匹配的业务节点,以便于与任务请求匹配的业务节点对任务请求进行处理,且第一分发节点通过与任务请求匹配的业务节点对应的布隆过滤器记录客户端与业务节点的会话信息。本发明实施例中,第一分发节点通过将任务请求分发给第一DHT环中与任务请求匹配的业务节点进行处理,同时在任务分发过程中,使用一种查找性能与会话数无关的数据结构,即布隆过滤器来记录会话信息,当节点变动时根据所记录的会话信息就能快速查找到目的业务节点,因此,本发明实施例提供的任务分发方法能够满足在云计算场景下实现海量计算任务的分发,且能同时保持会话。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种任务分发方法、分发节点及系统,能够实现在云计算场景下的海量计算任务的分发和会话保持。
请参阅图1,本发明实施例中任务分发方法一个实施例包括:
101、第一分发节点接收客户端发送的任务请求;
当客户端有计算任务需要业务节点进行处理时,客户端向分发节点提交任务请求,分发节点接收客户端发送的任务请求。
102、将任务请求发送给位于第一DHT环上且与任务请求匹配的业务节点,以便于与任务请求匹配的业务节点对任务请求进行处理,且第一分发节点通过与任务请求匹配的业务节点对应的布隆过滤器记录客户端与业务节点的会话信息。
在云计算环境中,每台服务器都可以看作云计算网络中的一个业务节点,这些业务节点位于第一DHT环上。第一分发节点接收到客户端的任务请求后,在第一DHT环上查找与任务请求匹配的业务节点,将任务请求发送给匹配的业务节点,以便于与任务请求匹配的业务节点对任务请求进行处理。
同时,第一分发节点通过与任务请求匹配的业务节点对应的布隆过滤器记录客户端与业务节点的会话信息。
本实施例中,第一分发节点通过将任务请求分发给第一DHT环中与任务请求匹配的业务节点进行处理,同时在任务分发过程中,使用一种查找性能与会话数无关的数据结构,即布隆过滤器来记录会话信息,当节点变动时根据所记录的会话信息就能快速查找到目的业务节点,因此,本实施例提供的任务分发方法能够满足在云计算场景下实现海量计算任务的分发,且能同时保持会话。
为便于理解,下面以一具体实施例对本发明实施例中任务分发方法进行描述,请参阅图2,本发明实施例中任务分发方法另一实施例包括:
201、第一分发节点接收业务节点的注册信息;
在云计算环境中,每台服务器都可以看作云计算网络中的一个业务节点。为了便于对这些业务节点的管理,每个业务节点都需要向分发节点进行注册,分发节点接收业务节点的注册信息。其中,注册信息中包含业务节点的地址、业务类型及其他信息。本实施例中,分发节点可以有多个,业务节点可选择其中任意一个分发节点进行注册,为了便于区分,此处把该业务节点注册的分发节点称为第一分发节点。
202、第一分发节点根据注册信息将业务节点加入第一DHT环,并初始化与业务节点对应的布隆过滤器;
其中,分布式哈希表(Distributed Hash Table,DHT)环是由众多哈希值按顺序组成的一个逻辑环,环的大小和选择的哈希函数有关,例如,选择SHA-1哈希函数,哈希值的取值范围为0~2160-1,即此时DHT环可以看作是由2160个值组成的逻辑环。
第一分发节点接收业务节点的注册信息后,提取注册信息中的唯一能够标识业务节点的关键字,对此关键字进行哈希运算得到哈希值,以此哈希值作为将该业务节点编入第一DHT环的依据,将该业务节点编入第一DHT环,并初始化与该业务节点对应的布隆过滤器。
其中,布隆过滤器是由Bloom在1970年提出的一种基于多哈希函数映射的数据结构,通常应用在一些需要快速判断某个元素是否属于集合的场合。通常情况下,布隆过滤器用位数组表示一个集合,位数组的大小可根据集合中元素的个数和允许的错误率来确定。
初始状态时,布隆过滤器位数组的每一位都置为0,当将一个元素通过多个哈希函数进行映射后可得到多个映射值,每个映射值在布隆过滤器位数组上的对应位置都会被置为1。因此,通过判断该元素的每个映射值在位数组上的对应位置是否全部被置为1即可得知该元素是否属于该集合。
203、第一分发节点与至少一个其它分发节点根据各自对应的哈希值组成第二DHT环;
每个分发节点也有自己的哈希值,此哈希值可以是管理员分配的,也可以是管理设备自动指定的等。第一分发节点与至少一个其它分发节点根据各自对应的哈希值组成第二DHT环。
204、第一分发节点将初始化后的与业务节点对应的布隆过滤器按照预定的顺序存放在第二DHT环中的一个或多个分发节点中。
为了方便查找业务节点对应的布隆过滤器,第一分发节点将业务节点对应的布隆过滤器按照预定的顺序存放在第二DHT环中的一个或多个分发节点中。
具体地,第一分发节点以能够唯一标识该业务节点的关键字作为参数进行哈希运算,以运算所得的哈希值为起点按照预定的方向,例如沿顺时针方向在第二DHT环中进行查找,找到的第一个分发节点即为该业务节点的布隆过滤器的存放节点。
另外,如果将每个业务节点的布隆过滤器只存储在一个分发节点上,一旦该分发节点出现故障,将会导致任务分发出现错误。为了避免这种情况,本实施方式中,分发节点可以对业务节点的布隆过滤器进行备份,即将该业务节点的布隆过滤器在分发节点DHT环上的其他分发节点上也进行存储,具体的备份数目可根据实际情况灵活选择。
另外,如果新的分发节点的加入引起了布隆过滤器的分布位置改变,则需要对受影响的布隆过滤器进行迁移操作。
需要说明的是,本实施例中,第一DHT环可以看作业务节点DHT环,第二DHT环可以看作分发节点DHT环。第一DHT环与第二DHT环是两个相对独立的环,形成第二DHT环的主要目的是方便查找业务节点的布隆过滤器存放的目的分发节点,形成第一DHT环的目的是方便查找任务请求的目的处理业务节点。第一DHT环和第二DHT环可采用相同的哈希函数生成,即二者具有相同数目的逻辑值。
205、第一分发节点接收客户端发送的任务请求;
当客户端有计算任务需要业务节点进行处理时,客户端向分发节点提交任务请求,分发节点接收客户端发送的任务请求。任务请求中可包含任务关键字、任务类型等,其中,任务关键字用于唯一标识一个任务请求。
206、第一分发节点将任务请求发送给位于第一DHT环上且与任务请求匹配的业务节点,且通过与任务请求匹配的业务节点对应的布隆过滤器记录客户端与业务节点的会话信息;
第一分发节点在第一DHT环上寻找与任务请求匹配的业务节点,当发现与任务请求匹配的业务节点后,将该任务请求发送给匹配的业务节点,以便于与任务请求匹配的业务节点对该任务请求进行处理。
为了标记该业务节点处理过该任务请求,第一分发节点通过与任务请求匹配的业务节点对应的布隆过滤器记录客户端与业务节点的会话信息。具体地,记录会话信息的过程为:第一分发节点通知保存有该业务节点的布隆过滤器的分发节点根据任务请求将业务节点的布隆过滤器的对应位全部置为1。
207、第一分发节点接收到客户端发送的相同的任务请求;
当第一分发节点接收到一个新的任务请求时,判断任务请求中携带的任务关键字是否与之前接收的任务请求携带的任务关键字相同,若相同,则认为接收到了客户端发送的相同的任务请求。
208、第一分发节点按照所记录的会话信息进行处理。
具体地,第一分发节点根据任务请求中携带的任务关键字计算对应的映射函数值,根据该映射函数值查找对应位全部被置为1的布隆过滤器对应的业务节点,将任务请求发送给该业务节点,以便于该业务节点再对该任务请求进行处理。
另外,各分发节点间会周期性地通信,以维护第二DHT环上的分发节点信息。当有新的分发节点加入时,需要获取已在第二DHT环中的每个分发节点的通信地址,以得到完整的第二DHT环信息;当某一分发节点将要离开第二DHT环时,需要向其他分发节点发送第一通知消息,其他分发节点接收到第一通知消息后,将欲离开的分发节点上保存的布隆过滤器迁移到自身进行保存。
同时,当有新的业务节点加入时,如果新的业务节点的加入影响了任务请求与原有业务节点之间的映射关系,则分发节点需要为新加入的业务节点设置冲突标识及冲突节点;当某一业务节点将要离开第一DHT环,则需要向注册的分发节点发送第二通知消息,该分发节点接收到第二通知消息后,删除自身保存的该业务节点的注册信息,并通知保存有该业务节点的布隆过滤器的其他分发节点删除所保存该业务节点的布隆过滤器。
本实施例中,分发节点间形成第二DHT环,多个分发节点可以并行处理任务请求,满足了海量计算任务的快速分发;分发节点通过将业务节点加入第一DHT环,并为业务节点初始化布隆过滤器,将业务节点的布隆过滤器按预定的顺序存储在第二DHT环的分发节点中,方便了查找业务节点的布隆过滤器;将客户端发送的任务请求分发给第一DHT环中匹配的业务节点进行处理,同时分发过程中,使用一种查找性能与会话数无关的数据结构,即布隆过滤器来记录会话,当接收到相同的任务请求时,可以根据会话记录快速查找处理过该任务请求的业务节点,具备会话保持功能。
图2描述了在不考虑冲突节点的情况下本发明实施例所提供的一种任务分发方法,图3将描述考虑冲突节点时本发明实施例所提供的任务分发方法,请参阅图3,本发明实施例中任务分发方法另一实施例包括:
301、第一分发节点接收业务节点的注册信息;
在云计算环境中,每台服务器都可以看作云计算网络中的一个业务节点。为了便于对这些业务节点的管理,每个业务节点都需要向分发节点进行注册,分发节点接收业务节点的注册信息。其中,注册信息中包含业务节点的地址、业务类型及其他信息。本实施例中,分发节点可以有多个,业务节点可选择其中任意一个分发节点进行注册,为了便于区分,此处把该业务节点注册的分发节点称为第一分发节点。
302、第一分发节点根据注册信息将业务节点加入第一DHT环,并初始化与业务节点对应的布隆过滤器;
其中,分布式哈希表(Distributed Hash Table,DHT)环是由众多哈希值按顺序组成的一个逻辑环,环的大小和选择的哈希函数有关,例如,选择SHA-1哈希函数,哈希值的取值范围为0~2160-1,即此时DHT环可以看作是由2160个值组成的逻辑环。
第一分发节点接收业务节点的注册信息后,提取注册信息中的唯一能够标识业务节点的关键字,对此关键字进行哈希运算得到哈希值,以此哈希值作为将该业务节点编入第一DHT环的依据,将该业务节点编入第一DHT环,并初始化与该业务节点对应的布隆过滤器。
其中,布隆过滤器是由Bloom在1970年提出的一种基于多哈希函数映射的数据结构,通常应用在一些需要快速判断某个元素是否属于集合的场合。通常情况下,布隆过滤器用位数组表示一个集合,位数组的大小可根据集合中元素的个数和允许的错误率来确定。
初始状态时,布隆过滤器位数组的每一位都置为0,当将一个元素通过多个哈希函数进行映射后可得到多个映射值,每个映射值在布隆过滤器位数组上的对应位置都会被置为1。因此,通过判断该元素的每个映射值在位数组上的对应位置是否全部被置为1即可得知该元素是否属于该集合。
303、第一分发节点与至少一个其它分发节点根据各自对应的哈希值组成第二DHT环;
每个分发节点也有自己的哈希值,此哈希值可以是管理员分配的,也可以是管理设备自动指定的。第一分发节点与至少一个其它分发节点根据各自对应的哈希值组成第二DHT环。
304、第一分发节点将初始化后的与业务节点对应的布隆过滤器按照预定的顺序存放在第二DHT环中的一个或多个分发节点中。
为了方便查找业务节点对应的布隆过滤器,第一分发节点将业务节点对应的布隆过滤器按照预定的顺序存放在第二DHT环中的一个或多个分发节点中。
具体地,第一分发节点以能够唯一标识该业务节点的关键字作为参数进行哈希运算,以运算所得的哈希值为起点按照预定的方向,例如沿顺时针方向在第二DHT环中进行查找,找到的第一个分发节点即为该业务节点的布隆过滤器的存放节点。
另外,如果将每个业务节点的布隆过滤器只存储在一个分发节点上,一旦该分发节点出现故障,将会导致任务分发出现错误。为了避免这种情况,本实施方式中,分发节点可以对业务节点的布隆过滤器进行备份,即将该业务节点的布隆过滤器在第二DHT环上的其他分发节点上也进行存储,具体的备份数目可根据实际情况灵活选择。
本实施例中,各分发节点间会周期性地通信,以维护第二DHT环上的分发节点信息。当有新的分发节点加入时,新的分发节点需要获取已在第二DHT环中的每个分发节点的通信地址,以得到完整的第二DHT环信息,新的分发节点的加入如果引起了布隆过滤器的分布位置改变,则需要对受影响的布隆过滤器进行迁移操作;当某一分发节点将要离开第二DHT环时,需要向其他分发节点发送第一通知消息,其他分发节点接收到第一通知消息后,将欲离开的分发节点上保存的布隆过滤器迁移到自身进行保存。
同时,当有新的业务节点加入第一DHT环时,如果新的业务节点的加入影响了任务请求与原有业务节点之间的映射关系,则第一分发节点需要为新加入的业务节点设置冲突标识及冲突节点;当某一业务节点将要离开第一DHT环,则需要向注册的分发节点发送第二通知消息,该分发节点接收到第二通知消息后,删除自身保存的该业务节点的注册信息,并通知保存有该业务节点的布隆过滤器的其他分发节点删除所保存该业务节点的布隆过滤器。
需要说明的是,本实施例中,第一DHT环可以看作业务节点DHT环,第二DHT环可以看作分发节点DHT环。第一DHT环与第二DHT环是两个相对独立的环,形成第二DHT环的主要目的是方便查找业务节点的布隆过滤器存放的目的分发节点,形成第一DHT环的目的是方便查找任务请求的目的处理业务节点。第一DHT环和第二DHT环可采用相同的哈希函数生成,即二者可以具有相同数目的逻辑值。
305、第一分发节点接收客户端发送的任务请求;
当客户端有计算任务需要业务节点进行处理时,客户端向分发节点提交任务请求,分发节点接收客户端发送的任务请求。任务请求中可包含任务关键字、任务类型等,其中,任务关键字用于唯一标识一个任务请求。
306、第一分发节点提取任务请求中携带的任务关键字以及任务类型;
第一分发节点接收到客户端发送的任务请求后,提取任务请求中的任务关键字及任务类型。
307、第一分发节点根据任务请求中携带的任务关键字以及任务类型计算哈希值;
因为第一分发节点根据业务节点的哈希值将业务节点编入了DHT环,为了快速找到任务请求的目的处理业务节点,第一分发节点需要以任务请求中携带的任务关键字以及任务类型作为入口参数计算任务请求的哈希值。
308、第一分发节点在第一DHT环中以哈希值为起点按照预定的方向查找处理的业务类型与所述任务类型匹配的业务节点;
第一分发节点以计算所得的任务请求的哈希值为起点在第一DHT环中按预定的方向查找,例如按照顺时针方向查找处理的业务类型与所述任务类型匹配的业务节点。
309、第一分发节点判断是否存在与业务节点具有冲突关系的冲突节点,若存在,则执行311,若不存在,则执行步骤310;
当查找到的第一个业务节点处理的业务类型与任务请求的任务类型匹配时,第一分发节点判断是否存在与业务节点具有冲突关系的冲突节点。
因为当有新的业务节点加入第一DHT环时,新的业务节点的加入可能会影响任务请求与原有业务节点之间的映射关系。例如,某一任务请求原本由业务节点N1进行处理,当新的业务节点N2加入后,按照原本的任务分配规则,该任务请求再次到来时会分配给N2进行处理,这样的处理方式将会导致会话间断,此时,可以认为业务节点N1为业务节点N2的冲突节点。因此,在新的业务节点加入第一DHT环时,如果新的业务节点的加入影响了任务请求与原有业务节点之间的映射关系,则第一分发节点会为新加入的业务节点设置冲突标识及冲突节点。当第一分发节点确定业务节点处理的业务类型与任务类型匹配时,还需要判断该是否存在与业务节点具有冲突关系的冲突节点。
310、第一分发节点将任务请求发送给该业务节点,同时通知保存有该业务节点的布隆过滤器的分发节点进行置位;
当第一分发节点的判断结果为该不存在与该业务节点具有冲突关系的冲突节点时,说明没有新的业务节点加入,或者新的业务节点的加入没有影响到任务请求与原有业务节点之间的映射关系,第一分发节点将任务请求发送给该业务节点,同时通知保存有该业务节点的布隆过滤器的分发节点对该业务节点的布隆过滤器的对应位进行置位。
311、第一分发节点判断与冲突节点对应的布隆过滤器是否已置位,若已置位,则执行步骤312,若未置位,则执行步骤313;
具体地,第一分发节点提取任务请求中携带的任务关键字,将该任务关键字通过映射函数计算得到对应的映射函数值,查找每一个映射函数值在冲突节点的布隆过滤器的对应位是否全部被置为1,若是,则判定与冲突节点对应的布隆过滤器已置位,若只有部分位被置为1,或者全部都未置为1,则判定为与冲突节点对应的布隆过滤器未置位。
312、第一分发节点将任务请求发送给冲突节点;
若冲突节点的布隆过滤器已置位,说明该冲突节点处理过该任务请求,则第一分发节点将该任务请求发给冲突节点,以便于冲突节点再次对该任务请求进行处理,从而保证会话不间断。
313、第一分发节点查找冲突节点的冲突节点。
若冲突节点的布隆过滤器未置位,则第一分发节点继续判断冲突节点是否存在冲突节点,以此类推,直至发现有冲突节点的布隆过滤器的对应位已置位时,将任务请求发送给该冲突节点,若所有冲突节点的布隆过滤器均未置位,则分发节点将任务请求发送给之前查找到的第一个业务节点,以由第一个业务节点对该任务请求进行处理。
前面提到通常布隆过滤器用位数组表示一个集合,但是随着冲突节点的增多和任务请求数量的增多,会导致布隆过滤器的位数组最终全部被置为1的情况。如果同一位置多次被置为1,那么只有第一次的置位会起作用,后面的几次置位将没有任何效果,这样会影响计算任务的分发。为了避免这种情况,本实施例中,布隆过滤器可采用计数器数组表示一个集合,即原先的每一位扩展为一个计数器,当任务请求到来时,将命中的计数器加1;同时引入老化机制,每隔一段时间,对所有的计数器进行减1操作,从而保证布隆过滤器本身的状态随着实时到来的任务请求不停变化。
本实施例中,分发节点间形成第二DHT环,多个分发节点可以并行处理任务请求,满足了海量计算任务的快速分发;分发节点通过将业务节点加入第一DHT环,并为业务节点初始化布隆过滤器,将业务节点的布隆过滤器按预定的顺序存储在第二DHT环的分发节点中,方便了查找业务节点的布隆过滤器;在将客户端的任务请求分发给第一DHT环中的业务节点进行处理时,考虑业务节点是否有冲突节点,并使用一种查找性能与会话数无关的数据结构,即布隆过滤器来记录会话,保证了为每个任务请求找到最佳业务节点,具备会话保持功能。
下面对本发明实施例中的分发节点进行描述,请参阅图4,本发明实施例中的分发节点400包括:
接收单元401,用于接收客户端发送的任务请求;
处理单元402,用于根据第一DHT环的信息,将任务请求发送给位于第一DHT环上且与任务请求匹配的业务节点,以便于与任务请求匹配的业务节点对任务请求进行处理,且处理单元通过与任务请求匹配的业务节点对应的布隆过滤器记录客户端与业务节点的会话信息。
本实施例中,处理单元在接收单元接收到客户端发送的任务请求后,将任务请求分发给第一DHT环中与任务请求匹配的业务节点进行处理,同时在任务分发过程中,使用一种查找性能与会话数无关的数据结构,即布隆过滤器来记录会话信息,当节点变动时根据所记录的会话信息就能快速查找到目的业务节点,因此,本发明实施例提供的任务分发方法能够满足在云计算场景下实现海量计算任务的分发,且能同时保持会话。
为了便于理解,下面以一具体实例对本发明实施例中的分发节点进行描述,请参阅图5及图6,为了便于区分,将本实施例中描述的分发节点作为第一分发节点,本发明实施例中的分发节点500包括:
接收单元501,用于接收业务节点的注册信息,客户端发送的任务请求,其他分发节点发送的第一通知消息,业务节点发送的第二通知消息;
加入单元502,用于在接收单元501接收到业务节点的注册信息后,根据注册信息将业务节点加入第一DHT环,并初始化与业务节点对应的布隆过滤器;
组成单元503,用于与至少一个其它分发节点根据各自对应的哈希值组成第二DHT环;
存放单元504,用于将初始化后的与业务节点对应的布隆过滤器按照预定的顺序存放在第二DHT环中的一个或多个分发节点中;
处理单元505,用于在接收单元501接收到客户端发送的任务请求后,根据第一DHT环的信息,将所述任务请求发送给位于第一DHT环上且与任务请求匹配的业务节点,以便于与任务请求匹配的业务节点对任务请求进行处理,且处理单元505通过与任务请求匹配的业务节点对应的布隆过滤器记录客户端与业务节点的会话信息;
迁移单元506,用于在接收单元501接收到第二分发节点发送的第一通知消息后,根据第一通知消息将第二分发节点上保存的布隆过滤器迁移到自身进行保存;
删除单元507,用于在接收单元501接收到业务节点发送的第二通知消息后,根据第二通知消息删除自身保存的该业务节点的注册信息;
通知单元508,用于保存有与该业务节点对应的布隆过滤器的至少一个分发节点删除保存的该业务节点的布隆过滤器;
处理单元505包括处理子单元61,处理子单元61用于当接收单元501接收到客户端发送的相同的任务请求时,根据所记录的会话信息查找处理过该任务请求的业务节点,并将该任务请求发送给该业务节点,以便于该业务节点再对该任务请求进行处理。
处理单元505还包括:提取单元62,计算单元63,查找单元64,执行单元65,其中:
提取单元62,用于提取接收单元501接收的任务请求中携带的任务关键字以及任务类型;
计算单元63,用于根据任务请求中携带的任务关键字以及任务类型计算哈希值;
查找单元64,用于在第一DHT环中以该哈希值为起点按照预定的方向查找处理的业务类型与所述任务类型匹配的业务节点;
执行单元65,用于将任务请求发送给该业务节点,并通过与任务请求匹配的业务节点对应的布隆过滤器记录客户端与业务节点的会话信息。
具体地,执行单元65包括:第一判断子单元651,第一执行子单元652,第二判断子单元653,第二执行子单元654,其中:
第一判断子单元651,用于判断是否存在与查找单元64找到的第一个业务节点具有冲突关系的冲突节点;
第一执行子单元652,用于当不存在冲突节点时,执行将任务请求发送给业务节点的步骤,并通知保存有与业务节点对应的布隆过滤器的至少一个分发节点将布隆过滤器置位;
第二判断子单元653,用于当存在冲突节点时,判断与冲突节点对应的布隆过滤器是否已置位;
第二执行子单元654,用于在与冲突节点对应的布隆过滤器已置位时,将任务请求发送给冲突节点。
为便于理解,下面以一个实际应用场景对本实施例中分发节点的各单元之间的交互方式进行描述,为了便于区别,本实施例中描述的分发节点可以看作第一分发节点,具体如下:
在云计算环境中,每台服务器都可以看作云计算网络中的一个业务节点。为了便于对这些业务节点的管理,每个业务节点都需要向分发节点进行注册,接收单元501接收业务节点的注册信息。其中,注册信息中包含业务节点的地址、业务类型及其他信息。
加入单元502根据接收单元501接收的注册信息将业务节点加入第一DHT环,并初始化与业务节点对应的布隆过滤器。其中,分布式哈希表(Distributed Hash Table,DHT)环是由众多哈希值按顺序组成的一个逻辑环,环的大小和选择的哈希函数有关,例如,选择SHA-1哈希函数,哈希值的取值范围为0~2160-1,即此时DHT环可以看作是由2160个值组成的逻辑环。
具体地,加入单元502提取注册信息中的唯一能够标识业务节点的关键字,对此关键字进行哈希运算得到哈希值,以此哈希值作为将该业务节点编入第一DHT环的依据,将该业务节点编入第一DHT环,并初始化与该业务节点对应的布隆过滤器。
其中,布隆过滤器是由Bloom在1970年提出的一种基于多哈希函数映射的数据结构,通常应用在一些需要快速判断某个元素是否属于集合的场合。通常情况下,布隆过滤器用位数组表示一个集合,位数组的大小可根据集合中元素的个数和允许的错误率来确定。
初始状态时,布隆过滤器位数组的每一位都置为0,当将一个元素通过多个哈希函数进行映射后可得到多个映射值,每个映射值在布隆过滤器位数组上的对应位置都会被置为1。因此,通过判断该元素的每个映射值在位数组上的对应位置是否全部被置为1即可得知该元素是否属于该集合。
每个分发节点也有自己的哈希值,此哈希值可以是管理员分配的,也可以是管理设备自动指定的。组成单元503根据各分发节点对应的哈希值将第一分发节点与至少一个其它分发节点组成第二DHT环。
存放单元504将初始化后的与业务节点对应的布隆过滤器按照预定的顺序存放在组成单元503组成的第二DHT环中的一个或多个分发节点中。具体地,存放单元504以能够唯一标识该业务节点的关键字作为参数进行哈希运算,以运算所得的哈希值为起点按照预定的方向,例如沿顺时针方向在第二DHT环中进行查找,将业务节点的布隆过滤器存放在所找到的第一个分发节点中。
下面举个例子说明存放单元存放业务节点的布隆过滤器的方法,请参阅图7。图7所示为一个第二DHT环,也就是全部由分发节点组成的DHT环。图中有两个分发节点,分别为分发节点1与分发节点2,加入单元502根据两个分发节点的哈希值将两个分发节点加入第二DHT环后两个分发节点分别在第二DHT环上的e、d位置。假设业务节点N1、N2、N3均向第一分发节点进行了注册,可以认为向分发节点1进行了注册。业务节点N1、N2、N3经存放单元504提取各自的关键字进行哈希运算后,3个业务节点的哈希值在第二DHT环上的位置分别为a、b、c位置。对于业务节点N1,存放单元504从第二DHT环上的a点开始按照顺时针的方向查找,找到的第一个分发节点的位置为d,即分发节点2所在的位置,则存放单元504将业务节点N1的布隆过滤器存放在分发节点2上,对于业务节点N2,按照相同的方法查找,业务节点N2的布隆过滤器也是存放在分发节点2上,业务节点N3的布隆过滤器则存放在分发节点1上。
业务节点N1、N2、N3对应的布隆过滤器的位数组初始状态时每一位均为0,假设布隆过滤器的位数组长度为18,初始状态时,业务节点N1、N2、N3对应布隆过滤器状态可如图8所示,每一位均置为0。第一分发节点中保存的三个业务节点的初始分发表如表1所示。
表1
哈希值 |
业务节点信息 |
冲突标识 |
冲突节点 |
P |
N1 |
0 |
NULL(无) |
Q |
N2 |
0 |
NULL |
R |
N3 |
0 |
NULL |
另外,如果将每个业务节点的布隆过滤器只存储在一个分发节点上,一旦该分发节点出现故障,将会导致任务分发出现错误。为了避免这种情况,本实施方式中,存放单元504可以对业务节点的布隆过滤器进行备份,即将该业务节点的布隆过滤器在第二DHT环上的其他分发节点上也进行存储,具体的备份数目可根据实际情况灵活选择。
本实施例中,各分发节点间会周期性地通信,以维护第二DHT环上的分发节点信息。当有新的分发节点加入时,新的分发节点需要获取已在第二DHT环中的每个分发节点的通信地址,以得到完整的第二DHT环信息,新的分发节点的加入如果引起了布隆过滤器的分布位置改变,则迁移单元506需要对受影响的布隆过滤器进行迁移操作;当某一分发节点将要离开第二DHT环时,需要向其他分发节点发送第一通知消息,迁移单元506在接收单元501接收第一通知消息后,将欲离开的分发节点上保存的布隆过滤器迁移到自身进行保存。
同时,当有新的业务节点加入第一DHT环时,如果新的业务节点的加入影响了任务请求与原有业务节点之间的映射关系,则处理单元505需要为新加入的业务节点设置冲突标识及冲突节点;当某一业务节点将要离开第一DHT环,则需要向注册的分发节点发送第二通知消息,删除单元507在接收单元501接收到第二通知消息后,删除自身保存的该业务节点的注册信息,并由通知单元508通知保存有该业务节点的布隆过滤器的其他分发节点删除所保存该业务节点的布隆过滤器。
需要说明的是,本实施例中,第一DHT环可以看作业务节点DHT环,第二DHT环可以看作分发节点DHT环。第一DHT环与第二DHT环是两个相对独立的环,组成第二DHT环的主要目的是方便查找业务节点的布隆过滤器存放的目的分发节点,组成第一DHT环的目的是方便查找任务请求的目的处理业务节点。第一DHT环和第二DHT环可采用相同的哈希函数生成,即二者可以具有相同数目的逻辑值。
当客户端有计算任务需要业务节点进行处理时,客户端向分发节点提交任务请求,接收单元501接收客户端发送的任务请求。任务请求中可包含任务关键字、任务类型等,其中,任务关键字用于唯一标识一个任务请求。
处理单元505将接收单元501接收到的任务请求发送给位于第一DHT环上且与任务请求匹配的业务节点,且通过与任务请求匹配的业务节点对应的布隆过滤器记录客户端与业务节点的会话信息。
具体地,处理单元505利用其内的提取单元62提取获取单元501获取的任务请求中携带的任务关键字以及任务类型,计算单元63根据提取单元62提取的任务关键字以及任务类型计算哈希值,查找单元64以计算单元63计算的哈希值为起点在第一DHT环中按预定的方向查找,例如按照顺时针方向查找处理的业务类型与所述任务类型匹配的业务节点,执行单元65将任务请求发送给该业务节点,并通知保存有该业务节点的布隆过滤器的分发节点根据任务请求将业务节点的布隆过滤器的对应位全部置为1。
下面举例说明第一分发节点分发任务请求的过程,请参阅图9。图9表示的是第一DHT环,也就是全部由业务节点组成的DHT环,环中有三个业务节点N1、N2、N3。假设任务A与任务B都由第一分发节点进行分发,计算单元63根据任务A的任务关键字以及任务类型作为入口参数计算哈希值,查找单元64根据任务A的哈希值在第一DHT中以顺时针方向查找处理的业务类型与所述任务类型匹配的业务节点,查找到的第一个符合条件的业务节点为业务节点N1,执行单元65将任务A发送给业务节点N1处理,并通知保存有业务节点N1的布隆过滤器的分发节点将业务节点N1的布隆过滤器置位。按照相同的方法可知,任务B的目的处理节点为业务节点N3。
本实施例中,布隆过滤器算法中可采用2个映射函数,分别记为M1(x)和M2(x),布隆过滤器的位数组长度设为18,即布隆过滤器的位数组的位数可用第0位至第17位表示。假设根据任务关键字以及任务类型计算所得的任务A和任务B的映射函数值为M1(A)=1,M2(A)=10,M1(B)=3,M2(B)=12。将任务A与任务B分发送到对应的业务节点之后,各业务节点的布隆过滤器的置位情况如图10所示。由于任务A分配给业务节点N1处理,所以业务节点N1的布隆过滤器的第1、10位均被置为1,任务B分配给业务节点N3处理,所以业务节点N3的布隆过滤器的第3、12位均被置为1,业务节点N2没有被分配任务,所以业务节点N2的布隆过滤器没有被置位。
当接收单元501接收到客户端发送的相同的任务请求时,处理子单元61根据所记录的会话信息处理。当两个任务请求中携带的任务关键字相同时,接收单元501认为接收到了客户端发送的相同的任务请求。处理子单元61根据任务请求中携带的任务关键字通过不同的映射函数进行计算得到对应的映射函数值,根据该映射函数值查找对应位全部被置为1的布隆过滤器对应的业务节点,将任务请求发送给该业务节点,以便于该业务节点再对该任务请求进行处理。
上面介绍了不考虑冲突节点时,第一分发节点处理任务请求的方法,下面介绍考虑冲突节点时,第一分发节点处理任务请求的方法。冲突节点主要指与某一业务节点具有冲突关系的业务节点,冲突节点主要是由于新加入第一DHT环的业务节点引起的。
例如,一个新的业务节点N4加入到了图9所示的第一DHT环中,现在的第一DHT环如图11所示,业务节点N4的加入,导致了任务与原有业务节点之间的映射关系发生了变化。如图11所示,任务B原本会分给业务节点N3处理,当新的业务节点N4加入后,按照不考虑冲突节点的任务处理方法,任务B再次到来时可能分给业务节点N4处理,这样将会导致需要会话保持的任务B中断。因此,当新的业务节点加入时,如果新加入的业务节点导致了任务与原有业务节点之间的映射关系发生了变化,则处理单元505需要为新加入的业务节点设置冲突标识位及冲突节点,业务节点N4加入后,第一分发节点中保存的分发表如表2所示。
表2
哈希值 |
业务节点信息 |
冲突标识 |
冲突节点 |
P |
N1 |
0 |
NULL(无) |
Q |
N2 |
0 |
NULL |
L |
N4 |
1 |
N3 |
R |
N3 |
0 |
NULL |
如图11所示,当任务B和任务C同时到来时,其中任务B是业务节点N3之前处理过的任务。对任务B来说,查找单元64在第一DHT环上查找的第一个处理的业务类型与任务B类型匹配的业务节点是业务节点N4,第一判断子单元651将继续判断是否存在与查找单元64查找到的业务节点N4存在冲突关系的冲突节点。根据表2可知,存在与业务节点N4有冲突关系的冲突节点,冲突节点为业务节点N3,第二判断子单元653继续判断作为冲突节点的业务节点N3的布隆过滤器的对应位是否置位,由于任务B的映射函数值为M1(B)=3,M2(B)=12,由图10可知,业务节点N3的布隆过滤器对应位已全部被置为1,第二执行单元654确定业务节点N3为任务B的目的处理节点,将任务B发送给业务节点N3。
对于任务C,假设任务C的映射函数值为M1(C)=3,M2(C)=11,同样,查找单元找到的第一个业务节点为N4,根据表2可知,业务节点N4存在冲突节点,冲突节点为业务节点N3。第二判断子单元653继续判断作为冲突节点的业务节点N3的布隆过滤器的对应位是否置位。由于任务C的映射函数值为M1(C)=3,M2(C)=11,由图10可知,业务节点N3的布隆过滤器对应位未全部被置为1,因此第二执行单元654继续寻找是否存在与业务节点N3具有冲突关系的冲突节点,若有,则重复上述过程,若没有,则确定业务节点N4为任务C的目的处理节点,将任务C发送给业务节点N4处理。
另外,如果对于一个新的任务,查找单元64根据查找到的处理的业务类型与任务类型匹配的第一个业务节点为N1,且第一判断子单元651的判断结果为不存在与业务节点N1存在冲突关系的冲突节点,则第一执行单元652直接将该任务发送给业务节点N1,并通知保存有该业务节点的布隆过滤器的分发节点将该业务节点的布隆过滤器的对应位置位。
前面提到通常布隆过滤器用位数组表示一个集合,但是随着冲突节点的增多和任务请求数量的增多,会导致布隆过滤器的位数组最终全部被置为1的情况。如果同一位置多次被置为1,那么只有第一次的置位会起作用,后面的几次置位将没有任何效果,这样会影响计算任务的分发。为了避免这种情况,本实施例中,布隆过滤器可采用计数器数组表示一个集合,即原先的每一位扩展为一个计数器,当任务请求到来时,将命中的计数器加1;同时引入老化机制,每隔一段时间,对所有的计数器进行减1操作,从而保证布隆过滤器本身的状态随着实时到来的任务请求不停变化。
本实施例中,组成单元将第一分发节点与其他分发节点间形成第二DHT环,多个分发节点可以并行处理任务请求,满足了海量计算任务的快速分发;加入单元通过将业务节点加入第一DHT环,并为业务节点初始化布隆过滤器,存放樊元将业务节点的布隆过滤器按预定的顺序存储在第二DHT环的分发节点中,方便了查找业务节点的布隆过滤器;将客户端的任务请求分发给第一DHT环中满足条件的业务节点进行处理,同时使用一种查找性能与会话数无关的数据结构,即布隆过滤器来记录会话,保证了为每个任务请求找到最佳业务节点,具备会话保持功能。
下面对本发明实施例中的分发节点进一步说明,请参阅图12,本发明实施例中分发节点1200包括:接收器1201以及处理器1202。
接收器1201执行如下流程:
接收客户端发送的任务请求。
处理器1202执行如下流程:
根据第一DHT环的信息,将任务请求发送给位于第一DHT环上且与任务请求匹配的业务节点,以便于与任务请求匹配的业务节点对任务请求进行处理,且处理器1202通过与任务请求匹配的业务节点对应的布隆过滤器记录客户端与业务节点的会话信息。
处理器1202还用于在接收器1201接收到相同的任务请求时,根据所记录的会话信息查找处理过该任务请求的业务节点,并将任务请求发送给该业务节点,以便于该业务节点再对该任务请求进行处理。
处理器1202处理任务请求的具体过程包括:
处理器1202提取任务请求中携带的任务关键字以及任务类型,根据任务请求中携带的任务关键字以及任务类型计算哈希值,在第一DHT环中以该哈希值为起点按照预定的方向查找处理的业务类型与任务类型匹配的业务节点,将任务请求发送给该业务节点。
另外,如果考虑冲突节点,则处理器1202在查找到处理的业务类型与任务类型匹配的业务节点之后,继续判断是否存在与该业务节点具有冲突关系的冲突节点;若不存在冲突节点,则处理器1202执行将任务请求发送给该业务节点的步骤,并通知保存有与该业务节点对应的布隆过滤器的至少一个分发节点将布隆过滤器置位;若存在冲突节点,则处理器1202判断与冲突节点对应的布隆过滤器是否已置位,若已置位,则处理器1202将任务请求发送给冲突节点。
本实施例中,处理器通过将接收器接收到的任务请求分发给第一DHT环中与任务请求匹配的业务节点进行处理,同时在任务分发过程中,使用一种查找性能与会话数无关的数据结构,即布隆过滤器来记录会话信息,当节点变动时根据所记录的会话信息就能快速查找到目的业务节点,因此,本实施例提供的分发节点能够满足在云计算场景下实现海量计算任务的分发,且能同时保持会话。
下面对执行上述任务分发方法的本发明实施例的任务分发系统进行说明,其基本逻辑结构参考图13,本发明实施例中任务分发系统1300包括:至少一个分发节点1302、至少两个业务节点1303以及至少一个客户端1301。
分发节点1302用于:接收所述客户端发送的任务请求;根据第一DHT环的信息,将任务请求发送给位于第一DHT环上且与所述任务请求匹配的业务节点,且分发节点通过与任务请求匹配的业务节点对应的布隆过滤器记录客户端与业务节点的会话信息;
业务节点1303用于:接收和处理分发节点发送的任务请求;
客户端1301用于:向分发节点发送任务请求。
需要说明的是,本实施例中的分发节点1302可以与前述图5与图6所示的分发节点相同,具体此处不再赘述。
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上对本发明实施例所提供的一种任务分发方法、分发节点及系统进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,因此,本说明书内容不应理解为对本发明的限制。