首页> 中国专利> 分布式查询引擎系统和方法及元数据服务器

分布式查询引擎系统和方法及元数据服务器

摘要

本申请提供了一种分布式键-值查询引擎系统和查询方法,该系统包括:元数据服务器、至少一个代理节点和至少一个存储节点;其中,所述元数据服务器,用于维护指向存储节点的全局路由表信息;所述代理节点包括:查询转发模块,用于响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将客户端请求转发给相应的存储节点;数据转发模块,用于将相应存储节点返回的包括目标Value的回应包传送给客户端;所述存储节点,用于基于接收到的客户端请求,从本地存储中获取所需数据,并发送包括目标Value的回应包给代理节点。本发明能够实现键-值数据的分布式存储和查询,并且能够容纳海量键-值数据,对高并发访问的适应性更强。

著录项

  • 公开/公告号CN104050249A

    专利类型发明专利

  • 公开/公告日2014-09-17

    原文格式PDF

  • 申请/专利号CN201410256090.0

  • 发明设计人 杨康;谢冉;

    申请日2011-12-31

  • 分类号G06F17/30(20060101);H04L29/08(20060101);

  • 代理机构11319 北京润泽恒知识产权代理有限公司;

  • 代理人赵娟

  • 地址 100088 北京市西城区新街口外大街28号D座112室(德胜园区)

  • 入库时间 2023-12-17 01:14:57

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-07-26

    专利权的转移 IPC(主分类):G06F17/30 专利号:ZL2014102560900 登记生效日:20220714 变更事项:专利权人 变更前权利人:北京奇虎科技有限公司 变更后权利人:北京奇虎科技有限公司 变更事项:地址 变更前权利人:100088 北京市西城区新街口外大街28号D座112室(德胜园区) 变更后权利人:100015 北京市朝阳区酒仙桥路6号院2号楼1至19层104号内8层801 变更事项:专利权人 变更前权利人:奇智软件(北京)有限公司 变更后权利人:

    专利申请权、专利权的转移

  • 2018-03-30

    授权

    授权

  • 2014-10-22

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20111231

    实质审查的生效

  • 2014-09-17

    公开

    公开

说明书

本发明专利申请是申请日为2011年12月31日、申请号为 201110460494.8、名称为“一种分布式键-值查询方法和查询引擎系统”的中 国发明专利申请的分案申请。

技术领域

本申请涉及分布式数据存储和查询技术领域,特别是涉及一种分布式键 -值查询方法和查询引擎系统。

背景技术

对于大规模互联网应用、云计算的支撑而言,一般会使用关系型数据库 存储相关数据。

传统的关系型数据库,通常将某一个应用的某一类信息(例如网站用户 信息)都存储在数据库系统的单个库单张表中,对应用程序提供读取和写入 操作的通讯接口。实现上,典型的关系型数据库如MySQL,单表的查询和写 入操作有一定上限,超过这个上限,SQL查询和写入操作将会变得非常缓慢, 磁盘输入/输出(IO)模块也会出现瓶颈。在互联网海量数据的今天,传统 关系型数据库要承载海量数据,通常的做法就是将数据分成多个库多个表存 储,例如网站用户信息数据,可以按取模算法对用户标识(user_id)字段 计算哈希(hash)值,将不同的用户数据分片到不同数据库,以此来解决单 库单表的存储和读写压力问题。

也就是说,传统的关系型数据库,为支持大容量数据,需要将数据水平 拆分到多个库多张表上,确保单张表的记录数是有限的。这样的好处在于减 小了索引文件的大小,从而提升查询性能。

但是,传统的关系型数据库,倾向于使用单台机器来解决存储容量的问 题。若要扩容到多台机器,需要在应用层做数据拆分策略。这里存在两个问 题,一个是对于每个应用,都需要应用层做数据拆分,且每个应用拆分策略 都会有不同,效率低;另一个问题是增加机器后的数据重新拆分代价很高, 需要人工停机维护操作,不支持自动弹性扩展。

其次,传统的关系型数据库,单台机器的并发能力有一定上限,高并发 的访问会将机器资源耗尽。不能支持高并发访问的原因之一是关系型数据库 在检索时需要做SQL解析操作,对CPU资源的开销大。

总之,目前需要本领域技术人员迫切解决的一个技术问题是:如何能够 提供一种能够容纳海量数据、适应高并发访问的更加优化的存储/查询方案。

发明内容

本申请所要解决的技术问题是提供一种分布式键-值查询方法和查询引 擎系统,能够容纳海量键-值数据,对高并发访问的适应性更强。

为了解决上述问题,本申请公开了一种分布式键-值查询引擎系统,具 体可以包括:

元数据服务器,用于维护指向存储节点的全局路由表信息;

至少一个代理节点,包括:

查询转发模块,用于响应客户端发出的包括目标KEY的请求,基于所 述全局路由表信息,将客户端请求转发给相应的存储节点;

数据转发模块,用于将相应存储节点返回的包括目标Value的回应包传 送给客户端;

至少一个存储节点,用于基于接收到的客户端请求,从本地存储中获取 所需数据,并发送包括目标Value的回应包给代理节点。

优选的,所述代理节点还可以包括:路由表同步模块,用于将元数据服 务器的全局路由表信息同步至本地;其中,所述查询转发模块基于本地的全 局路由表信息进行查询。

优选的,所述代理节点还可以包括:路由表更新模块,用于当收到元数 据服务器的路由表更新通知时,从元数据服务器获取新的全局路由表信息。

优选的,所述查询转发模块具体包括:哈希子模块,用于基于所接收的 包括目标KEY的客户端请求,通过哈希算法计算目标KEY所在的数据区块; 定位子模块,用于依据计算得到的目标KEY所在的数据区块的标识,查询 所述全局路由表信息,定位相应的存储节点;转发子模块,用于将客户端请 求转发至相应存储节点。

优选的,所述元数据服务器还可以包括:数据同步模块,用于通知所述 新增的存储节点从所选定的存储节点中同步N个数据区块;所述N由所述 新增存储节点的属性参数计算得到;路由表变更模块,用于当所述新增的存 储节点完成数据同步后,生成新的全局路由表信息;第一更新通知模块,用 于向代理节点发送路由表更新通知。

优选的,所述元数据服务器还可以包括:监控模块,用于监控各存储节 点的存活状态,当监测到一个存储节点失效时,修改全局路由表信息;所述 修改包括:针对以该失效的存储节点作为主节点的数据区块,将其主节点重 新映射到另一个冗余节点上;第二更新通知模块,用于向代理节点发送路由 表更新通知。

优选的,所述存储节点可以包括:用于存储热点数据的高速存储节点, 和用于存储非热点数据的其他类型存储节点;其中,所述高速存储节点包括 内存节点或者固态硬盘节点,所述其他类型存储节点包括SAS/SATA硬盘节 点。

依据本发明的另一实施例,还公开了一种分布式键-值查询方法,具体 可以包括:接收客户端指向当前代理节点的包括目标KEY的请求;当前代 理节点通过查询全局路由表信息,将客户端请求转发给相应的存储节点;当 前代理节点将相应存储节点返回的包括目标Value的回应包传送给客户端。

优选的,所述分布式键-值查询方法还可以包括:当前代理节点通过异 步线程将维护在服务器上的全局路由表信息同步至本地,在本地进行对全局 路由表信息的查询。

优选的,所述分布式键-值查询方法还可以包括:当收到路由表更新通 知时,获取新的全局路由表信息。

优选的,所述当前代理节点通过查询全局路由表信息,将客户端请求转 发给相应的存储节点的过程具体包括:基于所接收的包括目标KEY的客户 端请求,通过哈希算法计算目标KEY所在的数据区块;依据计算得到的目 标KEY所在的数据区块标识,查询所述全局路由表信息,定位相应的存储 节点;将客户端请求转发给相应的存储节点。

依据本发明的另一实施例,还公开了一种分布式键-值(Key-Value)查 询引擎系统的故障转移方法,包括:监测各存储节点是否存活;其中,同一 个数据区块存储在一个存储主节点和至少一个存储冗余节点上;当监测到一 个存储节点失效时,修改全局路由表信息;所述修改包括:针对以该失效的 存储节点作为主节点的数据区块,将其主节点重新映射到另一个冗余节点 上;将新的全局路由表信息更新至各代理节点;所述代理节点用于响应客户 端发出的包括目标KEY的请求,基于所述全局路由表信息,将客户端请求 转发给相应的存储节点;以及将相应存储节点返回的包括目标Value的回应 包传送给客户端。

依据本发明的另一实施例,还公开了一种分布式键-值(Key-Value)查 询引擎系统的增加物理存储节点方法,包括:接收新增存储节点的注册请求; 依据新增存储节点的属性参数,通知所述新增的存储节点从所选定的存储节 点中同步N个数据区块;所述N由所述新增存储节点的属性参数计算得到; 当所述新增的存储节点完成数据同步后,生成新的全局路由表信息;将新的 全局路由表信息更新至代理节点;所述代理节点用于响应客户端发出的包括 目标KEY的请求,基于所述全局路由表信息,将客户端请求转发给相应的 存储节点;以及将相应存储节点返回的包括目标Value的回应包传送给客户 端。

优选的,该方法,在接收新增存储节点的注册请求之后,还包括:如果 所述新增存储节点为合法工作节点,则进入下一步,否则,拒绝所述新增存 储节点的加入。

优选的,该方法,在将新的全局路由表信息更新至代理节点之后,还包 括:在所选定的存储节点的空闲时间,逐步删除其所存储的已同步到所述新 增存储节点的所述N个数据区块。

依据本发明的另一实施例,还公开了一种元数据服务器,包括:

存储模块,用于存储反映目标KEY和存储节点映射关系的全局路由表 信息;

全局路由表信息同步模块,用于将所述全局路由表信息同步到至少一个 代理节点;所述代理节点用于响应客户端发出的包括目标KEY的请求,基 于所述全局路由表信息,将客户端请求转发给相应的存储节点;以及将相应 存储节点返回的包括目标Value的回应包传送给客户端。

优选的,元数据服务器还可以包括:数据同步模块,用于依据新增存储 节点的属性参数,通知所述新增的存储节点从所选定的存储节点中同步N个 数据区块;所述N由所述新增存储节点的属性参数计算得到;路由表变更模 块,用于当所述新增的存储节点完成数据同步后,生成新的全局路由表信息; 第一更新通知模块,用于向代理节点发送路由表更新通知。

优选的,元数据服务器还可以包括:监控模块,用于监控各存储节点的 存活状态,当监测到一个存储节点失效时,修改全局路由表信息;所述修改 包括:针对以该失效的存储节点作为主节点的数据区块,将其主节点重新映 射到另一个冗余节点上;第二更新通知模块,用于向代理节点发送路由表更 新通知。

依据本发明的另一实施例,还公开了一种代理节点,可以包括:

查询转发模块,用于响应客户端发出的包括目标KEY的请求,通过查 询全局路由表信息,将客户端请求转发给相应的存储节点;

数据转发模块,用于将相应存储节点返回的包括目标Value的回应包传 送给客户端。

优选的,所述的代理节点还可以包括:路由表同步模块,用于将服务器 上的全局路由表信息同步至本地;其中,所述查询转发模块基于本地的全局 路由表信息进行查询。

优选的,所述的代理节点还可以包括:路由表更新模块,用于当收到路 由表更新通知时,获取新的全局路由表信息。

优选的,所述查询转发模块具体包括:

哈希子模块,用于基于所接收的包括目标KEY的客户端请求,通过哈 希算法计算目标KEY所在的数据区块;

定位子模块,用于依据计算得到的目标KEY所在的数据区块标识,查 询所述全局路由表信息,定位相应的存储节点;

转发子模块,用于将客户端请求转发至相应存储节点。

与现有技术相比,本申请具有以下优点:

本发明提出了一种新的分布式键-值查询引擎架构,采用该架构的查询 引擎系统和查询方法,能够实现键-值数据的分布式存储和查询,并且能够 容纳海量键-值数据,对高并发访问的适应性更强。

其中,由于本发明采用了全局路由表信息,客户端的数据请求可以通过 查询全局路由表进而找到相应的存储物理节点,然后获取所需数据即可。因 此,当需要增加物理存储节点时,只需要将该物理存储节点增加的信息更新 至全局路由表即可,可以实现平滑增加或者减少物理存储节点的个数,无须 停止服务。相比较而言,现有技术针对存储节点并没有全局路由表,而是在 应用层做数据拆分策略,增加存储节点后的数据重新拆分代价很高,需要人 工停机维护操作,不支持自动弹性扩展。

另外,由于本发明将存储和查询架构优化为分布式键-值(Key-Value) 结构,可以避免采用SQL数据库的复杂查询方式,提高查询速度,故而大 大提高了并发访问的强度,尤其适用于确定某个应用程序或者某个网址是否 有害的信息存储和查询;例如,尤其适用于木马云查杀、网址云查杀以及云 安全中心数据索引等场合。再者,由于本发明并不是直接由元数据服务器来 对全局路由表进行处理,而是由代理节点接收用户请求,并对同步至代理节 点本地的全局路由表进行查询处理,这样,就可以将高并发的用户请求分散 到多个代理节点上,由其同时进行查询处理,从而也大大提高了高并发访问 的处理能力。

附图说明

图1是本发明一种分布式键-值查询引擎系统实施例的模块示意图;

图2是本发明一种分布式键-值查询方法实施例的步骤流程图;

图3是本发明一种故障转移方法的步骤流程图;

图4是本发明一种增加物理存储节点的方法的步骤流程图;

图5是本发明一种优选的分布式KEY-VALUE查询引擎系统的结构示意 图;

图6是一种KEY和VBucket之间,VBucket和物理存储节点之间的映 射关系示意图;

图7是本发明一种元数据服务器实施例的模块示意图;

图8是本发明一种代理节点实施例的模块示意图。

具体实施方式

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图 和具体实施方式对本申请作进一步详细的说明。

参照图1,示出了本发明一种分布式键-值查询引擎系统实施例,具体可 以包括:

元数据服务器101,用于维护指向存储节点的全局路由表信息;所述维 护可以包括存储以及相应的修改更新等;

至少一个代理节点102,在图1中示出了X个代理节点,每个代理节点 可以包括:

查询转发模块,用于响应客户端发出的包括目标KEY的请求,基于所 述全局路由表信息,将客户端请求转发给相应的存储节点;

数据转发模块,用于将相应存储节点返回的包括目标Value的回应包传 送给客户端;

至少一个存储节点103,用于基于接收到的客户端请求,从本地存储中 获取所需数据,并发送包括目标Value的回应包给代理节点。在图1中示出 了Y个存储节点。

采用上面的查询引擎系统,能够容纳更加海量的键-值数据,对高并发 访问的适应性更强。其中,元数据服务器101中的全局路由表信息存储有目 标KEY→存储节点的映射关系。当然,该映射关系可以是直接映射,也可 以是间接映射,在本发明的后面实施例描述中,会给出一个间接映射的优选 实现。

在本发明的一个优先实施方式中,所述代理节点102还可以包括:路由 表同步模块,用于将元数据服务器的全局路由表信息同步至本地;其中,所 述查询转发模块基于本地的全局路由表信息进行查询。这样,可以避免每次 查询代理节点都到元数据服务器去请求查询。同时,由于代理节点可以设置 多个,从而可以实现路由查询的并发执行,提高对高并发访问的适应性。当 然,具体同步的时间不需要加以限定,例如,在代理节点开机时同步即可; 同时,也可以在固定时刻进行同步,以防止没有收到更新通知的情况。

在本发明的一个优先实施方式中,所述代理节点102还可以包括:路由 表更新模块,用于当收到元数据服务器的路由表更新通知时,从元数据服务 器获取新的全局路由表信息。当出现某个存储节点故障或者新增存储节点 时,元数据服务器上维护的全局路由表信息都会发生变化,因而,此时可以 通过路由表更新模块更新全局路由表信息。

需要说明的是,存储节点可以采用各种存储介质。例如要求低延迟高并 发的内存哈希表存储引擎,或者容量较高但响应延迟尚可、并发能力一般的 固态硬盘(SSD,Solid State Disk)存储引擎,或者大容量、但响应延迟 高、并发能力差的SAS(Serial attached SCSI)/SATA(Serial Advanced  Technology Attachment)存储引擎。本发明的存储节点作为“引擎”而言, 可以具有接受请求和返回数据的执行能力,当然,还可以具有新增、查找、 更新、删除(CRUD)数据等的执行能力。

在本发明的一个优选实现中,建议采用多级混合存储引擎。具体的,所 述至少一个存储节点包括:用于存储热点数据的高速存储节点,和用于存储 非热点数据的其他类型存储节点;其中,所述高速存储节点包括内存节点或 者固态硬盘节点,所述其他类型存储节点包括SAS/SATA硬盘节点。即基于 不同数据的情况,采用不同的存储介质来组成多级混合存储引擎,以达到最 优效果。

下面本发明给出一种具体的针对客户端请求查询、定位和转发的实现。 其中,所述查询转发模块具体可以包括:哈希子模块,用于基于所接收的包 括目标KEY的客户端请求,通过哈希算法计算目标KEY所在的数据区块; 定位子模块,用于依据计算得到的目标KEY所在的数据区块的标识,查询 所述全局路由表信息,定位相应的存储节点;转发子模块,用于将客户端请 求转发至相应存储节点。

与采用直接映射-查表的方式相比,固定哈希的方法可以有效减少路由 表的大小,提高查询效率。具体的,通常KEY的取值范围很大,假设KEY 的组成为128位MD5哈希值,如果使用直接映射-查表方法,路由表最多需 要由2^128条“KEY-存储节点”映射关系组成,这个是实现中是不现实的。 采用哈希算法计算数据区块,再通过数据区块定位存储节点这种间接映射的 方法,可以有效减少路由表的大小。

在某些情况下,存储节点可能需要增加。则为了在该情形下更好的管理 路由,所述元数据服务器还可以包括:数据同步模块,用于通知所述新增的 存储节点从所选定的存储节点中同步N个数据区块;所述N由所述新增存 储节点的属性参数计算得到;路由表变更模块,用于当所述新增的存储节点 完成数据同步后,生成新的全局路由表信息;第一更新通知模块,用于向代 理节点发送路由表更新通知。

在实际应用中,也可能出现某个存储节点出现故障失效的情况,则为了 及时应对这种情况,所述元数据服务器还包括:监控模块,用于监控各存储 节点的存活状态,当监测到一个存储节点失效时,修改全局路由表信息;所 述修改包括:针对以该失效的存储节点作为主节点的数据区块,将其主节点 重新映射到另一个冗余节点上;第二更新通知模块,用于向代理节点发送路 由表更新通知。

参照图2,示出了本发明一种分布式键-值查询方法实施例,具体可以包 括:

步骤201、接收客户端指向当前代理节点的包括目标KEY的请求;

步骤202、当前代理节点通过查询全局路由表信息,将客户端请求转发 给相应的存储节点;

步骤203、当前代理节点将相应存储节点返回的包括目标Value的回应 包传送给客户端。

在该方法中,全局路由表信息可以存储在其他的服务器上,也可以直接 存储在代理节点上,例如,针对数据量不是特别海量的情况,采用少量甚至 一个代理节点的情况,直接由代理节点来维护全局路由表信息也是可行的; 在各个代理节点之间进行同步维护即可。

当然,优选的,为了提高代理节点处理并发访问的能力,还是采用在另 外的服务器上单独维护全局路由表信息为佳。此时,当前代理节点可以通过 异步线程将维护在服务器上的全局路由表信息同步至本地,在本地进行对全 局路由表信息的查询。

优选的,在存储节点自身或者所存储位置变更时,上面的方法实施例还 可以包括:当收到路由表更新通知时,获取新的全局路由表信息。

在本发明的一个优选实现中,全局路由表信息并非直接存储目标KEY →存储节点的直接映射关系,而是存储了一个间接映射关系“目标KEY所 在的数据区块→存储节点”的,但是可以直接由目标KEY计算得到其所在 的数据区块的标识,这样可以更好的提高全局路由表的查询速度。因为大多 数情况下,标识查询要比“目标KEY”的查询要快的多。

在该实现方案中,所述当前代理节点通过查询全局路由表信息,将客户 端请求转发给相应的存储节点的过程具体包括:基于所接收的包括目标KEY 的客户端请求,通过哈希算法计算目标KEY所在的数据区块;依据计算得 到的目标KEY所在的数据区块标识,查询所述全局路由表信息,定位相应 的存储节点;将客户端请求转发给相应的存储节点。

相应的,参照图3,本发明还提供了一种分布式键-值(Key-Value)查 询引擎系统的故障转移方法,专用于解决存储节点出现故障的情况,包括:

步骤301、监测各存储节点是否存活;其中,同一个数据区块存储在一 个存储主节点和至少一个存储冗余节点上;

步骤302、当监测到一个存储节点失效时,修改全局路由表信息;所述 修改包括:针对以该失效的存储节点作为主节点的数据区块,将其主节点重 新映射到另一个冗余节点上;

步骤303、将新的全局路由表信息更新至各代理节点;所述代理节点用 于响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将 客户端请求转发给相应的存储节点;以及将相应存储节点返回的包括目标 Value的回应包传送给客户端。

传统的关系型数据库,例如MySQL,若数据库服务器出现故障,一般 都需要数据库管理人员将对数据库的访问请求切换到备份服务器上。而本发 明可以实现故障的平滑转移。

另外,参照图4,本发明还提供一种分布式键-值(Key-Value)查询引 擎系统的增加物理存储节点方法,可以包括:

步骤401、接收新增存储节点的注册请求;

步骤402、依据新增存储节点的属性参数,通知所述新增的存储节点从 所选定的存储节点中同步N个数据区块;所述N由所述新增存储节点的属 性参数计算得到;

步骤403、当所述新增的存储节点完成数据同步后,生成新的全局路由 表信息;

步骤404、将新的全局路由表信息更新至代理节点;所述代理节点用于 响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将客 户端请求转发给相应的存储节点;以及将相应存储节点返回的包括目标 Value的回应包传送给客户端。

当然,为了保证对存储节点的管理和控制,还可以增加对存储节点的注 册审核。例如,在接收新增存储节点的注册请求之后,还包括:如果所述新 增存储节点为合法工作节点,则进入下一步,否则,拒绝所述新增存储节点 的加入。

需要说明的是,如果已经将某些数据区块转移到新增的存储节点上了, 则原存储节点上的这些数据区块则可以作为其冗余备份存在,并更新在全局 路由表信息中。当然,原存储节点上的这些数据区块在冗余备份数量足够的 情况下,也可以作为无效数据而删除,降低原存储节点的负荷。

例如,在将新的全局路由表信息更新至代理节点之后,还包括:在所选 定的存储节点的空闲时间,逐步删除其所存储的已同步到所述新增存储节点 的所述N个数据区块。

总之,对于图3和图4所提供的故障转移方法和增加物理存储节点方法, 可以帮助本发明在分布式键-值(Key-Value)查询引擎系统中平滑增加或者 减少机器个数,无须停止服务。增减机器后,数据会自动在多台机器之间重 新达到平滑点(例如通过主节点和冗余节点的配置实现平滑)。

参照图5,示出了本发明一种优选的分布式KEY-VALUE查询引擎系统 的结构示意图。

其中,示出了多个并发请求的客户端。客户端(Client)主要是用于发 起请求。具体的,本发明可以支持多种语言的客户端(C/C++/Python/PHP 等)。

元数据服务器(Config Server):负责维护全局路由表信息,并监控所有 存储节点的存活状态,在存储节点失效和新增存储节点时,元数据服务器起 着关键的协调作用。

代理节点(Storage Proxy):负责响应客户端的请求和请求的转发。根据 元数据服务器上的路由表信息,代理节点可以将客户端的请求转发给下游的 存储节点,并将存储节点的回应包递给客户端。

存储节点(Storage Node):负责数据的实际存储,可以有多种存储引擎 供选择,例如要求低延迟高并发的内存哈希表存储引擎,或者容量较高但响 应延迟尚可、并发能力一般的固态硬盘(SSD)存储引擎,或者大容量、但 响应延迟高、并发能力差的SAS/SATA存储引擎,或者定制化的多级混合存 储引擎。

在图5中,在客户端和存储节点之间,包括Nginx/UDP服务器和代理节 点,当然,Nginx/UDP服务器通常只是分布式通讯系统中所需要的一个传输 设备而已,本领域技术人员也可以采用其他设备,甚至不采用。Nginx/UDP 服务器和代理节点之间也不一定是一一对应的关系。

需要说明的是,在一个实体硬件中可能存在多个代理节点,本发明对此 无需加以限制。并且在图5中还示出了数据区块冗余备份存储的情况。

具体的,图5给出了4个存储节点,其中,

存储节点a是数据区块_0的主节点,数据区块_1的主节点,数据区块 _6的冗余节点,数据区块_7的冗余节点;

存储节点b是数据区块_0的冗余节点,数据区块_1的冗余节点,数据 区块_2的主节点,数据区块_3的主节点;

存储节点c是数据区块_2的冗余节点,数据区块_3的冗余节点,数据 区块_4的主节点,数据区块_5的主节点;

存储节点d是数据区块_4的冗余节点,数据区块_5的冗余节点,数据 区块_6的主节点,数据区块_7的主节点;

这样的存储方式,包括保证在均匀分布的情况下,每个数据区块都可以 存储在一个主节点上,也同时存储在一个冗余节点上。

即,各个物理存储节点都可以即做某几个VBucket(Virtual Bucket;数 据逻辑分区区间,即数据区块的一种)的主节点,又做另外几个VBucket的 冗余节点。存储节点上有独立线程,从主节点上同步所负责冗余VBucket的 新增/修改数据。

在图5中,元数据服务器还可以配置有一个备份的服务器。

下面针对图5所示系统,描述一个从客户端发起请求到收到查询引擎响 应的完整流程的示例。

1)以GET请求为例,客户端向代理节点(Storage Proxy)发起单个KEY 的GET请求,也可以是批量KEY的GET请求。

2)代理节点收到上游客户端的请求后,通过固定哈希算法(例如MD5) 计算KEY所在的VBucket序号,即数据区块区号。

3)代理节点通过KEY所属的VBucket序号,查找全局路由表,定位物 理存储节点(Storage Node)。实现上,查找全局路由表的过程不需要每次都 请求元数据服务器(Config Server),而是代理节点通过一个异步线程将路由 信息同步到本地。

4)代理服务器通过VBucket序号定位到的是一组物理存储节点,其中 第一个节点是主节点,负责该VBucket的所有读取和写入请求,后续为冗余 备份节点。代理服务器将客户端的GET请求转发给主节点。

5)物理存储节点接收到GET请求后,从本地存储引擎中取出KEY对 应的数据,发送应答包给代理节点。

6)代理节点接收到物理存储节点的应答包后,将应答包返回给客户端。

参照图6,示出了KEY和VBucket之间,VBucket和物理存储节点之间 的映射关系示意图。在KEY和VBucket之间,通过固定哈希的方式获取映 射关系,在VBucket和物理存储节点之间,通过查表的方式获取映射关系。

下面描述一个物理存储节点失效的故障转移流程的示例。

1)A节点失效。

2)元数据服务器上有对所有物理存储节点存活状态的实时监控进程。 当发现A节点失效时,即会修改路由表,将A节点作为主节点的VBucket, 其主节点重新映射到下一个冗余节点上。

3)所有代理节点,都会从元数据服务器同步路由表信息。当发现路由 表变更后,后续的请求将依据新的路由表来做路由。

下面描述一个增加一个物理存储节点的流程的示例。

1)新增物理存储节点B,B会向元数据服务器发送一个注册请求。

2)元数据服务器收到注册请求后,确认B是否是工作节点,若不是合 法工作节点则拒绝,若是则进入下面新节点数据准备的流程。

3)假设之前有m个物理存储节点,而VBucket总数为vt,元数据服务 器计算新加入节点可以承载的VBucket个数为number=abs(vt/m+1)。元 数据服务器发起指令通知B从当前活跃的存储节点中同步number个(N个) VBucket。

4)新存储节点B完成VBucket数据同步,通知元数据服务器其准备完 毕。

5)元数据服务器生成一张新的路由表。

6)代理节点收到元数据服务器的路由表更新通知,将后续请求依据新 的路由表路由,至此,新物理节点B正式加到集群当中服务。

因为新增存储节点分担了VBucket,增加了系统容量。在空闲时间,当 前活跃的存储节点会逐步淘汰已经不属于自身的VBucket。

本发明实现了一个由多台机器组成,可容纳海量数据,并可以通过增加 集群机器数量扩大集群数据规模,稳定可靠的键-值存储系统,以及存储之 上的适应高并发访问的网络模型。本发明具有以下的一些创新点:

本发明实现了基于一致性哈希算法的数据分布策略。集群内部有轻量级 的元数据服务器,只存储全局路由表信息,即数据区块区号和存储物理节点 的映射关系,对键的访问请求,会先根据哈希算法计算出数据区块区号,再 通过全局路由表找到所负责的存储物理节点。

本发明的集群内部可以平滑增加或者减少机器个数,无须停止服务。增 减机器后,数据会自动在多台机器之间重新达到平滑点。

本发明支持数据冗余存储。所有数据节点均可以同时作为其他节点的冗 余节点。

本发明的集群对外可以采用支持高并发的网络访问接口,并可以通过增 加代理节点和存储节点的数量提高整个集群的并发能力。代理节点对外通 讯,代理节点和存储节点之间的内部通讯可以优选采用基于IO复用的TCP 网络模型。

本发明还支持存储引擎的定制化。可以根据应用需求,选用内存存储引 擎、或者固态硬盘存储引擎、或者SAS/SATA硬盘的存储引擎;或者可以选 用混用的多级存储引擎,将热数据在高速设备(内存、固态硬盘)上缓存。

总之,本发明可以实现自动化的集群扩容,通过增加集群内部物理存储 节点的数量,内部数据会自动转移到新的存储节点上,从而达到扩大集群的 存储容量和并发访问能力的目的。本发明可以承载海量数据的存储和每日千 亿级别的高并发访问。由其适用于木马云查杀服务、网址云查杀服务、云安 全中心数据索引中心等相关安全产品和后台应用服务中。

参照图7示出了本发明一种元数据服务器实施例,作为本发明方案中的 关键部件,其可以包括:

存储模块701,用于存储反映目标KEY和存储节点映射关系的全局路 由表信息;

全局路由表信息同步模块702,用于将所述全局路由表信息同步到至少 一个代理节点;所述代理节点用于响应客户端发出的包括目标KEY的请求, 基于所述全局路由表信息,将客户端请求转发给相应的存储节点;以及将相 应存储节点返回的包括目标Value的回应包传送给客户端。

在优选实现中,元数据服务器还可以包括:数据同步模块703,用于依 据新增存储节点的属性参数,通知所述新增的存储节点从所选定的存储节点 中同步N个数据区块;所述N由所述新增存储节点的属性参数计算得到; 路由表变更模块704,用于当所述新增的存储节点完成数据同步后,生成新 的全局路由表信息;第一更新通知模块705,用于向代理节点发送路由表更 新通知。

对于具有故障转移功能的元数据服务器而言,其还可以包括:监控模块 706,用于监控各存储节点的存活状态,当监测到一个存储节点失效时,修 改全局路由表信息;所述修改包括:针对以该失效的存储节点作为主节点的 数据区块,将其主节点重新映射到另一个冗余节点上;第二更新通知模块 707,用于向代理节点发送路由表更新通知。

参照图8,示出了本发明一种代理节点实施例,作为本发明方案中的关 键部件,其可以包括:

查询转发模块801,用于响应客户端发出的包括目标KEY的请求,通 过查询全局路由表信息,将客户端请求转发给相应的存储节点;

数据转发模块802,用于将相应存储节点返回的包括目标Value的回应 包传送给客户端。

在优选实现中,代理节点还可以包括:路由表同步模块803,用于将服 务器上的全局路由表信息同步至本地;其中,所述查询转发模块基于本地的 全局路由表信息进行查询。

在优选实现中,代理节点还可以包括:路由表更新模块804,用于当收 到路由表更新通知时,获取新的全局路由表信息。当然,在具体实现中,也 可以直接将路由表更新模块804的功能集成到路由表同步模块803中。

在本发明的一个优选实现方案中,所述查询转发模块801具体可以包括:

哈希子模块8011,用于基于所接收的包括目标KEY的客户端请求,通 过哈希算法计算目标KEY所在的数据区块;

定位子模块8012,用于依据计算得到的目标KEY所在的数据区块标识, 查询所述全局路由表信息,定位相应的存储节点;

转发子模块8013,用于将客户端请求转发至相应存储节点。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明 的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见 即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比 较简单,相关之处参见方法实施例的部分说明即可。

以上对本申请所提供的一种分布式键-值查询引擎系统、分布式键-值查 询方法、代理节点、元数据服务器、增加物理存储节点的方法和一种故障转 移方法进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式 进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思 想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方 式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本 申请的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号