CN111274310A - 一种分布式数据缓存方法及系统 - Google Patents
一种分布式数据缓存方法及系统 Download PDFInfo
- Publication number
- CN111274310A CN111274310A CN201811481786.8A CN201811481786A CN111274310A CN 111274310 A CN111274310 A CN 111274310A CN 201811481786 A CN201811481786 A CN 201811481786A CN 111274310 A CN111274310 A CN 111274310A
- Authority
- CN
- China
- Prior art keywords
- node
- data
- cache
- cache data
- backup
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
本发明实施例提供一种分布式数据缓存方法及系统,包括:根据一致性哈希算法得到多个节点的节点哈希值和多个缓存数据的缓存数据哈希值,并将多个节点哈希值和多个缓存数据哈希值映射在0至2^32的虚拟圆上;根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上;根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端。本发明实施例通过一致性哈希算法对缓存数据进行分配,最大限度地抑制数据重新分布范围,降低了数据同步压力,提高了分布式数据缓存系统的性能和扩展性。
Description
技术领域
本发明实施例涉及数据业务技术领域,尤其涉及一种分布式数据缓存方法及系统。
背景技术
随着互联网应用规模越来越大,IT支撑系统面对大量并发请求的处理能力越来越重要,在传统web,应用和数据库三层系统架构中,数据库层CPU资源和IO性能会成为整个应用系统瓶颈,通过数据缓存技术当第一次请求时访问数据库层查询数据,同时将数据缓存起来,再有相同数据请求时,直接从缓存中返回数据,减小了数据库层的压力,提升应用访问速度,同时有效地降低了数据层的访问负载,提高系统性能。
互联网发展和网络用户的不断增加,单台缓存服务器的性能已无法满足大量并发请求,这种情况下需要使用服务器集群技术,横向扩展CPU和内存等性能来实现缓存线性扩展。其中,Redis和Memcached是一个开源的、高性能、分布式的内存对象缓存系统,用于动态Web应用以减轻数据库的负载,通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了系统访问的速度。JBossCache是一款企业级JAVA事务缓存集群系统,它通过自动复制缓存数据,并且在集群中的服务器之间进行缓存数据的同步。OScache是一种页面缓存系统,它提供了在现有JSP页面之内实现快速内存缓冲的功能,可以整页或者指定网页某一部分缓存,并指定过期时间,这样在此时间段里面访问的数据都是一样的。EhCache是一种广泛使用的开源Java分布式缓存,主要面向通用缓存Java EE和轻量级容器,主要是对数据库访问的缓存,相同的查询语句只需查询一次数据库,从而提高了查询的速度。
然而,现有技术提供的集群功能是非常有限,当集群节点变化时,缓存数据均通过客户端进行重新分配,存在严重性能问题。因此,现在亟需一种分布式数据缓存方法及系统来解决上述问题。
发明内容
针对现有技术存在的问题,本发明实施例提供一种分布式数据缓存方法及系统。
第一方面,本发明实施例提供了一种分布式数据缓存方法,包括:
根据一致性哈希算法得到多个节点的节点哈希值和多个缓存数据的缓存数据哈希值,并将多个节点哈希值和多个缓存数据哈希值映射在0至2^32的虚拟圆上;
根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上;
根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端。
第二方面,本发明实施例提供了一种分布式数据缓存系统,包括:
缓存数据分布模块,用于根据一致性哈希算法得到多个节点的节点哈希值和多个缓存数据的缓存数据哈希值,并将多个节点哈希值和多个缓存数据哈希值映射在0至2^32的虚拟圆上;
处理模块,用于根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上;
查询模块,用于根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所提供的方法的步骤。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的方法的步骤。
本发明实施例提供的一种分布式数据缓存方法及系统,通过一致性哈希算法对缓存数据进行分配,最大限度地抑制数据重新分布范围,降低了数据同步压力,避免了分布式集群节点因扩缩过程导致服务性能下降的问题,提高了分布式数据缓存系统的性能和扩展性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的分布式数据缓存方法的流程示意图;
图2为本发明实施例提供的分布式缓存数据的分布示意图;
图3为本发明实施例提供的集群新增节点数据的分布示意图;
图4为本发明实施例提供的分布式缓存数据的查询流程示意图;
图5为本发明实施例提供的集群新增节点的示意图;
图6为本发明实施例提供的集群节点失效后的数据同步示意图;
图7为本发明实施例提供的分布式数据缓存系统的结构示意图;
图8为本发明实施例提供的电子设备结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
随着互联网发展和网络用户的不断增加,单台缓存服务器的性能已无法满足大量并发请求,这种情况下需要使用服务器集群技术,横向扩展CPU和内存等性能来实现缓存线性扩展,目前在用的缓存产品有Redis,Memcached,redis,JBoss Cache,OScache和Ehcache等。但是,现有技术方案主要存在如下问题:
Memcached实现分布式是通过客户端按照分布式算法把数据保存到不同的服务端,服务端没有分布式功能,集群内节点之间不能相互通信和传输数据,当集群节点变化时,缓存数据均通过客户端进行重新分配,存在严重性能问题。同时在可靠性方面,Memcached不支持冗余备份,当节点故障宕机,该节点所保存的数据将丢失,无法恢复。
Redis实现了分布式集群,通过Master-Slave实现高可用,同时具备可扩展、分布式和容错等特性,但由于Slave节点长期空闲,资源存在严重浪费,资源利用效率低,特别面对高并发访问并且资源不足时候。
JBossCache可靠性方面支持两种冗余策略:全局复制和Buddy复制,全局复制将数据复制给集群所有节点,保证在失败转移时可以转移到集群中任何一个节点,但它限制了系统伸缩性;Buddy复制则挑选特定节点担当备份数据节点,但作为冗余备份的节点是通过其xml文件设置的,当备份节点失效时,就无法启动新的节点作为失效节点。
OSCache提供的集群功能是非常有限的,无法让缓存中数据在各个节点间复制。
Ehcache是一个Java语言开发的简单缓存系统,没有提供冗余备份和失败恢复功能。
图1为本发明实施例提供的分布式数据缓存方法的流程示意图,如图1所示,本发明实施例提供了一种分布式数据缓存方法,包括:
步骤101,根据一致性哈希算法得到多个节点的节点哈希值和多个缓存数据的缓存数据哈希值,并将多个节点哈希值和多个缓存数据哈希值映射在0至2^32的虚拟圆上;
步骤102,根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上;
步骤103,根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端。
在本发明实施例中,首先通过步骤101,根据一致性哈希算法得到多个节点的节点哈希值和多个缓存数据的缓存数据哈希值,并将多个节点哈希值和多个缓存数据哈希值映射在0至2^32的虚拟圆上。在本发明实施例中,根据一致性哈希算法(Consistent Hashing)把缓存数据分布到集群中的各个节点上。首先将一个缓存数据映射为一个32位的哈希值,使其映射在0至2^32的数值空间,并将这个数值空间看作为一个首尾相接的虚拟圆,图2为本发明实施例提供的分布式缓存数据的分布示意图,如图2所示,通过一致性哈希环数据结构实现缓存数据到缓存服务器节点的哈希映射。具体地,通过一致性哈希算法计算出集群中所有节点的节点哈希值,并将每个节点的IP地址作为哈希函数的键,将计算出的所有节点哈希值映射到0至2^32的虚拟圆上。然后使用相同函数关系式的一致性哈希算法计算出缓存数据键的缓存数据哈希值,并映射到虚拟圆上。
然后,通过步骤102,根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上。在本发明实施例中,从缓存数据键映射到的初始位置开始,在虚拟圆顺时针方向开始查找,将缓存数据保存在查找到的第一个缓存节点上,作为该缓存数据的主节点。如果超过2^32的数值空间未获取到相应节点进行缓存,则把缓存数据保存在虚拟圆上第一个节点中。同时,将主节点顺时针方向的下一个节点作为该缓存数据的备份节点。可参考图2所示,obj2缓存数据保存在其映射位置顺时针方向下一个节点nodeB上,nodeC作为其备份节点,obj3保存在其映射位置顺时针方向下一个节点nodeC,nodeA作为其备份节点,若obj1映射到的位置超过2^32还未找到缓存节点,则将obj1保存在第一个节点nodeB上,并将nodeC作为备份节点。这样集群中每个节点既是主节点对外提供服务,有效利用服务器资源,同时每个节点也作为其他节点的备份节点,为集群提供高可靠性。
进一步地,图3为本发明实施例提供的集群新增节点数据的分布示意图,如图3所示,当虚拟圆中新增节点nodeD时,并映射到nodeA和nodeB之间,根据一致性哈希算法将原缓存在nodeB的obj1缓存数据重新分布在nodeD上进行保存,由于只对nodeA和nodeD节点之间的缓存数据进行重新分布,而其余节点的缓存数据均不需要重新分布。因此,通过一致性哈希算法最大限度抑制了键的重新分布,有效降低了集群节点伸缩给系统造成的数据重新分布压力,增加了缓存系统的可靠性。
最后,通过步骤103,根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端。在本发明实施例中,当接收到查询数据服务请求后,首先通过一致性哈希算法得到缓存有目标数据的主备节点,再通过动态负载均衡策略从主备节点中确定请求目标节点,从而将请求目标节点中的缓存数据发送到提交查询服务请求的目标终端。
本发明实施例提供的分布式数据缓存方法,通过一致性哈希算法对缓存数据进行分配,最大限度地抑制数据重新分布范围,降低了数据同步压力,避免了分布式集群节点因扩缩过程导致服务性能下降的问题,提高了分布式数据缓存系统的性能和扩展性。
在上述实施例的基础上,在所述根据一致性哈希算法得到多个节点的节点哈希值和多个缓存数据的缓存数据哈希值,并将多个节点哈希值和多个缓存数据哈希值映射在0至2^32的虚拟圆上之前,所述方法还包括:
对配置信息进行初始化处理,以得到缓存节点集群和多个缓存数据,所述缓存节点集群包括多个节点,每个节点包括一个主缓存区和一个备份缓存区。
在本发明实施例中,首先对全局配置信息及状态进行初始化处理,例如,集群初始配置、事件状态、服务器配置选项和网络连接等。同时创建缓存对象,包括服务器节点、数据对象和内存等数据结构,得到缓存节点集群和多个缓存数据。在本发明实施例中,在初始化处理之后,加载各项配置文件,例如,数据库配置、服务器网络、端口、缓存数据的生存周期值(Time to Live,简称TTL)、内存初始比例限制、负载均衡回收策略、系统日志选项等配置信息,并创建daemon进程和相应pid文件。
在上述实施例的基础上,所述根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端,包括:
根据一致性哈希算法对各节点进行查询,得到目标缓存数据的目标主节点和目标备份节点;
根据动态负载均衡策略从所述目标主节点和所述目标备份节点中确定目标缓存节点,将目标缓存节点中的缓存数据发送到目标终端。
在本发明实施例中,当接收到查询数据服务请求后,首先通过一致性哈希算法得到缓存有目标数据的主备节点,再通过动态负载均衡策略从主备节点中确定请求目标节点,从而将请求目标节点中的缓存数据发送到提交查询服务请求的目标终端。其中,分布式缓存的负载均衡是基于负载均衡算法实现的应用层软负载分发,通过负载均衡将部分查询请求分发到分布式缓存备份节点,对于高并发访问系统,特别是电渠系统,基于主备负载并发机制,一方面可以有效降低主节点处理压力,提高系统整体处理能力,另一方面有效利用备份节点资源,在本发明实施例中,负载均衡策略包括轮训策略(Round Robin)、最小连接数LC(Least Connection)和最短响应时间LRT(Least Response Time)。
本发明实施例通过集群内所有主备节点以及所有节点上主备缓存区,同时对外提供服务,基于负载均衡实现主备缓存并行查询,有效降低主缓存区压力,同时最大限度地利用了服务器所有资源,在保障系统安全可靠同时,大大提高了缓存系统处理性能。
在上述实施例的基础上,在所述根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端之前,所述方法还包括:
基于缓存数据的生存周期值和更新信息对任意节点的缓存数据进行同步处理。
在本发明实施例中,在缓存节点中插入数据数据时,赋予缓存数据一个生存周期值(TTL),当有请求任务需要查询此缓存数据时,首先查看缓存数据的TTL是否过期,如果过期,就从本地数据库中直接查询数据,并更新主节点和备份节点中的缓存数据;另外,每个节点的后台会启动一个线程来检测本地缓存中的缓存数据是否过期,如果过期,直接将缓存数据删除,并把这个过期消息发送给备份节点。进一步地,当分布式缓存中有数据更新或删除时,先根据一致性哈希算法找到保存该数据的主节点及备份节点,然后把更新或删除消息发送给主节点和备份节点,实现缓存数据同步更新或删除。
图4为本发明实施例提供的分布式缓存数据的查询流程示意图,如图4所示,分布式缓存查询步骤如下:
步骤401,接收到查询请求任务;
步骤402,根据一致性哈希算法从分布式集群中查询到任务对应的主备节点;
步骤403,根据动态负载均衡策略得到主节点和备份节点目前的负载情况,选取满足负载条件的节点作为目标节点;
步骤404,对目标节点中的缓存数据进行读取分析;
步骤405,若目标节点中保存有任务查询请求的缓存数据,则至步骤406,若没有,至步骤408;
步骤406,判断目标节点中的缓存数据的TTL是否过期,若未过期,则至步骤407,若过期,至步骤408;
步骤407,将目标节点的缓存数据发送到查询请求终端;
步骤408,从数据库中直接进行查询任务对应的数据,并通过步骤407,将数据库中的数据直接发送到查询请求终端;
步骤409,将数据库中查询到的请求任务对应的数据,写入到节点中或者对TTL过期的节点进行更新处理。
在本发明实施例中,当目标终端发起数据查询请求后,如果节点缓存中存在数据,再查看数据TTL是否过期,如果过期,则从本地数据库中查询对应数据,并更新主节点和备份节点中的缓存数据,如果未过期,则直接将数据发送到目标终端;如果待查询的数据不存在,则直接从本地数据库中查询相应的数据并将数据发送到目标终端,同时把此次查询结果对应的数据缓存到主节点和备份节点中,完成缓存数据的同步。
在上述实施例的基础上,所述根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上,包括:
若任意节点的缓存空间已存满缓存数据,则对节点进行替换算法处理,以使得新增缓存数据缓存到节点中,所述替换算法包括先进先出算法、最近最少使用算法和最不经常使用算法。
在本发明实施例中,当节点的缓存空间已经趋于饱和状态,通过缓存替换算法将节点缓存空间中的缓存数据进行替换,从而使得新增缓存数据缓存到节点中,提高分布式缓存数据的有效性。其中,先进先出算法(FIFO),该算法进行数据替换时,从缓存中选择更新时间或者创建时间最早的缓存数据进行替换;最近最少使用算法(LRU),该算法进行数据替换时,选择最近最少使用的缓存数据进行,适合具有高局部性的数据访问模式;最不经常使用算法(LFU),该算法选择缓存中被最少访问的缓存数据进行替换,适合具有不相关访问模型的模式。
在上述实施例的基础上,通过对缓存数据进行注册监听器,以使得各节点之间进行数据通信。当节点的本地缓存中有数据需要更新时,这时会产生一个数据更新的事件,并将该事件告知监听器;监听器在收到消息后,将更新消息封装成一个事件对象发送给集群中的其它节点。当集群中的节点完成初始化后,缓存通信进程根据配置文件信息,监听本地节点的某TCP端口,当此端口有任务请求消息传来时,从收到的消息中提取请求任务对应的缓存数据相关信息,包括名称、事件的类型、数据对象的键和值;最后根据缓存数据相关信息到缓存数据对应的缓存节点,从而执行任务请求信息中相应的任务事件。
在上述实施例的基础上,在所述根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上之后,所述方法还包括:
根据一致性哈希算法将新增节点映射到所述虚拟圆上,并将所述新增节点在顺时针方向上的下个节点作为迁移同步节点;
将所述迁移同步节点的主缓存区中的主缓存数据同步到所述新增节点的主缓存区,并将所述主缓存数据转移到所述迁移同步节点的备份缓存区,同时将所述迁移同步节点的对应备份节点中备份的所述主缓存数据进行删除处理;
若所述迁移同步节点的备份缓存区中的缓存数据不是所述新增节点的备份数据,则将备份数据发送到所述新增节点的备份缓存区进行缓存,同时将所述迁移同步节点的备份缓存区中的缓存数据进行删除。
在本发明实施例中,当分布式缓存集群中有新增节点加入时,在新增节点初始化之后,通过一致性哈希算法将新增节点映射在虚拟圆上,图5为本发明实施例提供的集群新增节点的示意图,如图5所示,根据新增节点nodeE映射在虚拟圆上的位置,只需迁移目前存储在nodeC和nodeD之间的缓存数据到新增节点,其中,nodeD节点作为本次的迁移同步节点。随后向其它所有节点发送一条消息,通知其它节点有新增节点加入到虚拟圆上,以使得其他节点把新增节点的信息加入到配置信息中。同时nodeD节点接收到全量同步数据的请求,准备向nodeE节点进行数据迁移。
在nodeD节点接收到全量同步数据的请求之后,首先nodeD节点先判断缓存数据映射在虚拟圆的位置,如果是在nodeE节点的范围,就把该缓存数据封装成消息发送给nodeE节点,同时把该缓存数据存储到备份缓存区中,并删除nodeD节点主缓存区及其备份节点中的缓存数据,直至nodeD节点所有缓存数据检测完成;接着,nodeD节点对本节点备份缓存区中原缓存数据进行检测,如果是nodeE节点对应的备份缓存数据,则不作处理;否则将备份数据发送给nodeE节点,nodeE节点把数据放入自己的备份缓存区中,同时nodeD节点从本机备份缓存区中删除这些数据,直到所有备份数据检测完成。
本发明实施例根据一致性哈希算法,通过nodeD节点将nodeC和nodeE之间的缓存数据同步到新增节点nodeE中,不需要其他节点进行全量同步,因此数据重分配范围较小,并且同步过程只涉及nodeD节点,集群中其他节点都无影响,使得集群整体性能影响很小,提高了缓存系统处理性能。
在上述实施例的基础上,在所述根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上之后,所述方法还包括:
若任意节点出现故障时,则故障节点对应的备份节点将主缓存区和备份缓存区的缓存数据进行合并处理,并将合并后的缓存数据保存在备份节点的主缓存区;
将合并后的缓存数据缓存到备份节点顺时针的下一个节点的备份缓存区,同时将备份节点逆时针的上一个节点主缓存区的缓存数据保存到备份缓存区。
在本发明实施例中,图6为本发明实施例提供的集群节点失效后的数据同步示意图,如图6所示,当分布式缓存集群中nodeE节点突然宕机发生故障,导致分布式缓存集群中减少一个缓存节点。当nodeB节点收到一条数据查询请求后,该数据位于nodeE节点上,nodeB向nodeE发送一条请求消息,在等待一段时间后,没有收到nodeE节点的任何回复,重复向nodeE发送两次请求,如果仍收不到回复,便向nodeE节点的备份节点nodeA请求数据,nodeA节点发送数据给nodeB节点,nodeB收到数据后,通知nodeA节点nodeE节点可能出现故障。随后,nodeA节点向nodeE节点发送一条询问消息,如果收到回复消息,说明nodeE节点正常;如果未收到后恢复消息,在等待一段时间后,又重复发送多次询问消息,都收不到nodeE节点的回复消息,则确定nodeE节点已失效。
在确定主节点nodeE失效后,备份节点nodeA通过将本地备份缓存区中的数据(根据一致性哈希算法可知是nodeD和nodeE节点间数据)转移到本地主缓存区中,和主缓存区中的数据进行合并,然后更新nodeA节点的备份节点nodeB的备份缓存区的数据,实现备份节点的快速接管。在备份节点nodeA节点接管完成后,向所有其它节点发送nodeE失效消息,其他节点从配置信息中删除nodeE节点的信息,同时将nodeA节点备份缓存区中的nodeE节点的缓存数据进行删除。最后,nodeA节点向虚拟圆逆时针方向的新主节点nodeD发送备份数据请求,nodeD节点在接收到消息后,查看备份节点是否是nodeA节点,若nodeA节点是其备份节点,nodeD节点向nodeA节点发送备份数据同步。
本发明实施例通过主备节点数据同步和高效的接管机制,在主节点失效后,备份节点只需将本地备份缓存区数据转移到主缓存区即完成主、备接管和故障恢复,实现数据冗余备份和故障快速恢复,有效提升了缓存系统的安全可靠性。
图7为本发明实施例提供的分布式数据缓存系统的结构示意图,如图7所示,本发明实施例提供了一种分布式数据缓存系统,包括:缓存数据分布模块701、处理模块702和查询模块703,其中,缓存数据分布模块701用于根据一致性哈希算法得到多个节点的节点哈希值和多个缓存数据的缓存数据哈希值,并将多个节点哈希值和多个缓存数据哈希值映射在0至2^32的虚拟圆上;处理模块702用于根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上;查询模块703用于根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端。
本发明实施例提供的分布式数据缓存系统,通过一致性哈希算法对缓存数据进行分配,最大限度地抑制数据重新分布范围,降低了数据同步压力,避免了分布式集群节点因扩缩过程导致服务性能下降的问题,提高了分布式数据缓存系统的性能和扩展性。
在上述实施例的基础上,所述系统还包括:分布式缓存管理模块,用于对配置信息进行初始化处理,以得到缓存节点集群和多个缓存数据,所述缓存节点集群包括多个节点,每个节点包括一个主缓存区和一个备份缓存区。
在上述实施例的基础上,所述系统还包括:可靠性服务模块,用于根据一致性哈希算法将新增节点映射到所述虚拟圆上,并将所述新增节点在顺时针方向上的下个节点作为迁移同步节点;将所述迁移同步节点的主缓存区中的主缓存数据同步到所述新增节点的主缓存区,并将所述主缓存数据转移到所述迁移同步节点的备份缓存区,同时将所述迁移同步节点的对应备份节点中备份的所述主缓存数据进行删除处理;若所述迁移同步节点的备份缓存区中的缓存数据不是所述新增节点的备份数据,则将备份数据发送到所述新增节点的备份缓存区进行缓存,同时将所述迁移同步节点的备份缓存区中的缓存数据进行删除。
在上述实施例的基础上,所述可靠性服务模块还用于若任意节点出现故障时,则故障节点对应的备份节点将主缓存区和备份缓存区的缓存数据进行合并处理,并将合并后的缓存数据保存在备份节点的主缓存区;将合并后的缓存数据缓存到备份节点顺时针的下一个节点的备份缓存区,同时将备份节点逆时针的上一个节点主缓存区的缓存数据保存到备份缓存区。
在上述实施例的基础上,所述系统还包括:缓存通信模块,用于通过对缓存数据进行注册监听器,以使得各节点之间进行数据通信。当节点的本地缓存中有数据需要更新时,这时会产生一个数据更新的事件,并将该事件告知监听器;监听器在收到消息后,将更新消息封装成一个事件对象通过缓存通信模块发送给集群中的其它节点。当集群中的节点完成初始化后,缓存通信进程根据配置文件信息,监听本地节点的某TCP端口,当此端口有任务请求消息传来时,从收到的消息中提取请求任务对应的缓存数据相关信息,包括名称、事件的类型、数据对象的键和值;最后根据缓存数据相关信息到缓存数据对应的缓存节点,从而执行任务请求信息中相应的任务事件。
本发明实施例提供的系统是用于执行上述各方法实施例的,具体流程和详细内容请参照上述实施例,此处不再赘述。
图8为本发明实施例提供的电子设备结构示意图,如图8所示,该电子设备可以包括:处理器(Processor)801、通信接口(Communications Interface)802、存储器(Memory)803和通信总线804,其中,处理器801,通信接口802,存储器803通过通信总线804完成相互间的通信。处理器801可以调用存储器803中的逻辑指令,以执行如下方法:根据一致性哈希算法得到多个节点的节点哈希值和多个缓存数据的缓存数据哈希值,并将多个节点哈希值和多个缓存数据哈希值映射在0至2^32的虚拟圆上;根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上;根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端。
此外,上述的存储器803中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:根据一致性哈希算法得到多个节点的节点哈希值和多个缓存数据的缓存数据哈希值,并将多个节点哈希值和多个缓存数据哈希值映射在0至2^32的虚拟圆上;根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上;根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端。
本发明实施例提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储服务器指令,该计算机指令使计算机执行上述实施例所提供的分布式数据缓存方法,例如包括:根据一致性哈希算法得到多个节点的节点哈希值和多个缓存数据的缓存数据哈希值,并将多个节点哈希值和多个缓存数据哈希值映射在0至2^32的虚拟圆上;根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上;根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种分布式数据缓存方法,其特征在于,包括:
根据一致性哈希算法得到多个节点的节点哈希值和多个缓存数据的缓存数据哈希值,并将多个节点哈希值和多个缓存数据哈希值映射在0至2^32的虚拟圆上;
根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上;
根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端。
2.根据权利要求1所述的方法,其特征在于,在所述根据一致性哈希算法得到多个节点的节点哈希值和多个缓存数据的缓存数据哈希值,并将多个节点哈希值和多个缓存数据哈希值映射在0至2^32的虚拟圆上之前,所述方法还包括:
对配置信息进行初始化处理,以得到缓存节点集群和多个缓存数据,所述缓存节点集群包括多个节点,每个节点包括一个主缓存区和一个备份缓存区。
3.根据权利要求2所述的方法,其特征在于,所述根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端,包括:
根据一致性哈希算法对各节点进行查询,得到目标缓存数据的目标主节点和目标备份节点;
根据动态负载均衡策略从所述目标主节点和所述目标备份节点中确定目标缓存节点,将目标缓存节点中的缓存数据发送到目标终端。
4.根据权利要求3所述的方法,其特征在于,在所述根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端之前,所述方法还包括:
基于缓存数据的生存周期值和更新信息对任意节点的缓存数据进行同步处理。
5.根据权利要求4所述的方法,其特征在于,所述根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上,包括:
若任意节点的缓存空间已存满缓存数据,则对节点进行替换算法处理,以使得新增缓存数据缓存到节点中,所述替换算法包括先进先出算法、最近最少使用算法和最不经常使用算法。
6.根据权利要求5所述的方法,其特征在于,在所述根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上之后,所述方法还包括:
根据一致性哈希算法将新增节点映射到所述虚拟圆上,并将所述新增节点在顺时针方向上的下个节点作为迁移同步节点;
将所述迁移同步节点的主缓存区中的主缓存数据同步到所述新增节点的主缓存区,并将所述主缓存数据转移到所述迁移同步节点的备份缓存区,同时将所述迁移同步节点的对应备份节点中备份的所述主缓存数据进行删除处理;
若所述迁移同步节点的备份缓存区中的缓存数据不是所述新增节点的备份数据,则将备份数据发送到所述新增节点的备份缓存区进行缓存,同时将所述迁移同步节点的备份缓存区中的缓存数据进行删除。
7.根据权利要求6所述的方法,其特征在于,在所述根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上之后,所述方法还包括:
若任意节点出现故障时,则故障节点对应的备份节点将主缓存区和备份缓存区的缓存数据进行合并处理,并将合并后的缓存数据保存在备份节点的主缓存区;
将合并后的缓存数据缓存到备份节点顺时针的下一个节点的备份缓存区,同时将备份节点逆时针的上一个节点主缓存区的缓存数据保存到备份缓存区。
8.一种分布式数据缓存系统,其特征在于,包括:
缓存数据分布模块,用于根据一致性哈希算法得到多个节点的节点哈希值和多个缓存数据的缓存数据哈希值,并将多个节点哈希值和多个缓存数据哈希值映射在0至2^32的虚拟圆上;
处理模块,用于根据缓存数据哈希值映射到所述虚拟圆上的初始位置,将顺时针的第一个节点作为缓存数据的主节点,将所述主节点的顺时针下一个节点作为缓存数据的备份节点,以使得多个缓存数据分布到各个节点上;
查询模块,用于根据一致性哈希算法对各节点进行查询,将查询得到的目标缓存数据发送到目标终端。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811481786.8A CN111274310A (zh) | 2018-12-05 | 2018-12-05 | 一种分布式数据缓存方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811481786.8A CN111274310A (zh) | 2018-12-05 | 2018-12-05 | 一种分布式数据缓存方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111274310A true CN111274310A (zh) | 2020-06-12 |
Family
ID=71001392
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811481786.8A Pending CN111274310A (zh) | 2018-12-05 | 2018-12-05 | 一种分布式数据缓存方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111274310A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112132954A (zh) * | 2020-08-31 | 2020-12-25 | 青岛秀山移动测量有限公司 | 一种面向三维激光点云实体对象的分布式管理方法及系统 |
CN112558869A (zh) * | 2020-12-11 | 2021-03-26 | 北京航天世景信息技术有限公司 | 基于大数据遥感影像缓存方法 |
CN112597197A (zh) * | 2020-12-17 | 2021-04-02 | 杭州当虹科技股份有限公司 | 一种基于内存的分布式缓存系统 |
CN112799978A (zh) * | 2021-01-20 | 2021-05-14 | 网易(杭州)网络有限公司 | 缓存设计管理方法、装置、设备和计算机可读存储介质 |
CN113672665A (zh) * | 2021-08-18 | 2021-11-19 | Oppo广东移动通信有限公司 | 数据处理方法、数据采集系统、电子设备和存储介质 |
CN113779453A (zh) * | 2021-01-06 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 缓存更新方法和装置 |
CN113779043A (zh) * | 2021-11-05 | 2021-12-10 | 北京泰策科技有限公司 | 一种数据分布式缓存自动加载与转换方法 |
CN113835930A (zh) * | 2021-09-26 | 2021-12-24 | 杭州谐云科技有限公司 | 一种基于云平台的缓存服务恢复方法、系统和装置 |
CN114138825A (zh) * | 2021-11-24 | 2022-03-04 | 聚好看科技股份有限公司 | 一种服务器及为应用程序提供数据查询服务的方法 |
CN114143196A (zh) * | 2021-11-25 | 2022-03-04 | 北京百度网讯科技有限公司 | 实例配置更新方法、装置、设备、存储介质及程序产品 |
CN114691694A (zh) * | 2022-04-08 | 2022-07-01 | 广东七件事网络科技有限公司 | 一种树状数据存储和处理的方法及系统 |
CN115442439A (zh) * | 2022-08-31 | 2022-12-06 | 云知声智能科技股份有限公司 | 分布式缓存集群管理方法、系统、终端及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104166634A (zh) * | 2014-08-12 | 2014-11-26 | 华中科技大学 | 一种固态盘系统中的映射表缓存管理方法 |
CN105516231A (zh) * | 2014-10-20 | 2016-04-20 | 中国电信股份有限公司 | 一种基于改进一致性哈希分布式缓存的方法和系统 |
CN105744001A (zh) * | 2016-04-11 | 2016-07-06 | 青岛海信传媒网络技术有限公司 | 分布式缓存系统扩容方法、数据访问方法及装置和系统 |
CN106354805A (zh) * | 2016-08-28 | 2017-01-25 | 航天恒星科技有限公司 | 一种分布式存储系统NoSQL搜索缓存的优化方法和系统 |
CN108124012A (zh) * | 2017-12-21 | 2018-06-05 | 中通服公众信息产业股份有限公司 | 一种基于哈希算法的分布式缓存计算方法 |
CN108600321A (zh) * | 2018-03-26 | 2018-09-28 | 中国科学院计算技术研究所 | 一种基于分布式内存云的图数据存储方法和系统 |
CN108810041A (zh) * | 2017-04-27 | 2018-11-13 | 华为技术有限公司 | 一种分布式缓存系统的数据写入及扩容方法、装置 |
-
2018
- 2018-12-05 CN CN201811481786.8A patent/CN111274310A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104166634A (zh) * | 2014-08-12 | 2014-11-26 | 华中科技大学 | 一种固态盘系统中的映射表缓存管理方法 |
CN105516231A (zh) * | 2014-10-20 | 2016-04-20 | 中国电信股份有限公司 | 一种基于改进一致性哈希分布式缓存的方法和系统 |
CN105744001A (zh) * | 2016-04-11 | 2016-07-06 | 青岛海信传媒网络技术有限公司 | 分布式缓存系统扩容方法、数据访问方法及装置和系统 |
CN106354805A (zh) * | 2016-08-28 | 2017-01-25 | 航天恒星科技有限公司 | 一种分布式存储系统NoSQL搜索缓存的优化方法和系统 |
CN108810041A (zh) * | 2017-04-27 | 2018-11-13 | 华为技术有限公司 | 一种分布式缓存系统的数据写入及扩容方法、装置 |
CN108124012A (zh) * | 2017-12-21 | 2018-06-05 | 中通服公众信息产业股份有限公司 | 一种基于哈希算法的分布式缓存计算方法 |
CN108600321A (zh) * | 2018-03-26 | 2018-09-28 | 中国科学院计算技术研究所 | 一种基于分布式内存云的图数据存储方法和系统 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112132954A (zh) * | 2020-08-31 | 2020-12-25 | 青岛秀山移动测量有限公司 | 一种面向三维激光点云实体对象的分布式管理方法及系统 |
CN112132954B (zh) * | 2020-08-31 | 2024-02-27 | 青岛秀山移动测量有限公司 | 一种面向三维激光点云实体对象的分布式管理方法及系统 |
CN112558869A (zh) * | 2020-12-11 | 2021-03-26 | 北京航天世景信息技术有限公司 | 基于大数据遥感影像缓存方法 |
CN112597197A (zh) * | 2020-12-17 | 2021-04-02 | 杭州当虹科技股份有限公司 | 一种基于内存的分布式缓存系统 |
CN113779453A (zh) * | 2021-01-06 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 缓存更新方法和装置 |
CN112799978A (zh) * | 2021-01-20 | 2021-05-14 | 网易(杭州)网络有限公司 | 缓存设计管理方法、装置、设备和计算机可读存储介质 |
CN113672665A (zh) * | 2021-08-18 | 2021-11-19 | Oppo广东移动通信有限公司 | 数据处理方法、数据采集系统、电子设备和存储介质 |
CN113835930B (zh) * | 2021-09-26 | 2024-02-06 | 杭州谐云科技有限公司 | 一种基于云平台的缓存服务恢复方法、系统和装置 |
CN113835930A (zh) * | 2021-09-26 | 2021-12-24 | 杭州谐云科技有限公司 | 一种基于云平台的缓存服务恢复方法、系统和装置 |
CN113779043A (zh) * | 2021-11-05 | 2021-12-10 | 北京泰策科技有限公司 | 一种数据分布式缓存自动加载与转换方法 |
CN114138825A (zh) * | 2021-11-24 | 2022-03-04 | 聚好看科技股份有限公司 | 一种服务器及为应用程序提供数据查询服务的方法 |
CN114143196A (zh) * | 2021-11-25 | 2022-03-04 | 北京百度网讯科技有限公司 | 实例配置更新方法、装置、设备、存储介质及程序产品 |
CN114691694A (zh) * | 2022-04-08 | 2022-07-01 | 广东七件事网络科技有限公司 | 一种树状数据存储和处理的方法及系统 |
CN115442439A (zh) * | 2022-08-31 | 2022-12-06 | 云知声智能科技股份有限公司 | 分布式缓存集群管理方法、系统、终端及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111274310A (zh) | 一种分布式数据缓存方法及系统 | |
US10789217B2 (en) | Hierarchical namespace with strong consistency and horizontal scalability | |
US10817478B2 (en) | System and method for supporting persistent store versioning and integrity in a distributed data grid | |
US8954391B2 (en) | System and method for supporting transient partition consistency in a distributed data grid | |
CN108418900B (zh) | 一种服务器集群系统中的缓存方法、写入点客户端和读客户端 | |
US8671151B2 (en) | Maintaining item-to-node mapping information in a distributed system | |
EP3811229B1 (en) | Hierarchical namespace service with distributed name resolution caching and synchronization | |
US9367261B2 (en) | Computer system, data management method and data management program | |
CN111131451A (zh) | 业务处理系统及业务处理方法 | |
CN105493474B (zh) | 用于支持用于同步分布式数据网格中的数据的分区级别日志的系统及方法 | |
CN109933312B (zh) | 一种有效降低容器化关系型数据库i/o消耗的方法 | |
CN111158851B (zh) | 一种虚拟机快速部署方法 | |
US9075722B2 (en) | Clustered and highly-available wide-area write-through file system cache | |
CN110807039A (zh) | 一种云计算环境下数据一致性维护系统及方法 | |
CN113010549A (zh) | 基于异地多活系统的数据处理方法、相关设备及存储介质 | |
CN111158949A (zh) | 容灾架构的配置方法、切换方法及装置、设备和存储介质 | |
CN112230853A (zh) | 存储容量调整方法、装置、设备及存储介质 | |
TWI484335B (zh) | Cached data processing method, processing system, and means | |
CN112948178A (zh) | 一种数据处理方法、装置、系统、设备及介质 | |
WO2015196692A1 (zh) | 一种云计算系统以及云计算系统的处理方法和装置 | |
Du et al. | Fast one-sided RDMA-based state machine replication for disaggregated memory | |
CN112346912A (zh) | 基于网络文件系统的有状态服务主备高可用系统及方法 | |
WO2024021746A1 (zh) | 数据处理方法、通信系统和相关设备 | |
JP6473425B2 (ja) | ノードおよびデータ配置方法 | |
Hu et al. | Research on reliability of Hadoop distributed file system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |