一种基于哈希环的分布式数据过滤方法转让专利

申请号 : CN201510995758.8

文献号 : CN105653629B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 曹志富

申请人 : 湖南蚁坊软件股份有限公司

摘要 :

本发明涉及数据过滤技术领域,特别是一种基于哈希环的分布式数据过滤方法,包括以下步骤,步骤S101:客户端接收分布式去重集群的信息;步骤S102:客户端接口数据情况请求;步骤S103:节点接收请求;步骤S104:数据过滤块定位,根据RPC发送的分区请求,hash取余后,定位到数据的数据过滤块;步骤S105:数据返回,对应的数据块,根据过滤器键,执行数据存在判断,返回对应状态,返回数据。采用上述结构后,本发明实现多租户功能,客户端可以根据业务需求,任意添加制定的类型的过滤器;实现过滤器的持久备份恢复,避免数据丢失;由于整个集群基于一致哈希环构建,过滤集群实现线性扩展;对于同一个过滤器,会构建多个子过滤器,降低误判率。

权利要求 :

1.一种基于哈希环的分布式数据过滤方法,其特征在于,包括以下步骤,步骤S101:客户端接收分布式去重集群的信息;包括节点的状态和节点的Token,返回数据;

步骤S102:客户端接口数据情况请求,根据一致哈希环Range分布,利用Murmur3 hash数据过滤键,得到一个哈希环位置值X1,通过分布式过滤集群的Range分布,计算X1所属的Range,选择对应过滤节点,利用RPC向远端节点发送请求;

步骤S103:节点接收请求,根据RPC发送的过滤器要求,定位到相应的过滤器;

步骤S104:数据过滤块定位,根据RPC发送的分区请求,hash取余后,定位到数据的数据过滤块;

步骤S105:数据返回,对应的数据块,根据过滤器键,执行数据存在判断,返回对应状态,返回数据。

2.按照权利要求1所述的一种基于哈希环的分布式数据过滤方法,其特征在于,所述步骤S102中RPC向远端节点发送请求。

3.按照权利要求2所述的一种基于哈希环的分布式数据过滤方法,其特征在于:所述步骤S103中根据"filter_name",定位到对应的过滤器。

4.按照权利要求2所述的一种基于哈希环的分布式数据过滤方法,其特征在于:步骤S104中根据"partition_key",hash取余后,定位到数据的数据过滤块。

5.按照权利要求4所述的一种基于哈希环的分布式数据过滤方法,其特征在于:步骤S104中hash取余时的n为创建设置的块数。

6.按照权利要求1所述的一种基于哈希环的分布式数据过滤方法,其特征在于,所述步骤S101中集群节点加入或移除具体包括以下步骤,步骤S1011:开始;

步骤S1012:判断集群是否有节点加入或移出,如果没有,则休眠等待,返回步骤S1011;

如果有,则进入步骤S1013;

步骤S1013:各自节点锁定Token、Range分布全局表;

步骤S1014:新增节点随机产生新Token;

步骤S1015:判断新Token集群中是否已经存在,如果存在,则返回步骤S1014;如果不存在,则进入步骤S1016;

步骤S1016:现有节点接收新增Token,所有节点重新计算Range;

步骤S1017:新增节点加入集群,并通知客户端节点、Token、Range变化。

说明书 :

一种基于哈希环的分布式数据过滤方法

技术领域

[0001] 本发明涉及数据过滤技术领域,特别是一种基于哈希环的分布式数据过滤方法。

背景技术

[0002] 布隆过滤器应用十分广泛,比如网页URL的去重,垃圾邮件的判别,集合重复元素的判别,查询加速,而布隆过滤器的使用是嵌套在应用程序中,易受应用程序本身的变化,导致出现过滤逻辑错误、已有判断数据丢失等异常情况。
[0003] 中国发明专利申请CN 104601527 A公开了一种数据过滤方法,包括:接收数据生成终端发送的数据包,并根据存储的订阅信息确定对应的数据接收终端;根据确定的各个数据接收终端对应的数据过滤条件对数据包进行过滤,得到与各个数据接收终端对应的数据过滤结果;将各个数据过滤结果发送至对应的数据接收终端。此发明在接收到数据包并根据订阅信息确定该数据包对应的数据接收终端后,通过各个数据接收终端对应的数据顾虑条件对该数据包进行过滤,并将得到的各个数据过滤结果发送至对应的数据接收终端,从而达到无需数据接收终端侧的用户根据自身需求对该数据包进行过滤的目的;但是,此发明没有实现分布式数据过滤。

发明内容

[0004] 本发明需要解决的技术问题提供一种基于哈希环的分布式数据过滤方法。
[0005] 为解决上述的技术问题,本发明的一种基于哈希环的分布式数据过滤方法,包括以下步骤,
[0006] 步骤S101:客户端接收分布式去重集群的信息;包括节点的状态和节点的Token,返回数据;
[0007] 步骤S102:客户端接口数据情况请求,根据一致哈希环Range分布,利用Murmur3hash数据过滤键,得到一个哈希环位置值X1,通过分布式过滤集群的range分布,计算X1所属的Range,选择对应过滤节点,利用RPC向远端节点发送请求;
[0008] 步骤S103:节点接收请求,根据RPC发送的过滤器要求,定位到相应的过滤器;
[0009] 步骤S104:数据过滤块定位,根据RPC发送的分区请求,hash取余后,定位到数据的数据过滤块;
[0010] 步骤S105:数据返回,对应的数据块,根据过滤器键,执行数据存在判断,返回对应状态,返回数据。
[0011] 进一步的,所述步骤S101中返回数据格式如下:
[0012]
[0013]为TokenY的前一个节点。
[0014] 更进一步的,所述步骤S102中RPC向远端节点发送请求,请求格式如下:
[0015]
[0016] 更进一步的,所述步骤S103中根据″filter_name″,定位到对应的过滤器。
[0017] 更进一步的,步骤S104中根据″partition_key″,hash取余后,定位到数据的数据过滤块。
[0018] 更进一步的,步骤S104中hash取余时的n为创建设置的块数。
[0019] 进一步的,所述步骤S105中返回的数据如下:
[0020]
[0021]
[0022] 进一步的,所述步骤101中集群节点加入或移除具体包括以下步骤,[0023] 步骤S1011:开始;
[0024] 步骤S1012:判断集群是否有节点加入或移出,如果没有,则休眠等待,返回步骤S1011;如果有,则进入步骤S1013;
[0025] 步骤S1013:各自节点锁定Token、Range分布全局表;
[0026] 步骤S1014:新增节点随机产生新Token;
[0027] 步骤S1015:判断新Token集群中是否已经存在,如果存在,则返回步骤S1014;如果不存在,则进入步骤S1016;
[0028] 步骤S1016:现有节点接收新增Token,所有节点重新计算Range;
[0029] 步骤S1017:新增节点加入集群,并通知客户端节点、Token、Range变化。
[0030] 采用上述结构后,本发明实现多租户功能,客户端可以根据业务需求,任意添加制定的类型的过滤器;实现过滤器的持久备份恢复,避免数据丢失;由于整个集群基于一致哈希环构建,过滤集群实现线性扩展;对于同一个过滤器,会构建多个子过滤器,降低误判率。

附图说明

[0031] 下面将结合附图和具体实施方式对本发明作进一步详细的说明。
[0032] 图1为本发明一种基于哈希环的分布式数据过滤方法的流程图。
[0033] 图2为本发明节点的Token分布图。
[0034] 图3为本发明节点的Token及Range变化示意图。
[0035] 图4为本发明节点加入流程图。

具体实施方式

[0036] 如图1所示,包括以下步骤,本发明的一种基于哈希环的分布式数据过滤方法,[0037] 步骤S101:客户端接收分布式去重集群的信息;包括节点的状态和节点的Token,返回数据;
[0038] 步骤S102:客户端接口数据情况请求,根据一致哈希环Range分布,利用Murmur3hash数据过滤键,得到一个哈希环位置值X1,通过分布式过滤集群的range分布,计算X1所属的Range,选择对应过滤节点,利用RPC向远端节点发送请求;
[0039] 步骤S103:节点接收请求,根据RPC发送的过滤器要求,定位到相应的过滤器;
[0040] 步骤S104:数据过滤块定位,根据RPC发送的分区请求,hash取余后,定位到数据的数据过滤块;
[0041] 步骤S105:数据返回,对应的数据块,根据过滤器键,执行数据存在判断,返回对应状态,返回数据。
[0042] 进一步的,所述步骤S101中返回数据格式如下:
[0043]
[0044]为TokenY的前一个节点。
[0045] 更进一步的,所述步骤S102中RPC向远端节点发送请求,请求格式如下:
[0046]
[0047] 更进一步的,所述步骤S103中根据″filter_name″,定位到对应的过滤器。
[0048] 更进一步的,步骤S104中根据″partition_key″,hash取余后,定位到数据的数据过滤块。
[0049] 更进一步的,步骤S104中hash取余时的n为创建设置的块数。
[0050] 进一步的,所述步骤S105中返回的数据如下:
[0051]
[0052]
[0053] 以网页爬虫URL去重过滤为例:
[0054] 如图2所示,分布式过滤集群的Range分布表为:A(1,25],B(26,50],C(51,75],D(75,0],其中D的range为环绕区间,代表具体负责的范围为<75的范围,加上<=0的范围。当需要过滤某个URL U1时,计算U1的Murmur3hash值,加入hash值为74时,通过计算range分布表,得知,需要去C节点进行去重过滤判断,故将请求发往节点C,节点C根据已有的BloomFilter数据块总数N,对URL进行哈希,对N取模,找到具体的BloomFilter块,进行BloomFilter判断,如果存在,则代表改URL,已经爬取,不需要再次爬取数据。
[0055] 进一步的,如图3和图4所示,所述步骤101中集群节点加入或移除具体包括以下步骤,
[0056] 步骤S1011:开始;
[0057] 步骤S1012:判断集群是否有节点加入或移出,如果没有,则休眠等待,返回步骤S1011;如果有,则进入步骤S1013;
[0058] 步骤S1013:各自节点锁定Token、Range分布全局表;
[0059] 步骤S1014:新增节点随机产生新Token;
[0060] 步骤S1015:判断新Token集群中是否已经存在,如果存在,则返回步骤S1014;如果不存在,则进入步骤S1016;
[0061] 步骤S1016:现有节点接收新增Token,所有节点重新计算Range;
[0062] 步骤S1017:新增节点加入集群,并通知客户端节点、Token、Range变化。
[0063] 虽然以上描述了本发明的具体实施方式,但是本领域熟练技术人员应当理解,这些仅是举例说明,可以对本实施方式作出多种变更或修改,而不背离发明的原理和实质,本发明的保护范围仅由所附权利要求书限定。