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

文档序号:6549150阅读:139来源:国知局
分布式查询引擎系统和方法及元数据服务器的制造方法
【专利摘要】本申请提供了一种分布式键-值查询引擎系统和查询方法,该系统包括:元数据服务器、至少一个代理节点和至少一个存储节点;其中,所述元数据服务器,用于维护指向存储节点的全局路由表信息;所述代理节点包括:查询转发模块,用于响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将客户端请求转发给相应的存储节点;数据转发模块,用于将相应存储节点返回的包括目标Value的回应包传送给客户端;所述存储节点,用于基于接收到的客户端请求,从本地存储中获取所需数据,并发送包括目标Value的回应包给代理节点。本发明能够实现键-值数据的分布式存储和查询,并且能够容纳海量键-值数据,对高并发访问的适应性更强。
【专利说明】分布式查询引擎系统和方法及元数据服务器
[0001]本发明专利申请是申请日为2011年12月31日、申请号为201110460494.8、名称为“一种分布式键-值查询方法和查询引擎系统”的中国发明专利申请的分案申请。

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

【背景技术】
[0003]对于大规模互联网应用、云计算的支撑而言,一般会使用关系型数据库存储相关数据。
[0004]传统的关系型数据库,通常将某一个应用的某一类信息(例如网站用户信息)都存储在数据库系统的单个库单张表中,对应用程序提供读取和写入操作的通讯接口。实现上,典型的关系型数据库如MySQL,单表的查询和写入操作有一定上限,超过这个上限,SQL查询和写入操作将会变得非常缓慢,磁盘输入/输出(1)模块也会出现瓶颈。在互联网海量数据的今天,传统关系型数据库要承载海量数据,通常的做法就是将数据分成多个库多个表存储,例如网站用户信息数据,可以按取模算法对用户标识(uSer_id)字段计算哈希(hash)值,将不同的用户数据分片到不同数据库,以此来解决单库单表的存储和读写压力问题。
[0005]也就是说,传统的关系型数据库,为支持大容量数据,需要将数据水平拆分到多个库多张表上,确保单张表的记录数是有限的。这样的好处在于减小了索引文件的大小,从而提升查询性能。
[0006]但是,传统的关系型数据库,倾向于使用单台机器来解决存储容量的问题。若要扩容到多台机器,需要在应用层做数据拆分策略。这里存在两个问题,一个是对于每个应用,都需要应用层做数据拆分,且每个应用拆分策略都会有不同,效率低;另一个问题是增加机器后的数据重新拆分代价很高,需要人工停机维护操作,不支持自动弹性扩展。
[0007]其次,传统的关系型数据库,单台机器的并发能力有一定上限,高并发的访问会将机器资源耗尽。不能支持高并发访问的原因之一是关系型数据库在检索时需要做SQL解析操作,对CPU资源的开销大。
[0008]总之,目前需要本领域技术人员迫切解决的一个技术问题是:如何能够提供一种能够容纳海量数据、适应高并发访问的更加优化的存储/查询方案。


【发明内容】

[0009]本申请所要解决的技术问题是提供一种分布式键-值查询方法和查询引擎系统,能够容纳海量键-值数据,对高并发访问的适应性更强。
[0010]为了解决上述问题,本申请公开了一种分布式键-值查询引擎系统,具体可以包括:
[0011]元数据服务器,用于维护指向存储节点的全局路由表信息;
[0012]至少一个代理节点,包括:
[0013]查询转发模块,用于响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将客户端请求转发给相应的存储节点;
[0014]数据转发模块,用于将相应存储节点返回的包括目标Value的回应包传送给客户端;
[0015]至少一个存储节点,用于基于接收到的客户端请求,从本地存储中获取所需数据,并发送包括目标Value的回应包给代理节点。
[0016]优选的,所述代理节点还可以包括:路由表同步模块,用于将元数据服务器的全局路由表信息同步至本地;其中,所述查询转发模块基于本地的全局路由表信息进行查询。
[0017]优选的,所述代理节点还可以包括:路由表更新模块,用于当收到元数据服务器的路由表更新通知时,从元数据服务器获取新的全局路由表信息。
[0018]优选的,所述查询转发模块具体包括:哈希子模块,用于基于所接收的包括目标KEY的客户端请求,通过哈希算法计算目标KEY所在的数据区块;定位子模块,用于依据计算得到的目标KEY所在的数据区块的标识,查询所述全局路由表信息,定位相应的存储节点;转发子模块,用于将客户端请求转发至相应存储节点。
[0019]优选的,所述元数据服务器还可以包括:数据同步模块,用于通知所述新增的存储节点从所选定的存储节点中同步N个数据区块;所述N由所述新增存储节点的属性参数计算得到;路由表变更模块,用于当所述新增的存储节点完成数据同步后,生成新的全局路由表信息;第一更新通知模块,用于向代理节点发送路由表更新通知。
[0020]优选的,所述元数据服务器还可以包括:监控模块,用于监控各存储节点的存活状态,当监测到一个存储节点失效时,修改全局路由表信息;所述修改包括:针对以该失效的存储节点作为主节点的数据区块,将其主节点重新映射到另一个冗余节点上;第二更新通知模块,用于向代理节点发送路由表更新通知。
[0021]优选的,所述存储节点可以包括:用于存储热点数据的高速存储节点,和用于存储非热点数据的其他类型存储节点;其中,所述高速存储节点包括内存节点或者固态硬盘节点,所述其他类型存储节点包括SAS/SATA硬盘节点。
[0022]依据本发明的另一实施例,还公开了一种分布式键-值查询方法,具体可以包括:接收客户端指向当前代理节点的包括目标KEY的请求;当前代理节点通过查询全局路由表信息,将客户端请求转发给相应的存储节点;当前代理节点将相应存储节点返回的包括目标Value的回应包传送给客户端。
[0023]优选的,所述分布式键-值查询方法还可以包括:当前代理节点通过异步线程将维护在服务器上的全局路由表信息同步至本地,在本地进行对全局路由表信息的查询。
[0024]优选的,所述分布式键-值查询方法还可以包括:当收到路由表更新通知时,获取新的全局路由表信息。
[0025]优选的,所述当前代理节点通过查询全局路由表信息,将客户端请求转发给相应的存储节点的过程具体包括:基于所接收的包括目标KEY的客户端请求,通过哈希算法计算目标KEY所在的数据区块;依据计算得到的目标KEY所在的数据区块标识,查询所述全局路由表信息,定位相应的存储节点;将客户端请求转发给相应的存储节点。
[0026]依据本发明的另一实施例,还公开了一种分布式键-值(Key-Value)查询引擎系统的故障转移方法,包括:监测各存储节点是否存活;其中,同一个数据区块存储在一个存储主节点和至少一个存储冗余节点上;当监测到一个存储节点失效时,修改全局路由表信息;所述修改包括:针对以该失效的存储节点作为主节点的数据区块,将其主节点重新映射到另一个冗余节点上;将新的全局路由表信息更新至各代理节点;所述代理节点用于响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将客户端请求转发给相应的存储节点;以及将相应存储节点返回的包括目标Value的回应包传送给客户端。
[0027]依据本发明的另一实施例,还公开了一种分布式键-值(Key-Value)查询引擎系统的增加物理存储节点方法,包括:接收新增存储节点的注册请求;依据新增存储节点的属性参数,通知所述新增的存储节点从所选定的存储节点中同步N个数据区块;所述N由所述新增存储节点的属性参数计算得到;当所述新增的存储节点完成数据同步后,生成新的全局路由表信息;将新的全局路由表信息更新至代理节点;所述代理节点用于响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将客户端请求转发给相应的存储节点;以及将相应存储节点返回的包括目标Value的回应包传送给客户端。
[0028]优选的,该方法,在接收新增存储节点的注册请求之后,还包括:如果所述新增存储节点为合法工作节点,则进入下一步,否则,拒绝所述新增存储节点的加入。
[0029]优选的,该方法,在将新的全局路由表信息更新至代理节点之后,还包括:在所选定的存储节点的空闲时间,逐步删除其所存储的已同步到所述新增存储节点的所述N个数据区块。
[0030]依据本发明的另一实施例,还公开了一种元数据服务器,包括:
[0031]存储模块,用于存储反映目标KEY和存储节点映射关系的全局路由表信息;
[0032]全局路由表信息同步模块,用于将所述全局路由表信息同步到至少一个代理节点;所述代理节点用于响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将客户端请求转发给相应的存储节点;以及将相应存储节点返回的包括目标Value的回应包传送给客户端。
[0033]优选的,元数据服务器还可以包括:数据同步模块,用于依据新增存储节点的属性参数,通知所述新增的存储节点从所选定的存储节点中同步N个数据区块;所述N由所述新增存储节点的属性参数计算得到;路由表变更模块,用于当所述新增的存储节点完成数据同步后,生成新的全局路由表信息;第一更新通知模块,用于向代理节点发送路由表更新通知。
[0034]优选的,元数据服务器还可以包括:监控模块,用于监控各存储节点的存活状态,当监测到一个存储节点失效时,修改全局路由表信息;所述修改包括:针对以该失效的存储节点作为主节点的数据区块,将其主节点重新映射到另一个冗余节点上;第二更新通知模块,用于向代理节点发送路由表更新通知。
[0035]依据本发明的另一实施例,还公开了一种代理节点,可以包括:
[0036]查询转发模块,用于响应客户端发出的包括目标KEY的请求,通过查询全局路由表信息,将客户端请求转发给相应的存储节点;
[0037]数据转发模块,用于将相应存储节点返回的包括目标Value的回应包传送给客户端。
[0038]优选的,所述的代理节点还可以包括:路由表同步模块,用于将服务器上的全局路由表信息同步至本地;其中,所述查询转发模块基于本地的全局路由表信息进行查询。
[0039]优选的,所述的代理节点还可以包括:路由表更新模块,用于当收到路由表更新通知时,获取新的全局路由表息。
[0040]优选的,所述查询转发模块具体包括:
[0041]哈希子模块,用于基于所接收的包括目标KEY的客户端请求,通过哈希算法计算目标KEY所在的数据区块;
[0042]定位子模块,用于依据计算得到的目标KEY所在的数据区块标识,查询所述全局路由表信息,定位相应的存储节点;
[0043]转发子模块,用于将客户端请求转发至相应存储节点。
[0044]与现有技术相比,本申请具有以下优点:
[0045]本发明提出了一种新的分布式键-值查询引擎架构,采用该架构的查询引擎系统和查询方法,能够实现键-值数据的分布式存储和查询,并且能够容纳海量键-值数据,对高并发访问的适应性更强。
[0046]其中,由于本发明采用了全局路由表信息,客户端的数据请求可以通过查询全局路由表进而找到相应的存储物理节点,然后获取所需数据即可。因此,当需要增加物理存储节点时,只需要将该物理存储节点增加的信息更新至全局路由表即可,可以实现平滑增加或者减少物理存储节点的个数,无须停止服务。相比较而言,现有技术针对存储节点并没有全局路由表,而是在应用层做数据拆分策略,增加存储节点后的数据重新拆分代价很高,需要人工停机维护操作,不支持自动弹性扩展。
[0047]另外,由于本发明将存储和查询架构优化为分布式键-值(Key-Value)结构,可以避免采用SQL数据库的复杂查询方式,提高查询速度,故而大大提高了并发访问的强度,尤其适用于确定某个应用程序或者某个网址是否有害的信息存储和查询;例如,尤其适用于木马云查杀、网址云查杀以及云安全中心数据索引等场合。再者,由于本发明并不是直接由元数据服务器来对全局路由表进行处理,而是由代理节点接收用户请求,并对同步至代理节点本地的全局路由表进行查询处理,这样,就可以将高并发的用户请求分散到多个代理节点上,由其同时进行查询处理,从而也大大提高了高并发访问的处理能力。

【专利附图】

【附图说明】
[0048]图1是本发明一种分布式键-值查询引擎系统实施例的模块示意图;
[0049]图2是本发明一种分布式键-值查询方法实施例的步骤流程图;
[0050]图3是本发明一种故障转移方法的步骤流程图;
[0051]图4是本发明一种增加物理存储节点的方法的步骤流程图;
[0052]图5是本发明一种优选的分布式KEY-VALUE查询引擎系统的结构示意图;
[0053]图6是一种KEY和VBucket之间,VBucket和物理存储节点之间的映射关系示意图;
[0054]图7是本发明一种元数据服务器实施例的模块示意图;
[0055]图8是本发明一种代理节点实施例的模块示意图。

【具体实施方式】
[0056]为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和【具体实施方式】对本申请作进一步详细的说明。
[0057]参照图1,示出了本发明一种分布式键-值查询引擎系统实施例,具体可以包括:
[0058]元数据服务器101,用于维护指向存储节点的全局路由表信息;所述维护可以包括存储以及相应的修改更新等;
[0059]至少一个代理节点102,在图1中示出了 X个代理节点,每个代理节点可以包括:
[0060]查询转发模块,用于响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将客户端请求转发给相应的存储节点;
[0061]数据转发模块,用于将相应存储节点返回的包括目标Value的回应包传送给客户端;
[0062]至少一个存储节点103,用于基于接收到的客户端请求,从本地存储中获取所需数据,并发送包括目标Value的回应包给代理节点。在图1中示出了 Y个存储节点。
[0063]采用上面的查询引擎系统,能够容纳更加海量的键-值数据,对高并发访问的适应性更强。其中,元数据服务器101中的全局路由表信息存储有目标KEY—存储节点的映射关系。当然,该映射关系可以是直接映射,也可以是间接映射,在本发明的后面实施例描述中,会给出一个间接映射的优选实现。
[0064]在本发明的一个优先实施方式中,所述代理节点102还可以包括:路由表同步模块,用于将元数据服务器的全局路由表信息同步至本地;其中,所述查询转发模块基于本地的全局路由表信息进行查询。这样,可以避免每次查询代理节点都到元数据服务器去请求查询。同时,由于代理节点可以设置多个,从而可以实现路由查询的并发执行,提高对高并发访问的适应性。当然,具体同步的时间不需要加以限定,例如,在代理节点开机时同步即可;同时,也可以在固定时刻进行同步,以防止没有收到更新通知的情况。
[0065]在本发明的一个优先实施方式中,所述代理节点102还可以包括:路由表更新模块,用于当收到元数据服务器的路由表更新通知时,从元数据服务器获取新的全局路由表信息。当出现某个存储节点故障或者新增存储节点时,元数据服务器上维护的全局路由表信息都会发生变化,因而,此时可以通过路由表更新模块更新全局路由表信息。
[0066]需要说明的是,存储节点可以采用各种存储介质。例如要求低延迟高并发的内存哈希表存储引擎,或者容量较高但响应延迟尚可、并发能力一般的固态硬盘(SSD,SolidState Disk)存储引擎,或者大容量、但响应延迟高、并发能力差的SAS (Serial attachedSCSI)/SATA(Serial Advanced Technology Attachment)存储引擎。本发明的存储节点作为“引擎”而言,可以具有接受请求和返回数据的执行能力,当然,还可以具有新增、查找、更新、删除(CRUD)数据等的执行能力。
[0067]在本发明的一个优选实现中,建议采用多级混合存储引擎。具体的,所述至少一个存储节点包括:用于存储热点数据的高速存储节点,和用于存储非热点数据的其他类型存储节点;其中,所述高速存储节点包括内存节点或者固态硬盘节点,所述其他类型存储节点包括SAS/SATA硬盘节点。即基于不同数据的情况,采用不同的存储介质来组成多级混合存储引擎,以达到最优效果。
[0068]下面本发明给出一种具体的针对客户端请求查询、定位和转发的实现。其中,所述查询转发模块具体可以包括:哈希子模块,用于基于所接收的包括目标KEY的客户端请求,通过哈希算法计算目标KEY所在的数据区块;定位子模块,用于依据计算得到的目标KEY所在的数据区块的标识,查询所述全局路由表信息,定位相应的存储节点;转发子模块,用于将客户端请求转发至相应存储节点。
[0069]与采用直接映射-查表的方式相比,固定哈希的方法可以有效减少路由表的大小,提高查询效率。具体的,通常KEY的取值范围很大,假设KEY的组成为128位MD5哈希值,如果使用直接映射-查表方法,路由表最多需要由2~128条“KEY-存储节点”映射关系组成,这个是实现中是不现实的。采用哈希算法计算数据区块,再通过数据区块定位存储节点这种间接映射的方法,可以有效减少路由表的大小。
[0070]在某些情况下,存储节点可能需要增加。则为了在该情形下更好的管理路由,所述元数据服务器还可以包括:数据同步模块,用于通知所述新增的存储节点从所选定的存储节点中同步N个数据区块;所述N由所述新增存储节点的属性参数计算得到;路由表变更模块,用于当所述新增的存储节点完成数据同步后,生成新的全局路由表信息;第一更新通知模块,用于向代理节点发送路由表更新通知。
[0071]在实际应用中,也可能出现某个存储节点出现故障失效的情况,则为了及时应对这种情况,所述元数据服务器还包括:监控模块,用于监控各存储节点的存活状态,当监测到一个存储节点失效时,修改全局路由表信息;所述修改包括:针对以该失效的存储节点作为主节点的数据区块,将其主节点重新映射到另一个冗余节点上;第二更新通知模块,用于向代理节点发送路由表更新通知。
[0072]参照图2,示出了本发明一种分布式键-值查询方法实施例,具体可以包括:
[0073]步骤201、接收客户端指向当前代理节点的包括目标KEY的请求;
[0074]步骤202、当前代理节点通过查询全局路由表信息,将客户端请求转发给相应的存储节点;
[0075]步骤203、当前代理节点将相应存储节点返回的包括目标Value的回应包传送给客户端。
[0076]在该方法中,全局路由表信息可以存储在其他的服务器上,也可以直接存储在代理节点上,例如,针对数据量不是特别海量的情况,采用少量甚至一个代理节点的情况,直接由代理节点来维护全局路由表信息也是可行的;在各个代理节点之间进行同步维护即可。
[0077]当然,优选的,为了提高代理节点处理并发访问的能力,还是采用在另外的服务器上单独维护全局路由表信息为佳。此时,当前代理节点可以通过异步线程将维护在服务器上的全局路由表信息同步至本地,在本地进行对全局路由表信息的查询。
[0078]优选的,在存储节点自身或者所存储位置变更时,上面的方法实施例还可以包括:当收到路由表更新通知时,获取新的全局路由表信息。
[0079]在本发明的一个优选实现中,全局路由表信息并非直接存储目标KEY —存储节点的直接映射关系,而是存储了一个间接映射关系“目标KEY所在的数据区块一存储节点”的,但是可以直接由目标KEY计算得到其所在的数据区块的标识,这样可以更好的提高全局路由表的查询速度。因为大多数情况下,标识查询要比“目标KEY”的查询要快的多。
[0080]在该实现方案中,所述当前代理节点通过查询全局路由表信息,将客户端请求转发给相应的存储节点的过程具体包括:基于所接收的包括目标KEY的客户端请求,通过哈希算法计算目标KEY所在的数据区块;依据计算得到的目标KEY所在的数据区块标识,查询所述全局路由表信息,定位相应的存储节点;将客户端请求转发给相应的存储节点。
[0081]相应的,参照图3,本发明还提供了一种分布式键-值(Key-Value)查询引擎系统的故障转移方法,专用于解决存储节点出现故障的情况,包括:
[0082]步骤301、监测各存储节点是否存活;其中,同一个数据区块存储在一个存储主节点和至少一个存储冗余节点上;
[0083]步骤302、当监测到一个存储节点失效时,修改全局路由表信息;所述修改包括:针对以该失效的存储节点作为主节点的数据区块,将其主节点重新映射到另一个冗余节点上;
[0084]步骤303、将新的全局路由表信息更新至各代理节点;所述代理节点用于响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将客户端请求转发给相应的存储节点;以及将相应存储节点返回的包括目标Value的回应包传送给客户端。
[0085]传统的关系型数据库,例如MySQL,若数据库服务器出现故障,一般都需要数据库管理人员将对数据库的访问请求切换到备份服务器上。而本发明可以实现故障的平滑转移。
[0086]另外,参照图4,本发明还提供一种分布式键-值(Key-Value)查询引擎系统的增加物理存储节点方法,可以包括:
[0087]步骤401、接收新增存储节点的注册请求;
[0088]步骤402、依据新增存储节点的属性参数,通知所述新增的存储节点从所选定的存储节点中同步N个数据区块;所述N由所述新增存储节点的属性参数计算得到;
[0089]步骤403、当所述新增的存储节点完成数据同步后,生成新的全局路由表信息;
[0090]步骤404、将新的全局路由表信息更新至代理节点;所述代理节点用于响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将客户端请求转发给相应的存储节点;以及将相应存储节点返回的包括目标Value的回应包传送给客户端。
[0091]当然,为了保证对存储节点的管理和控制,还可以增加对存储节点的注册审核。例如,在接收新增存储节点的注册请求之后,还包括:如果所述新增存储节点为合法工作节点,则进入下一步,否则,拒绝所述新增存储节点的加入。
[0092]需要说明的是,如果已经将某些数据区块转移到新增的存储节点上了,则原存储节点上的这些数据区块则可以作为其冗余备份存在,并更新在全局路由表信息中。当然,原存储节点上的这些数据区块在冗余备份数量足够的情况下,也可以作为无效数据而删除,降低原存储节点的负荷。
[0093]例如,在将新的全局路由表信息更新至代理节点之后,还包括:在所选定的存储节点的空闲时间,逐步删除其所存储的已同步到所述新增存储节点的所述N个数据区块。
[0094]总之,对于图3和图4所提供的故障转移方法和增加物理存储节点方法,可以帮助本发明在分布式键-值(Key-Value)查询引擎系统中平滑增加或者减少机器个数,无须停止服务。增减机器后,数据会自动在多台机器之间重新达到平滑点(例如通过主节点和冗余节点的配置实现平滑)。
[0095]参照图5,示出了本发明一种优选的分布式KEY-VALUE查询引擎系统的结构示意图。
[0096]其中,示出了多个并发请求的客户端。客户端(Client)主要是用于发起请求。具体的,本发明可以支持多种语言的客户端(C/C++/Python/PHP等)。
[0097]元数据服务器(Config Server):负责维护全局路由表信息,并监控所有存储节点的存活状态,在存储节点失效和新增存储节点时,元数据服务器起着关键的协调作用。
[0098]代理节点(Storage Proxy):负责响应客户端的请求和请求的转发。根据元数据服务器上的路由表信息,代理节点可以将客户端的请求转发给下游的存储节点,并将存储节点的回应包递给客户端。
[0099]存储节点(Storage Node):负责数据的实际存储,可以有多种存储引擎供选择,例如要求低延迟高并发的内存哈希表存储引擎,或者容量较高但响应延迟尚可、并发能力一般的固态硬盘(SSD)存储引擎,或者大容量、但响应延迟高、并发能力差的SAS/SATA存储引擎,或者定制化的多级混合存储引擎。
[0100]在图5中,在客户端和存储节点之间,包括Nginx/UDP服务器和代理节点,当然,Nginx/UDP服务器通常只是分布式通讯系统中所需要的一个传输设备而已,本领域技术人员也可以采用其他设备,甚至不采用。Nginx/UDP服务器和代理节点之间也不一定是一一对应的关系。
[0101]需要说明的是,在一个实体硬件中可能存在多个代理节点,本发明对此无需加以限制。并且在图5中还示出了数据区块冗余备份存储的情况。
[0102]具体的,图5给出了 4个存储节点,其中,
[0103]存储节点a是数据区块_0的主节点,数据区块_1的主节点,数据区块_6的冗余节点,数据区块_7的冗余节点;
[0104]存储节点b是数据区块_0的冗余节点,数据区块_1的冗余节点,数据区块_2的主节点,数据区块_3的主节点;
[0105]存储节点c是数据区块_2的冗余节点,数据区块_3的冗余节点,数据区块_4的主节点,数据区块_5的主节点;
[0106]存储节点d是数据区块_4的冗余节点,数据区块_5的冗余节点,数据区块_6的主节点,数据区块_7的主节点;
[0107]这样的存储方式,包括保证在均匀分布的情况下,每个数据区块都可以存储在一个主节点上,也同时存储在一个冗余节点上。
[0108]S卩,各个物理存储节点都可以即做某几个VBucket (Virtual Bucket ;数据逻辑分区区间,即数据区块的一种)的主节点,又做另外几个VBucket的冗余节点。存储节点上有独立线程,从主节点上同步所负责冗余VBucket的新增/修改数据。
[0109]在图5中,元数据服务器还可以配置有一个备份的服务器。
[0110]下面针对图5所示系统,描述一个从客户端发起请求到收到查询引擎响应的完整流程的示例。
[0111]I)以GET请求为例,客户端向代理节点(Storage Proxy)发起单个KEY的GET请求,也可以是批量KEY的GET请求。
[0112]2)代理节点收到上游客户端的请求后,通过固定哈希算法(例如MD5)计算KEY所在的VBucket序号,即数据区块区号。
[0113]3)代理节点通过KEY所属的VBucket序号,查找全局路由表,定位物理存储节点(Storage Node) 0实现上,查找全局路由表的过程不需要每次都请求元数据服务器(ConfigServer),而是代理节点通过一个异步线程将路由信息同步到本地。
[0114]4)代理服务器通过VBucket序号定位到的是一组物理存储节点,其中第一个节点是主节点,负责该VBucket的所有读取和写入请求,后续为冗余备份节点。代理服务器将客户端的GET请求转发给主节点。
[0115]5)物理存储节点接收到GET请求后,从本地存储引擎中取出KEY对应的数据,发送应答包给代理节点。
[0116]6)代理节点接收到物理存储节点的应答包后,将应答包返回给客户端。
[0117]参照图6,示出了 KEY和VBucket之间,VBucket和物理存储节点之间的映射关系示意图。在KEY和VBucket之间,通过固定哈希的方式获取映射关系,在VBucket和物理存储节点之间,通过查表的方式获取映射关系。
[0118]下面描述一个物理存储节点失效的故障转移流程的示例。
[0119]I) A节点失效。
[0120]2)元数据服务器上有对所有物理存储节点存活状态的实时监控进程。当发现A节点失效时,即会修改路由表,将A节点作为主节点的VBucket,其主节点重新映射到下一个冗余节点上。
[0121]3)所有代理节点,都会从元数据服务器同步路由表信息。当发现路由表变更后,后续的请求将依据新的路由表来做路由。
[0122]下面描述一个增加一个物理存储节点的流程的示例。
[0123]I)新增物理存储节点B,B会向元数据服务器发送一个注册请求。
[0124]2)元数据服务器收到注册请求后,确认B是否是工作节点,若不是合法工作节点则拒绝,若是则进入下面新节点数据准备的流程。
[0125]3)假设之前有m个物理存储节点,而VBucket总数为vt,元数据服务器计算新加入节点可以承载的VBucket个数为number = abs (vt/m+1)。元数据服务器发起指令通知B从当前活跃的存储节点中同步number个(N个)VBucket。
[0126]4)新存储节点B完成VBucket数据同步,通知元数据服务器其准备完毕。
[0127]5)元数据服务器生成一张新的路由表。
[0128]6)代理节点收到元数据服务器的路由表更新通知,将后续请求依据新的路由表路由,至此,新物理节点B正式加到集群当中服务。
[0129]因为新增存储节点分担了 VBucket,增加了系统容量。在空闲时间,当前活跃的存储节点会逐步淘汰已经不属于自身的VBucket。
[0130]本发明实现了一个由多台机器组成,可容纳海量数据,并可以通过增加集群机器数量扩大集群数据规模,稳定可靠的键-值存储系统,以及存储之上的适应高并发访问的网络模型。本发明具有以下的一些创新点:
[0131]本发明实现了基于一致性哈希算法的数据分布策略。集群内部有轻量级的元数据服务器,只存储全局路由表信息,即数据区块区号和存储物理节点的映射关系,对键的访问请求,会先根据哈希算法计算出数据区块区号,再通过全局路由表找到所负责的存储物理节点。
[0132]本发明的集群内部可以平滑增加或者减少机器个数,无须停止服务。增减机器后,数据会自动在多台机器之间重新达到平滑点。
[0133]本发明支持数据冗余存储。所有数据节点均可以同时作为其他节点的冗余节点。
[0134]本发明的集群对外可以采用支持高并发的网络访问接口,并可以通过增加代理节点和存储节点的数量提高整个集群的并发能力。代理节点对外通讯,代理节点和存储节点之间的内部通讯可以优选采用基于1复用的TCP网络模型。
[0135]本发明还支持存储引擎的定制化。可以根据应用需求,选用内存存储引擎、或者固态硬盘存储引擎、或者SAS/SATA硬盘的存储引擎;或者可以选用混用的多级存储引擎,将热数据在高速设备(内存、固态硬盘)上缓存。
[0136]总之,本发明可以实现自动化的集群扩容,通过增加集群内部物理存储节点的数量,内部数据会自动转移到新的存储节点上,从而达到扩大集群的存储容量和并发访问能力的目的。本发明可以承载海量数据的存储和每日千亿级别的高并发访问。由其适用于木马云查杀服务、网址云查杀服务、云安全中心数据索引中心等相关安全产品和后台应用服务中。
[0137]参照图7示出了本发明一种元数据服务器实施例,作为本发明方案中的关键部件,其可以包括:
[0138]存储模块701,用于存储反映目标KEY和存储节点映射关系的全局路由表信息;
[0139]全局路由表信息同步模块702,用于将所述全局路由表信息同步到至少一个代理节点;所述代理节点用于响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将客户端请求转发给相应的存储节点;以及将相应存储节点返回的包括目标Value的回应包传送给客户端。
[0140]在优选实现中,元数据服务器还可以包括:数据同步模块703,用于依据新增存储节点的属性参数,通知所述新增的存储节点从所选定的存储节点中同步N个数据区块;所述N由所述新增存储节点的属性参数计算得到;路由表变更模块704,用于当所述新增的存储节点完成数据同步后,生成新的全局路由表信息;第一更新通知模块705,用于向代理节点发送路由表更新通知。
[0141]对于具有故障转移功能的元数据服务器而言,其还可以包括:监控模块706,用于监控各存储节点的存活状态,当监测到一个存储节点失效时,修改全局路由表信息;所述修改包括:针对以该失效的存储节点作为主节点的数据区块,将其主节点重新映射到另一个冗余节点上;第二更新通知模块707,用于向代理节点发送路由表更新通知。
[0142]参照图8,示出了本发明一种代理节点实施例,作为本发明方案中的关键部件,其可以包括:
[0143]查询转发模块801,用于响应客户端发出的包括目标KEY的请求,通过查询全局路由表信息,将客户端请求转发给相应的存储节点;
[0144]数据转发模块802,用于将相应存储节点返回的包括目标Value的回应包传送给客户端。
[0145]在优选实现中,代理节点还可以包括:路由表同步模块803,用于将服务器上的全局路由表信息同步至本地;其中,所述查询转发模块基于本地的全局路由表信息进行查询。
[0146]在优选实现中,代理节点还可以包括:路由表更新模块804,用于当收到路由表更新通知时,获取新的全局路由表信息。当然,在具体实现中,也可以直接将路由表更新模块804的功能集成到路由表同步模块803中。
[0147]在本发明的一个优选实现方案中,所述查询转发模块801具体可以包括:
[0148]哈希子模块8011,用于基于所接收的包括目标KEY的客户端请求,通过哈希算法计算目标KEY所在的数据区块;
[0149]定位子模块8012,用于依据计算得到的目标KEY所在的数据区块标识,查询所述全局路由表信息,定位相应的存储节点;
[0150]转发子模块8013,用于将客户端请求转发至相应存储节点。
[0151]本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0152]以上对本申请所提供的一种分布式键-值查询引擎系统、分布式键-值查询方法、代理节点、元数据服务器、增加物理存储节点的方法和一种故障转移方法进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
【权利要求】
1.一种分布式信息查询方法,用于查询存储节点中存储的信息,该方法包括: 接收客户端发送的包括目标KEY的请求; 基于所接收的包括目标KEY的请求,通过哈希算法计算目标KEY所在的数据区块; 依据计算得到的目标KEY所在的数据区块标识,查询所述全局路由表信息以定位相应的存储节点,其中,所述全局路由表信息包括目标KEY所在的数据区块到存储节点的映射关系; 将客户端请求转发给相应的存储节点; 将相应存储节点返回的包括目 标Value的回应包传送给客户端。
2.如权利要求1所述的方法,还包括: 监控各存储节点的存活状态; 当监测到一个存储节点失效时,修改全局路由表信息。
3.如权利要求2所述的方法,其中,所述修改包括:更新所述全局路由表信息中存储的目标KEY所在的数据区块到存储节点的映射关系,针对以该失效的存储节点作为主节点的数据区块,将其主节点重新映射到另一个冗余节点上。
4.如权利要求1至3中任一项所述的方法,还包括:通过异步线程将维护在服务器上的全局路由表信息同步至本地,在本地进行对全局路由表信息的查询。
5.如权利要求1至4中任一项所述的方法,还包括: 当收到路由表更新通知时,获取新的全局路由表信息。
6.如权利要求1至5中任一项所述的方法,还包括: 接收新增存储节点的注册请求; 依据新增存储节点的属性参数,通知所述新增的存储节点从所选定的存储节点中同步N个数据区块,其中,所述N由所述新增存储节点的属性参数计算得到; 当所述新增的存储节点完成数据同步后,生成新的全局路由表信息。
7.如权利要求6所述的方法,其中,在接收新增存储节点的注册请求之后,还包括: 如果所述新增存储节点为非法工作节点,拒绝所述新增存储节点的加入。
8.如权利要求6所述的方法,还包括: 在所选定的存储节点的空闲时间,逐步删除其所存储的已同步到所述新增存储节点的所述N个数据区块。
9.一种分布式查询引擎系统,其包括: 元数据服务器,用于维护指向存储节点的全局路由表信息; 至少一个代理节点,包括: 查询转发模块,用于响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将客户端请求转发给相应的存储节点; 数据转发模块,用于将相应存储节点返回的包括目标Value的回应包传送给客户端;至少一个存储节点,用于基于接收到的客户端请求,从本地存储中获取所需数据,并发送包括目标Value的回应包给代理节点; 其中,所述元数据服务器包括: 数据同步模块,用于通知所述新增的存储节点从所选定的存储节点中同步N个数据区块,所述N由所述新增存储节点的属性参数计算得到;路由表变更模块,用于当所述新增的存储节点完成数据同步后,生成新的全局路由表信息; 第一更新通知模块,用于向代理节点发送路由表更新通知。
10.根据权利要求9所述的系统,其中,所述代理节点还包括: 路由表同步模块,用于将元数据服务器的全局路由表信息同步至本地; 其中,所述查询转发模炔基于本地的全局路由表信息进行查询。
11.根据权利要求10所述的系统,其中,所述代理节点还包括: 路由表更新模块,用于当收到元数据服务器的路由表更新通知时,从元数据服务器获取新的全局路由表信息。
12.根据权利要求9所述的系统,其中,所述查询转发模块具体包括: 哈希子模块,用于基于所接收的包括目标KEY的客户端请求,通过哈希算法计算目标KEY所在的数据区块; 定位子模块,用于依据计算得到的目标KEY所在的数据区块的标识,查询所述全局路由表信息,定位相应的存储节点; 转发子模块,用于将客户端请求转发至相应存储节点。
13.根据权利要求9至12中任一项所述的系统,其中,所述元数据服务器还包括: 监控模块,用于监控各存储节点的存活状态,当监测到一个存储节点失效时,修改全局路由表信息;所述修改包括:针对以该失效的存储节点作为主节点的数据区块,将其主节点重新映射到另一个冗余节点上; 第二更新通知模块,用于向代理节点发送路由表更新通知。
14.根据权利要求9至13中任一项所述的系统,其中,所述至少一个存储节点包括: 用于存储热点数据的高速存储节点,和用于存储非热点数据的其他类型存储节点; 其中,所述高速存储节点包括内存节点或者固态硬盘节点,所述其他类型存储节点包括SAS/SATA硬盘节点。
15.一种元数据服务器,其包括: 存储模块,用于存储反映目标KEY和存储节点映射关系的全局路由表信息; 全局路由表信息同步模块,用于将所述全局路由表信息同步到至少一个代理节点,其中,所述代理节点用于响应客户端发出的包括目标KEY的请求,基于所述全局路由表信息,将客户端请求转发给相应的存储节点,以及将相应存储节点返回的包括目标Value的回应包传送给客户端; 数据同步模块,用于依据新增存储节点的属性参数,通知所述新增的存储节点从所选定的存储节点中同步N个数据区块;所述N由所述新增存储节点的属性参数计算得到; 路由表变更模块,用于当所述新增的存储节点完成数据同步后,生成新的全局路由表信息。
16.根据权利要求15所述的元数据服务器,还包括: 监控模块,用于监控各存储节点的存活状态,当监测到一个存储节点失效时,修改全局路由表信息;所述修改包括:针对以该失效的存储节点作为主节点的数据区块,将其主节点重新映射到另一个冗余节点上。
17.根据权利要求15或16所述的元数据服务器,还包括:第一更新通知模块,用于向代理节点发送路由表更新通知。
【文档编号】G06F17/30GK104050249SQ201410256090
【公开日】2014年9月17日 申请日期:2011年12月31日 优先权日:2011年12月31日
【发明者】杨康, 谢冉 申请人:北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1