CN107493327B - 分布式缓存管理方法、系统及数据管理系统 - Google Patents

分布式缓存管理方法、系统及数据管理系统 Download PDF

Info

Publication number
CN107493327B
CN107493327B CN201710685559.6A CN201710685559A CN107493327B CN 107493327 B CN107493327 B CN 107493327B CN 201710685559 A CN201710685559 A CN 201710685559A CN 107493327 B CN107493327 B CN 107493327B
Authority
CN
China
Prior art keywords
cache
instance
cache instance
instances
sets
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.)
Active
Application number
CN201710685559.6A
Other languages
English (en)
Other versions
CN107493327A (zh
Inventor
方旭东
丁善富
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
HANGZHOU SHUNWANG TECHNOLOGY CO LTD
Original Assignee
HANGZHOU SHUNWANG TECHNOLOGY CO LTD
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by HANGZHOU SHUNWANG TECHNOLOGY CO LTD filed Critical HANGZHOU SHUNWANG TECHNOLOGY CO LTD
Priority to CN201710685559.6A priority Critical patent/CN107493327B/zh
Publication of CN107493327A publication Critical patent/CN107493327A/zh
Application granted granted Critical
Publication of CN107493327B publication Critical patent/CN107493327B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1061Peer-to-peer [P2P] networks using node-based peer discovery mechanisms
    • H04L67/1065Discovery involving distributed pre-established resource-based relationships among peers, e.g. based on distributed hash tables [DHT] 
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching
    • H04L67/5682Policies or rules for updating, deleting or replacing the stored data

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Computer And Data Communications (AREA)

Abstract

本申请提供一种分布式缓存管理方法、系统及数据管理系统,应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中,其中,各该存储节点中预置有至少一个缓存实例,所述方法为从多个存储节点中确定多个缓存实例并提交业务请求;以及依据指定的冗余度将多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集,能够确保映射于同一个区间或者哈希槽上的主缓存实例和副缓存实例被配置在不同的存储节点上,进而确保即便一个存储节点上所有的缓存实例都被挂起时,也不会导致业务数据部分丢失,进而可以确保操作业务能够正常运行。

Description

分布式缓存管理方法、系统及数据管理系统
技术领域
本申请涉及网络技术领域,特别是涉及一种分布式缓存管理方法、系统及数据管理系统。
背景技术
目前,业内通常采用分布式数据存储系统进行数据存储,分布式数据存储系统既具有集群系统的可扩/缩容的特性,又可以进行分布式操作。因此,在数据存储量发生变化时,分布式数据存储系统能够通过增加/移除集群中的数据存储节点实现对分布式数据存储系统的扩/缩容。
在现有的分布式数据存储系统中,通常可以采用一致性哈希算法对集群进行分片,而后对键值对数据(key-value)等进行存储,比如MemCache分布式缓存系统和Redis分布式缓存系统。其中,MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。Redis是一个高性能的键值对数据库,也称非关系型数据库,它支持主从同步,数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器,这使得Redis可执行单层树复制。开源数据库Redis的出现,很大程度补偿了关系型数据库存储的不足,在部分场合可以对关系型数据库起到很好的补充作用。
以Redis为例,Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis是一个高性能的Key-value数据库,和MemCache类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set-有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与MemCache一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从或主副)同步。但在现有技术中,无论是MemCache分布式缓存系统还是Redis分布式缓存系统,都在如何实现更高可靠性的备份性能上,即如何解决配置缓存实例的主从或主副备份的解决方案尤为重视。
发明内容
鉴于以上所述现有技术的缺点,本申请的目的在于提供一种分布式缓存管理方法、系统及数据管理系统,用于解决解决配置缓存实例的主从或主副本备份的问题。
为实现上述目的及其他相关目的,本申请的第一方面,提供一种分布式缓存管理方法,应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中,其中,各该存储节点中预置有至少一个缓存实例,所述分布式缓存管理方法包括以下步骤:从所述多个存储节点中确定多个缓存实例并提交业务请求;以及依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集,使每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例映射至相同的哈希槽中,并确保每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例位于不同的存储节点中。
在本申请第一方面的某些实施方式中,所述的从所述多个存储节点中确定多个缓存实例并提交业务请求的步骤为依据指定的业务缓存容量及每一缓存实例可支配的内存空间来确定所述多个缓存实例的个数。
在本申请第一方面的某些实施方式中,所述多个存储节点位于不同的IP地址或位于不同的物理服务器。所述业务请求包括新建缓存实例业务请求、扩容缓存实例业务请求、或缩容缓存实例业务请求中的一种。所述副缓存实例为操作优先级低于主缓存实例的读写缓存实例或只读缓存实例。所述缓存实例是由IP地址及端口号表示。所述哈希槽与若干哈希值对应,且每一个哈希槽中的哈希值是连续的,多个哈希槽组成的区间是连续的,所述每一组缓存实例集由一个哈希槽区间表示。
在本申请第一方面的某些实施方式中,所述依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集之前还包括确定所述多个缓存实例中各缓存实例所在的IP地址分布以及各缓存实例与哈希槽映射关系的步骤。
在本申请第一方面的某些实施方式中,所述依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集的步骤包括:确定将所述多个缓存实例进行遍历的次数、每次遍历的路径以及所述路径上缓存实例的个数;以及依据确定遍历的次数、每次遍历的路径以及所述路径上缓存实例的个数遍历所述多个缓存实例,以将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集,使每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例映射至相同的哈希槽中,并确保每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例位于不同的存储节点中。
在本申请第一方面的某些实施方式中,所述确定将所述多个缓存实例进行遍历的次数、每次遍历的路径以及所述路径上缓存实例的个数的步骤包括:依据所述多个缓存实例中各缓存实例的IP地址分布将同一IP地址中缓存实例的最多个数确定为遍历次数;依据所述多个缓存实例的总个数及所述遍历次数确定所述路径上缓存实例的个数;以及依据各IP地址中存在的缓存实例的数量从多到少来确定每一路径上缓存实例的遍历次序。
在本申请第一方面的某些实施方式中,所述将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集的步骤包括:将每一路径中的先遍历的缓存实例配置为主缓存实例,将所述主缓存实例之后遍历的缓存实例配置为对应所述主缓存实例的副缓存实例以形成一组缓存实例集;以及将每一路径中的最后遍历的缓存实例配置为主缓存实例,下一路径中首次遍历的缓存实例配置为对应所述主缓存实例的副缓存实例以形成另一组缓存实例集。
本申请的第二方面,还提供一种分布式缓存管理系统,包括:多个存储节点,每一存储节点中预置有至少一个缓存实例;路由层,用以通过哈希运算为每一缓存实例映射一哈希槽;至少一客户端,从所述多个存储节点中确定多个缓存实例并提交业务请求,以及接收经由所述路由层反馈的业务执行结果;以及管理平台,接收提交的业务请求,并依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集,使每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例映射至相同的哈希槽中,并确保每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例位于不同的存储节点中。
本申请的第三方面,还提供一种数据管理系统,包括多个存储节点,各该存储节点中预置有至少一个缓存实例,所述多个存储节点中的多个缓存实例被配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集,其中,每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例映射至相同的哈希槽中,且每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例位于不同的存储节点中。
本申请的第四方面,还提供一种分布式缓存管理方法,应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中,其中,各该存储节点中预置有至少一个缓存实例,所述分布式缓存管理方法包括以下步骤:从至少一个存储节点中确定至少一个缓存实例作为扩容实例并提交扩容请求;从所述多个存储节点中确定一组由主缓存实例及与其对应的至少一个副缓存实例组成的缓存实例集,其中,所述主缓存实例与所述至少一个副缓存实例映射至相同的哈希槽中,且所述主缓存实例与所述至少一个副缓存实例位于不同的存储节点中;以及将该组缓存实例集裂变为两组缓存实例集;其中,于第一组缓存实例集中,所述扩容实例被配置为所述主缓存实例的第一副缓存实例,所述副缓存实例被配置为所述主缓存实例的第二副缓存实例;于第二组缓存实例集中,所述扩容实例被配置为主缓存实例,原副缓存实例被配置为所述第二组缓存实例集中主缓存实例的第一副缓存实例,原主缓存实例被配置为所述第二组缓存实例集中主缓存实例的第二副缓存实例;并且,于所述第一、第二组缓存实例集中,所述主缓存实例、第一副缓存实例、以及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点中。
在本申请第四方面的某些实施方式中,同一缓存实例集合中的主缓存实例操作优先级高于所述第一副缓存实例,所述第一副缓存实例操作优先级高于所述第二副缓存实例。所述第一或二副缓存实例为读写缓存实例或只读缓存实例。
在本申请第四方面的某些实施方式中,从所述多个存储节点中确定的缓存实例集有多组的情况下,还包括以下步骤:当判断所述扩容实例的IP地址与第一组缓存实例集的主缓存实例或副缓存实例的IP地址相同时,再从所述多个存储节点中确定第二组缓存实例集;重复判断过程,直至判断所述扩容实例的IP地址与一组缓存实例集中主缓存实例或副缓存实例的IP地址不相同。
在本申请第四方面的某些实施方式中,从所述多个存储节点中确定的缓存实例集有多组的情况下,还包括以下步骤:当判断第一组缓存实例集中已配置有一扩容实例时,从所述多个存储节点中确定第二组缓存实例集,以便将另一扩容实例配置于所述第二组缓存实例集中。
在本申请第四方面的某些实施方式中,从所述多个存储节点中确定的缓存实例集有多组的情况下,还包括以下步骤:当判断所述第一组缓存实例集中已配置有一扩容实例时,从所述多个存储节点中确定第二组缓存实例集,并将所述第一组缓存实例集中已配置的扩容实例迁移于所述第二组缓存实例集中,以便将另一扩容实例可配置于所述第一组缓存实例集中。
本申请的第五方面,还提供一种分布式缓存管理系统,包括多个存储节点,每一存储节点中预置有至少一个缓存实例,所述多个存储节点中具有至少一组由主缓存实例及与其对应的至少一个副缓存实例组成的缓存实例集,其中,所述主缓存实例与所述至少一个副缓存实例映射至相同的哈希槽中,且所述主缓存实例与所述至少一个副缓存实例位于不同的存储节点中;路由层,用以通过哈希运算为每一缓存实例映射一哈希槽;至少一客户端,从至少一个存储节点中确定至少一个缓存实例作为扩容实例并提交扩容请求,以及接收经由所述路由层反馈的扩容结果;管理平台,接收经由所述路由层提交的扩容请求,将所述多个存储节点中的一组缓存实例集裂变为两组缓存实例集;其中,于第一组缓存实例集中,所述扩容实例被配置为所述主缓存实例的第一副缓存实例,所述副缓存实例被配置为所述主缓存实例的第二副缓存实例;于第二组缓存实例集中,所述扩容实例被配置为主缓存实例,原副缓存实例被配置为所述第二组缓存实例集中主缓存实例的第一副缓存实例,原主缓存实例被配置为所述第二组缓存实例集中主缓存实例的第二副缓存实例;并且,于所述第一、第二组缓存实例集中,所述主缓存实例、第一副缓存实例、以及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点中。
本申请的第六方面,还提供一种数据管理系统,包括多个存储节点,各该存储节点中预置有至少一个缓存实例,所述多个存储节点中具有至少两组缓存实例集,其中,所述至少两组缓存实例集分别配置有主缓存实例、对应所述主缓存实例的第一副缓存实例及第二副缓存实例,其中,第一组缓存实例集的第一副缓存实例被配置为第二组缓存实例集的主缓存实例,第一组缓存实例集的第二副缓存实例被配置为第二组缓存实例集的第一副缓存实例,第一组缓存实例集的主缓存实例被配置为第二组缓存实例集的第二副缓存实例,且第一及第二组缓存实例集中的主缓存实例、第一副缓存实例及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点中。
本申请的第七方面,还提供一种分布式缓存管理方法,应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中,其中,各该存储节点中预置有至少一个缓存实例,所述分布式缓存管理方法包括以下步骤:从所述多个存储节点中确定至少两组缓存实例集并提交缩容请求,其中,所述至少两组缓存实例集分别配置有主缓存实例、对应所述主缓存实例的第一副缓存实例及第二副缓存实例,第一组缓存实例集的第一副缓存实例被配置为第二组缓存实例集的主缓存实例,第一组缓存实例集的第二副缓存实例被配置为第二组缓存实例集的第一副缓存实例,第一组缓存实例集的主缓存实例被配置为第二组缓存实例集的第二副缓存实例,且第一及第二组缓存实例集中的主缓存实例、第一副缓存实例及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点中;将所述第一及第二组缓存实例集合并,保留所述第一组缓存实例集的主缓存实例以及所述第二组缓存实例集的第一副缓存实例,形成由一主缓存实例及与其对应的第一副缓存实例组成的一组缓存实例集,所述主缓存实例与所述第一副缓存实例映射至相同的哈希槽中,且所述主缓存实例与所述第一副缓存实例位于不同的存储节点中。
本申请的第八方面,还提供一种分布式缓存管理系统,包括:多个存储节点,每一存储节点中预置有至少一个缓存实例,所述多个存储节点中具有至少两组缓存实例集,其中,所述至少两组缓存实例集分别配置有主缓存实例、对应所述主缓存实例的第一副缓存实例及第二副缓存实例,第一组缓存实例集的第一副缓存实例被配置为第二组缓存实例集的主缓存实例,第一组缓存实例集的第二副缓存实例被配置为第二组缓存实例集的第一副缓存实例,第一组缓存实例集的主缓存实例被配置为第二组缓存实例集的第二副缓存实例,且第一及第二组缓存实例集中的主缓存实例、第一副缓存实例及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点中;路由层,用以通过哈希运算为每一缓存实例映射一哈希槽;至少一客户端,从所述多个存储节点中确定至少两组缓存实例集并提交缩容请求,以及接收经由所述路由层反馈的缩容结果;以及管理平台,接收经由所述路由层提交的缩容请求,将所述第一及第二组缓存实例集合并,保留所述第一组缓存实例集的主缓存实例以及所述第二组缓存实例集的第一副缓存实例,形成由一主缓存实例及与其对应的第一副缓存实例组成的一组缓存实例集,所述主缓存实例与所述第一副缓存实例映射至相同的哈希槽中,且所述主缓存实例与所述第一副缓存实例位于不同的存储节点中。
本申请的第九方面,还提供一种计算机可读写存储介质,其上存储有用于分布式缓存管理计算机程序,所述分布式缓存管理计算机程序被处理器执行时实现本申请的第一方面、第四方面及第七方面所述分布式缓存管理方法的步骤。
如上所述,本申请提供的分布式缓存管理方法、系统及数据管理系统可以确保在同一哈希槽区间(具体为同一哈希槽)下有多个不同存储节点(IP地址)的缓存实例,并且这些缓存实例的优先级不同,即,每个缓存实例仅在1个哈希槽区间(具体为同一哈希槽)上有个最高优先级,即为高优先级的缓存实例。该新建业务构成的缓存实例分布图只能有1个环,即缓存实例分布图只有1个连通分量,进而能够确保映射于同一个区间或者哈希槽上的主缓存实例和副缓存实例(亦或称之为从缓存实例)被配置在不同的存储节点(IP地址或者物理主机)上,这样,即便一个存储节点(IP地址或者物理主机)上所有的缓存实例都被挂起时,也不会导致业务数据部分丢失,进而可以确保操作业务能够正常运行。
附图说明
图1显示为Redis集群的架构示意图。
图2显示为本申请的分布式缓存管理方法的一实施例的流程示意图。
图3显示为本申请分布式缓存管理方法中的一个缓存业务的架构图。
图4显示为本申请的分布式缓存管理方法的另一实施例的流程示意图。
图5a及图5b显示为本申请于一实施方式中确定的多个缓存实例的分布示意图。
图6显示为图5a中的实例分布图以缓存实例A为起点的新建业务的对照描述示意图。
图7显示为本申的分布式缓存管理方法的再一实施例的流程示意图。
图8a至图8d显示为扩容业务中依次加入不同缓存实例的实例分布图
图9a是图8a-8d业务扩容前的缓存实例图。
图9b对图9a业务扩容后的缓存实例图。
图9c是对图9a业务的简单描述。
图9d是对图9b业务的对照描述示意图。
图10显示为本申请数据管理系统在另一种实施状态下的缓存业务的架构图。
图11显示为本申的分布式缓存管理方法的又一实施例的流程示意图。
图12a-12d显示为针对图9b和图9d所表示的业务缩容说明示例图
具体实施方式
以下由特定的具体实施例说明本申请的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本申请的其他优点及功效。
在下述描述中,参考附图,附图描述了本申请的若干实施例。应当理解,还可使用其他实施例,并且可以在不背离本公开的精神和范围的情况下进行机械组成、结构、电气以及操作上的改变。下面的详细描述不应该被认为是限制性的,并且本申请的实施例的范围仅由公布的专利的权利要求书所限定.这里使用的术语仅是为了描述特定实施例,而并非旨在限制本申请。
虽然在一些实例中术语第一、第二等在本文中用来描述各种元件,但是这些元件不应当被这些术语限制。这些术语仅用来将一个元件与另一个元件进行区分。例如,第一组缓存实例集可以被称作第二组缓存实例集而不脱离各种所描述的实施例的范围。
再者,如同在本文中所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文中有相反的指示.应当进一步理解,术语“包含”、“包括”表明存在所述的特征、步骤、操作、元件、组件、项目、种类、和/或组,但不排除一个或多个其他特征、步骤、操作、元件、组件、项目、种类、和/或组的存在、出现或添加。此处使用的术语“或”和“和/或”被解释为包括性的,或意味着任一个或任何组合。另外,本申请实施方式中涉及到的缓存实例的说明,在某些实施例中用字母A、B或者A、B、C、D或者A、B、C、D、E、F来表示一个缓存实例,在另一些实施例中用A:1、B:1、C:1、D:1、B:2、B:3、E:1、F:1来表示一个缓存实例,用不同方式来表示缓存实例仅是为了在一个实施例种方便描述,并不具有特定的限制,特此述明。
请参阅图1,显示为一Redis集群(Redis cluster)的架构示意图。图1中每个物理节点下包含一个Redis组。这个组中的Redis有一个主Redis和多个副Redis(或称为从Redis),由副Redis做数据同步,达到数据冗余的效果。Redis cluster把所有的物理节点映射到0-16383哈希槽上,Redis cluster负责维护哈希槽以及物理节点。客户端只要连接其中一个主Redis即可,就算请求数据对应的关键字所在的哈希槽不在该Redis上,Redis通过MOVED或者ASK错误告诉客户端重定向到哪台主Redis上。
Redis cluster的每个物理节点负责处理一部分哈希槽,物理例如节点A负责处理0号至5500号哈希槽,即哈希槽区间[0,5500];物理节点B负责处理5501号至11000号哈希槽,即哈希槽区间[5501,11000];物理节点C负责处理11001号至16384号哈希槽,即哈希槽区间[11001,16384]。Redis cluster通过增加和删除物理节点来完成扩缩容。增加物理节点,即扩容,删除物理节点,即缩容。
Redis cluster的扩缩容没有考虑每一个哈希槽下的Redis组中的缓存实例是否在一台同一IP的机器下,一旦一个节点下的缓存实例处于同一IP的机器下,这个机器出了问题,会造成同一个槽下的所有数据丢失。例如,如果上面例子中的节点A下的所有实例位于一个同一IP的机器下,那么这个机器出现了问题,意味着哈希槽区间[0,5500]的数据都丢失了。本申请旨解决例如Redis cluster分布式缓存网络架构中存在的扩缩容方案中的缺陷。
本申请提供一种分布式缓存管理方法,应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中,所述分布式缓存网络比如为MemCache分布式缓存网络和Redis分布式缓存网络。在以下描述的实施例中,暂以Redis分布式缓存网络为例进行说明,但需要特别说明的是,本申请揭露的技术思想亦可应用在例如MemCache分布式缓存网络中,特此述明。
在本申请的某些实施方式中,各该存储节点中预置有至少一个缓存实例。所述分布式缓存是其中将数据被存储在多个存储节点(例如为主机)上的缓存,所述存储节点是被配置为支持分布式缓存的一个或多个节点的计算机或服务器或其他处理系统,每一个节点包括分布式缓存的一个或多个数据模块。在一种实施方式中,所述的多个存储节点位于不同的IP地址中;在另一种实施方式中,所述的多个存储节点也可以位于不同的物理服务器中。
比如,所述存储节点例如为一台物理存储服务器、一台位于某一IP地址中的主机、或者设置在一台主机中的存储部件。其中,所述存储部件可包括高速随机存取存储器,并且还可包括非易失性存储器,例如一个或多个磁盘存储设备、闪存设备或其他非易失性固态存储设备。在某些实施例中,存储部件还可以包括远离一个或多个处理器的存储器,例如经由RF电路或外部端口以及通信网络访问的网络附加存储器,其中所述通信网络可以是因特网、一个或多个内部网、局域网(LAN)、广域网(WLAN)、存储局域网(SAN)等,或其适当组合。存储器控制器可控制设备的诸如CPU和外设接口之类的其他组件对存储器的访问。
所述缓存实例比如为一种可调用CPU资源和/或内存资源的缓存应用,比如为一个进程或者用于执行某种功能的一个程序,该进程或程序在独占一定的物理空间,该空间被定义为缓存,使得来自客户端的操作将数据写入该物理空间中或者自该物理空间中读取数据。在一种实施例中,所述缓存实例是由IP地址及端口号表示,但并不局限于此,在不同的实施例中,所述缓存实例可以有业务名称、所属机房、关联业务、缓存类型、状态、操作人、最近操作日期等一种或多种的信息来表示。
在本申请的某些实施例中,所述至少一客户端例如为包括存储器、存储器控制器、一个或多个处理单元(CPU)、外设接口、RF电路、音频电路、扬声器、麦克风、输入/输出(I/O)子系统、显示屏、其他输出或控制设备,以及外部端口等组件的计算机,所述计算机中的这些组件通过一条或多条通信总线或信号线进行通信。
所述路由层用以通过哈希运算为每一缓存实例映射一哈希槽。所述哈希值为一键值(key),于实例的操作中,所述业务请求中包含的数据为key-value数据,至少一个所述哈希值与一哈希槽(hash slot)相对应。所述哈希槽可以通过哈希函数将特定的键值信息映射到特定的数据信息,这可以保证键值信息和数据信息之间一一对应的关系。例如,可以将键值空间分割为16384个哈希槽,而每一个上述存储节点可以包括一部分上述哈希槽,并且使得每一个存储节点中的哈希槽数量相等。通常,可以使用键的CRC16编码对16384取模来计算一个指定键值信息所属的哈希槽。
请参阅图2,显示为本申请的分布式缓存管理方法的一实施例的流程示意图,如图所示,本申请提供的分布式缓存管理方法包括以下步骤:
于步骤S11中,从所述多个存储节点中确定多个缓存实例并提交业务请求;于一实施例中,所述至少一客户端从所述多个存储节点中确定多个缓存实例之后向路由层提交业务请求,或者,所述至少一客户端向路由层提交业务请求,并藉由一管理平台从所述多个存储节点中确定多个缓存实例,在不同的实施例中,所述业务请求包括新建缓存实例业务请求、扩容缓存实例业务请求、或缩容缓存实例业务请求中的一种。在本实施例中,下面将以所述至少一客户端从所述多个存储节点中确定多个缓存实例并提交新建缓存实例业务请求为例进行说明。
所述管理平台例如为一虚拟的分布式缓存管理系统,比如顺网科技公司的顺网分布式缓存系统hours,其可以通过统一化的配置平台对缓存实例(Redis或MemCache)以缓存业务为单位进行管理。hours能对缓存数据进行数据冗余,保证了系统的高可用性。
于一实施例中,依据所述至少一客户端指定的业务缓存容量及每一缓存实例可支配的内存空间来确定所述多个缓存实例的个数。比如,依据所述客户端指定的业务缓存容量为48G,并确认每一缓存实例可支配的内存空间为8G,则确定所述多个缓存实例的个数为6个缓存实例。
于步骤S12中,依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集,使每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例映射至相同的哈希槽中,并确保每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例位于不同的存储节点中。于一实施例中,经由管理平台或缓存管理中间件依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集。
于一实施例中,所述副缓存实例为操作优先级低于主缓存实例的读写缓存实例或只读缓存实例,在本实施例中,所述副缓存实例为操作优先级低于主缓存实例的可读写缓存实例。
请参阅图3,显示为本申请分布式缓存管理方法中的一个缓存业务的架构图,如图3所示。图3中整个缓存业务的新建缓存实例业务请求将请求数据附带的关键字在哈希后,将对应的新建缓存实例业务请求均匀分布在两个连续的哈希槽区间上[0,1023]以及[1024,2047]。图3中的A,B表示为基于所述新建缓存实例业务请求新建的缓存实例,所述每一组缓存实例集由一个哈希槽区间表示,比如[0,1023]中的A,B表示为一组缓存实例集,[1024,2047]中的B,A表示为另一组缓存实例集,在[0,1023]组的缓存实例集中A表示为主缓存实例,B表示为副缓存实例,在[1024,2047]组的缓存实例集中表示为B主缓存实例,A表示为副缓存实例,体现在图中,每一个哈希槽区间处于缓存实例第1行的是该哈希槽区间的高优先级缓存实例(又称主缓存实例,能读写数据,在读数据时被优先读取,下同);处于缓存实例第2行的是该哈希槽区间的低优先级缓存实例(又称从缓存实例,能读写数据,在读数据时被滞后读取,下同);即在这个哈希槽区间下低优先级缓存实例是高优先级缓存实例的备份。即,图3中[0,1023]的缓存实例A是哈希槽区间[0,1023]的高优先级缓存实例,图3中[0,1023]的缓存实例B是哈希槽区间[0,1023]的低优先级缓存实例,在哈希槽区间[0,1023]中,缓存实例B是缓存实例A的备份,其中,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B映射至相同的哈希槽中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A映射至相同的哈希槽中,而且,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B位于不同的存储节点中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A位于不同的存储节点中。
在具体的某一实施例中,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B映射至相同的哈希槽中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A映射至相同的哈希槽中,而且,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B位于不同IP地址的存储节点中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A位于不同IP地址的存储节点中。
在具体的另一实施例中,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B映射至相同的哈希槽中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A映射至相同的哈希槽中,而且,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B位于不同物理服务器或物理主机的存储节点中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A位于不同物理服务器或物理主机的存储节点中。
于另一实施例中,还包括确定所述多个缓存实例中各缓存实例所在的IP地址分布以及各缓存实例与哈希槽映射关系的步骤,以便依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集。
本申请的分布式缓存管理方法新建的缓存实例集能够确保映射于同一个区间或者哈希槽上的主缓存实例和副缓存实例(亦或称之为从缓存实例)被配置在不同的存储节点(IP地址或者物理主机)上,这样,即便一个存储节点(IP地址或者物理主机)上所有的缓存实例都被挂起时,也不会导致业务数据部分丢失,进而可以确保操作业务能够正常运行。
请参阅图4,显示为本申请的分布式缓存管理方法的另一实施例的流程示意图,如图所示,所述依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集的步骤S12进一步包括:
步骤S121,确定将所述多个缓存实例进行遍历的次数、每次遍历的路径以及所述路径上缓存实例的个数;于一实施例中,所述管理平台确定将所述多个缓存实例进行遍历的次数、每次遍历的路径以及所述路径上缓存实例的个数。
于一实施例中,所述管理平台确定将所述多个缓存实例进行遍历的次数的实现方式为,依据所述多个缓存实例中各缓存实例的IP地址分布将同一IP地址中缓存实例的最多个数确定为遍历次数;依据所述多个缓存实例的总个数及所述遍历次数确定所述路径上缓存实例的个数;以及依据各IP地址中存在的缓存实例的数量从多到少来确定每一路径上缓存实例的遍历次序。
步骤S122,依据确定遍历的次数、每次遍历的路径以及所述路径上缓存实例的个数遍历所述多个缓存实例,以将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集,使每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例映射至相同的哈希槽中,并确保每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例位于不同的存储节点中。于一实施例中,所述管理平台依据确定遍历的次数、每次遍历的路径以及所述路径上缓存实例的个数遍历所述多个缓存实例。
于一实施例中,所述将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集的步骤S122具体为,将每一路径中的先遍历的缓存实例配置为主缓存实例,将所述主缓存实例之后遍历的缓存实例配置为对应所述主缓存实例的副缓存实例以形成一组缓存实例集;以及将每一路径中的最后遍历的缓存实例配置为主缓存实例,下一路径中首次遍历的缓存实例配置为对应所述主缓存实例的副缓存实例以形成另一组缓存实例集。
为了进一步说明本申请提供的分布式缓存管理方法在新建缓存实例时的作业原理,以下将进行原理性说明,假设用户在客户端通过管理平台(例如hours配置平台)指定了一个冗余度是2,哈希槽区间数是n(n>1)的新建业务,然后管理平台自动选择n台缓存实例C={c1,c2,c3,...,cn},所述的缓存实例的IP地址必须满足一个条件,即该些缓存实例分布在m个IP地址I={IP1,IP2,IP3,...,IPm}(2≤m≤n)上,且
Figure GDA0002304706660000121
其中IPi∈I,N(IPi)是IP为IPi的缓存实例的数量,max(N(IPi))代表N(IPi)的最大值,/是整除符号,下同。通过以下步骤就能完成新建业务:
1)将确定的多个缓存实例根据IP地址进行分类,根据N(IPi)的大小从大到小排序,即各IP地址中存在的缓存实例的数量从多到少来排序;
2)依据所述多个缓存实例中各缓存实例的IP地址分布将同一IP地址中缓存实例的最多个数确定为遍历次数。具体为确定将该些缓存实例进行遍历的次数max(N(IPi)),使每次遍历缓存实例的个数rj平均分布rj=n/max(N(IPi))+x(其中0≤j<max(N(IPi)),下同。当j<n%(max(N(IPi)))(其中%是取余符号,下同)时,x=1;反之,x=0;
3)将该些缓存实例遍历的次数为max(N(IPi)),第j次先确定出IPmax(IPmax是根据N(IPi)从大到小排序后得到的最大IP或缓存实例个数的最多的IP,下同)上未被遍历过的一个缓存实例作为起点遍历除了IPmax的上IP,选择这些IP下未被遍历过的一个缓存实例,这样可以得到第j条遍历的路径
Figure GDA0002304706660000122
其中ck取自缓存实例集合C,ck∈Rj
4)按其按遍历顺序(即确定的每次进行遍历的路径)将
Figure GDA0002304706660000123
Figure GDA0002304706660000124
Figure GDA0002304706660000125
的c1相连,这样就得了只有一个环的实例分布图;按照所述实例分布图,给每一个哈希槽区间按边顺序分配给每个区间。
请参阅图5a及5b,显示为本申请于一实施方式中确定的多个缓存实例的分布示意图,如图所示:客户端指定了一个冗余度的数值是2,哈希槽区间数是6的新建业务,A,B,C,D,E,F是依据指定的业务缓存容量及每一缓存实例可支配的内存空间来确定出来的缓存实例,其中,缓存实例A,B的IP地址是IP1,缓存实例C,E的IP地址是IP2,缓存实例D的IP地址是IP3,缓存实例F的IP地址是IP4。
先对缓存实例A,B,C,D,E,F的IP进行分类后根据N(IPi)的大小从大到小(从多到少)排序,再计算出max(N(IPi))=2,r0=6/2+0=3,r1=6/2+0=3,然后遍历出2条路径为R0={A,C,D}即路径1,R1={B,E,F}即路径2,接着将将路径1的尾和路径2的首进行相连,即缓存实例D和缓存实例B相连,将路径2的尾和路径1的首进行相连,即缓存实例F和缓存实例A相连,最后形成了实例分布图。请参阅图6,显示为图5a中的实例分布图以缓存实例A为起点的新建业务的对照描述示意图。
当然,在其他的实施方式中,还可以有另外一种确定路径的状态,比如图5b所示的状态,依序将缓存实例B、C、D确定为路径1,将A、E、F确定为路径1,接着将将路径1的尾和路径2的首进行相连,即缓存实例D和缓存实例A相连,将路径2的尾和路径1的首进行相连,即缓存实例F和缓存实例B相连,最后形成了实例分布图,以缓存实例B为起点的新建业务的对照描述在此不予赘述。
通过本申请的分布式缓存管理方法,可以确保在同一哈希槽区间(具体为同一哈希槽)下有2个不同存储节点(IP地址)的缓存实例,并且这2个缓存实例的优先级不同,即,每个缓存实例仅在1个哈希槽区间(具体为同一哈希槽)上有个最高优先级,即为高优先级的缓存实例。该新建业务构成的缓存实例分布图只能有1个环,即缓存实例分布图只有1个连通分量,进而能够确保映射于同一个区间或者哈希槽上的主缓存实例和副缓存实例(亦或称之为从缓存实例)被配置在不同的存储节点(IP地址或者物理主机)上,这样,即便一个存储节点(IP地址或者物理主机)上所有的缓存实例都被挂起时,也不会导致业务数据部分丢失,进而可以确保操作业务能够正常运行。
本申请还提供一种分布式缓存管理系统,应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中,所述分布式缓存网络比如为MemCache分布式缓存网络架构和Redis分布式缓存网络架构。在以下描述的实施例中,暂以Redis分布式缓存网络架构(例如图1所示为的Redis cluster的架构)为例进行说明,但需要特别说明的是,本申请揭露的技术思想亦可应用在例如MemCache分布式缓存网络架构中,特此述明。
所述多个存储节点的每一存储节点中预置有至少一个缓存实例;所述分布式缓存是其中将数据被存储在多个存储节点(例如为主机)上的缓存,所述存储节点是被配置为支持分布式缓存的一个或多个节点的计算机或服务器或其他处理系统,每一个节点包括分布式缓存的一个或多个数据模块。在一种实施方式中,所述的多个存储节点位于不同的IP地址中。在另一种实施方式中,所述的多个存储节点也可以位于不同的物理服务器中。
比如,所述存储节点例如为一台物理存储服务器、一台位于某一IP地址中的主机、或者设置在一台主机中的存储部件。其中,所述存储部件可包括高速随机存取存储器,并且还可包括非易失性存储器,例如一个或多个磁盘存储设备、闪存设备或其他非易失性固态存储设备。在某些实施例中,存储部件还可以包括远离一个或多个处理器的存储器,例如经由RF电路或外部端口以及通信网络访问的网络附加存储器,其中所述通信网络可以是因特网、一个或多个内部网、局域网(LAN)、广域网(WLAN)、存储局域网(SAN)等,或其适当组合。存储器控制器可控制设备的诸如CPU和外设接口之类的其他组件对存储器的访问。
所述缓存实例比如为一种可调用CPU资源和/或内存资源的缓存应用,比如为一个进程或者用于执行某种功能的一个程序,该进程或程序在独占一定的物理空间,该空间被定义为缓存,使得来自客户端的操作将数据写入该物理空间中或者自该物理空间中读取数据。在一种实施例中,所述缓存实例是由IP地址及端口号表示,但并不局限于此,在不同的实施例中,所述缓存实例可以有业务名称、所属机房、关联业务、缓存类型、状态、操作人、最近操作日期等一种或多种的信息来表示。
所述路由层用以通过哈希运算为每一缓存实例映射一哈希槽。所述哈希值为一键值(key),于实例的操作中,所述业务请求中包含的数据为key-value数据,至少一个所述哈希值与一哈希槽(hash slot)相对应。所述哈希槽可以通过哈希函数将特定的键值信息映射到特定的数据信息,这可以保证键值信息和数据信息之间一一对应的关系。例如,可以将键值空间分割为16384个哈希槽,而每一个上述存储节点可以包括一部分上述哈希槽,并且使得每一个存储节点中的哈希槽数量相等。通常,可以使用键的CRC16编码对16384取模来计算一个指定键值信息所属的哈希槽。
所述至少一客户端从所述多个存储节点中确定多个缓存实例并提交业务请求,以及接收经由所述路由层反馈的业务执行结果。或者,所述至少一客户端向路由层提交业务请求并经由一管理平台从所述多个存储节点中确定多个缓存实例,以及接收经由所述路由层反馈的业务执行结果。在本申请的某些实施例中,所述至少一客户端例如为包括存储器、存储器控制器、一个或多个处理单元(CPU)、外设接口、RF电路、音频电路、扬声器、麦克风、输入/输出(I/O)子系统、显示屏、其他输出或控制设备,以及外部端口等组件的计算机,所述计算机中的这些组件通过一条或多条通信总线或信号线进行通信。
于一实施例中,所述至少一客户端从所述多个存储节点中确定多个缓存实例之后向路由层提交业务请求,或者所述至少一客户端向路由层提交业务请求并经由一管理平台从所述多个存储节点中确定多个缓存实例。在不同的实施例中,所述业务请求包括新建缓存实例业务请求、扩容缓存实例业务请求、或缩容缓存实例业务请求中的一种。在本实施例中,下面将以所述至少一客户端从所述多个存储节点中确定多个缓存实例并提交新建缓存实例业务请求为例进行说明。
于一实施例中,依据所述至少一客户端指定的业务缓存容量及每一缓存实例可支配的内存空间来确定所述多个缓存实例的个数。比如,依据所述客户端指定的业务缓存容量为48G,并确认每一缓存实例可支配的内存空间为8G,则确定所述多个缓存实例的个数为6个缓存实例。
所述管理平台接收提交的业务请求,并依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集,使每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例映射至相同的哈希槽中,并确保每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例位于不同的存储节点中。所述管理平台例如为一虚拟的分布式缓存管理系统,比如顺网科技公司的顺网分布式缓存系统hours,其可以通过统一化的配置平台对缓存实例(Redis或MemCache)以缓存业务为单位进行管理。hours能对缓存数据进行数据冗余,保证了系统的高可用性。
于一实施例中,所述副缓存实例为操作优先级低于主缓存实例的读写缓存实例或只读缓存实例,在本实施例中,所述副缓存实例为操作优先级低于主缓存实例的可读写缓存实例。
于一实施例中,所述管理平台还用于确定所述多个缓存实例中各缓存实例所在的IP地址分布以及各缓存实例与哈希槽映射关系,以便依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集。
复请参阅图3,如图所示的整个缓存业务的新建缓存实例业务请求将请求数据附带的关键字在哈希后,将对应的新建缓存实例业务请求均匀分布在两个连续的哈希槽区间上[0,1023]以及[1024,2047]。图3中的A,B表示为基于所述新建缓存实例业务请求新建的缓存实例,所述每一组缓存实例集由一个哈希槽区间表示,比如[0,1023]中的A,B表示为一组缓存实例集,[1024,2047]中的B,A表示为另一组缓存实例集,在[0,1023]组的缓存实例集中A表示为主缓存实例,B表示为副缓存实例,在[1024,2047]组的缓存实例集中表示为B主缓存实例,A表示为副缓存实例,体现在图中,每一个哈希槽区间处于缓存实例第1行的是该哈希槽区间的高优先级缓存实例(又称主缓存实例,能读写数据,在读数据时被优先读取,下同);处于缓存实例第2行的是该哈希槽区间的低优先级缓存实例(又称从缓存实例,能读写数据,在读数据时被滞后读取,下同);即在这个哈希槽区间下低优先级缓存实例是高优先级缓存实例的备份。即,图3中[0,1023]的缓存实例A是哈希槽区间[0,1023]的高优先级缓存实例,图3中[0,1023]的缓存实例B是哈希槽区间[0,1023]的低优先级缓存实例,在哈希槽区间[0,1023]中,缓存实例B是缓存实例A的备份,其中,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B映射至相同的哈希槽中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A映射至相同的哈希槽中,而且,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B位于不同的存储节点中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A位于不同的存储节点中。
在具体的某一实施例中,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B映射至相同的哈希槽中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A映射至相同的哈希槽中,而且,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B位于不同IP地址的存储节点中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A位于不同IP地址的存储节点中。
在具体的另一实施例中,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B映射至相同的哈希槽中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A映射至相同的哈希槽中,而且,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B位于不同物理服务器或物理主机的存储节点中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A位于不同物理服务器或物理主机的存储节点中。
本申请的分布式缓存管理系统在新建的缓存实例集时能够确保映射于同一个哈希槽区间或者哈希槽上的主缓存实例和副缓存实例(亦或称之为从缓存实例)被配置在不同的存储节点(IP地址或者物理主机)上,这样,即便一个IP地址或者物理主机上所有的缓存实例都被挂起时,也不会导致业务数据部分丢失,进而可以确保操作业务能够正常运行。
在本申请分布式缓存管理系统的另一实施状态下,所述管理平台通过确定将所述多个缓存实例进行遍历的次数、每次遍历的路径以及所述路径上缓存实例的个数,再依据所述次数、路径以及所述路径上缓存实例的个数遍历所述多个缓存实例,以将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集。于一实施例中,所述管理平台通过各缓存实例的IP地址分布将同一IP地址中缓存实例的最多个数确定为遍历次数,依据所述多个缓存实例的总个数及所述遍历次数确定所述路径上缓存实例的个数,以及依据各IP地址中存在的缓存实例的数量从多到少来确定每一路径上缓存实例的遍历次序。
于一实施例中,所述管理平台还用以将每一路径中的先遍历的缓存实例配置为主缓存实例,将所述主缓存实例之后遍历的缓存实例配置为对应所述主缓存实例的副缓存实例以形成一组缓存实例集,用以将每一路径中的最后遍历的缓存实例配置为主缓存实例,下一路径中首次遍历的缓存实例配置为对应所述主缓存实例的副缓存实例以形成另一组缓存实例集。
为了进一步说明本申请提供的分布式缓存管理系统在新建缓存实例时的作业原理,以下将进行原理性说明,假设用户在客户端通过管理平台(例如hours配置平台)指定了一个冗余度是2,哈希槽区间数是n(n>1)的新建业务,然后管理平台自动选择n台缓存实例C={c1,c2,c3,...,cn},所述的缓存实例的IP地址必须满足一个条件,即该些缓存实例分布在m个IP地址I={IP1,IP2,IP3,...,IPm}(2≤m≤n)上,且
Figure GDA0002304706660000171
其中IPi∈I,N(IPi)是IP为IPi的缓存实例的数量,max(N(IPi))代表N(IPi)的最大值,/是整除符号,下同。通过以下步骤就能完成新建业务:
1)将确定的多个缓存实例根据IP地址进行分类,根据N(IPi)的大小从大到小排序,即各IP地址中存在的缓存实例的数量从多到少来排序;
2)依据所述多个缓存实例中各缓存实例的IP地址分布将同一IP地址中缓存实例的最多个数确定为遍历次数。具体为确定遍历缓存实例的次数max(N(IPi)),使每次遍历该些缓存实例的个数rj平均分布rj=n/max(N(IPi))+x(其中0≤j<max(N(IPi)),下同。当j<n%(max(N(IPi)))(其中%是取余符号,下同)时,x=1;反之,x=0;
3)遍历该些缓存实例的次数为max(N(IPi)),第j次先确定出IPmax(IPmax是根据N(IPi)从大到小排序后得到的最大IP或缓存实例个数的最多的IP,下同)上未被遍历过的一个缓存实例作为起点遍历除了IPmax的上IP,选择这些IP下未被遍历过的一个缓存实例,这样可以得到第j条遍历的路径
Figure GDA0002304706660000172
其中ck取自缓存实例集合C,ck∈Rj
4)按其按遍历顺序将
Figure GDA0002304706660000173
Figure GDA0002304706660000174
Figure GDA0002304706660000175
的c1相连,这样就得了只有一个环的实例分布图;按照所述实例分布图,给每一个哈希槽区间按边顺序分配给每个区间。
复请参阅图5a或图5b,如图所示:客户端指定了一个冗余度的数值是2,哈希槽区间数是6的新建业务,A,B,C,D,E,F是依据指定的业务缓存容量及每一缓存实例可支配的内存空间来确定出来的缓存实例,其中,缓存实例A,B的IP地址是IP1,缓存实例C,E的IP地址是IP2,缓存实例D的IP地址是IP3,缓存实例F的IP地址是IP4。
先对缓存实例IP进行分类后根据N(IPi)的大小从大到小(从多到少)排序,再计算出max(N(IPi))=2,r0=6/2+0=3,r1=6/2+0=3,然后遍历出2条路径为R0={A,C,D}即黄线,R1={B,E,F}即红线,接着将缓存实例D和缓存实例B相连,缓存实例F和缓存实例A相连即蓝线,最后形成了实例分布图。请参阅图6,显示为图5a中的实例分布图以缓存实例A为起点的新建业务的对照描述示意图。
当然,在其他的实施方式中,还可以有另外一种确定路径的状态,比如图5b所示的状态,依序将缓存实例B、C、D确定为路径1,将A、E、F确定为路径1,接着将将路径1的尾和路径2的首进行相连,即缓存实例D和缓存实例A相连,将路径2的尾和路径1的首进行相连,即缓存实例F和缓存实例B相连,最后形成了实例分布图,以缓存实例B为起点的新建业务的对照描述在此不予赘述。
通过本申请的分布式缓存管理系统,可以确保在同一哈希槽区间(具体为同一哈希槽)下有2个不同存储节点(IP地址)的缓存实例,并且这2个缓存实例的优先级不同,即,每个缓存实例仅在1个哈希槽区间(具体为同一哈希槽)上有个最高优先级,即为高优先级的缓存实例。该新建业务构成的缓存实例分布图只能有1个环,即缓存实例分布图只有1个连通分量,进而能够确保映射于同一个区间或者哈希槽上的主缓存实例和副缓存实例(亦或称之为从缓存实例)被配置在不同的存储节点(IP地址或者物理主机)上,这样,即便一个存储节点(IP地址或者物理主机)上所有的缓存实例都被挂起时,也不会导致业务数据部分丢失,进而可以确保操作业务能够正常运行。
本申请还提供一种数据管理系统,于一实施例中,所述的数据管理系统例如为由多个计算机或其他处理系统(例如服务器、主机等)组成的云存储或云计算系统,比如MemCache分布式缓存系统和Redis分布式缓存系统等。所述的数据管理系统包括多个存储节点,各该存储节点中预置有至少一个缓存实例,所述多个存储节点中的多个缓存实例被配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集,其中,每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例映射至相同的哈希槽中,且每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例位于不同的存储节点中。
在本申请的某些实施方式中,各该存储节点中预置有至少一个缓存实例。所述分布式缓存是其中将数据被存储在多个存储节点(例如为主机)上的缓存,所述存储节点是被配置为支持分布式缓存的一个或多个节点的计算机或服务器或其他处理系统,每一个节点包括分布式缓存的一个或多个数据模块。在一种实施方式中,所述的多个存储节点位于不同的IP地址中。在另一种实施方式中,所述的多个存储节点也可以位于不同的物理服务器中。
比如,所述存储节点例如为一台物理存储服务器、一台位于某一IP地址中的主机、或者设置在一台主机中的存储部件。其中,所述存储部件可包括高速随机存取存储器,并且还可包括非易失性存储器,例如一个或多个磁盘存储设备、闪存设备或其他非易失性固态存储设备。在某些实施例中,存储部件还可以包括远离一个或多个处理器的存储器,例如经由RF电路或外部端口以及通信网络访问的网络附加存储器,其中所述通信网络可以是因特网、一个或多个内部网、局域网(LAN)、广域网(WLAN)、存储局域网(SAN)等,或其适当组合。存储器控制器可控制设备的诸如CPU和外设接口之类的其他组件对存储器的访问。
所述缓存实例比如为一种可调用CPU资源和/或内存资源的缓存应用,比如为一个进程或者用于执行某种功能的一个程序,该进程或程序在独占一定的物理空间,该空间被定义为缓存,使得来自客户端的操作将数据写入该物理空间中或者自该物理空间中读取数据。在一种实施例中,所述缓存实例是由IP地址及端口号表示,但并不局限于此,在不同的实施例中,所述缓存实例可以有业务名称、所属机房、关联业务、缓存类型、状态、操作人、最近操作日期等一种或多种的信息来表示。每一缓存实例映射一哈希槽,每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例映射至相同的哈希槽中。
所述哈希槽与若干哈希值对应,且每一个哈希槽中的哈希值是连续的,多个哈希槽组成的区间是连续的,所述每一组缓存实例集由一个哈希槽区间表示。所述哈希值为一键值(key),于实例的操作中,所述业务请求中包含的数据为key-value数据,至少一个所述哈希值与一哈希槽(hash slot)相对应。所述哈希槽可以通过哈希函数将特定的键值信息映射到特定的数据信息,这可以保证键值信息和数据信息之间一一对应的关系。例如,可以将键值空间分割为16384个哈希槽,而每一个上述存储节点可以包括一部分上述哈希槽,并且使得每一个存储节点中的哈希槽数量相等。通常,可以使用键的CRC16编码对16384取模来计算一个指定键值信息所属的哈希槽。
如图3所示,整个缓存业务的新建缓存实例业务请求将请求数据附带的关键字在哈希后,将对应的新建缓存实例业务请求均匀分布在两个连续的哈希槽区间上[0,1023]以及[1024,2047]。图3中的A,B表示为基于所述新建缓存实例业务请求新建的缓存实例,所述每一组缓存实例集由一个哈希槽区间表示,比如[0,1023]中的A,B表示为一组缓存实例集,[1024,2047]中的B,A表示为另一组缓存实例集,在[0,1023]组的缓存实例集中A表示为主缓存实例,B表示为副缓存实例,在[1024,2047]组的缓存实例集中表示为B主缓存实例,A表示为副缓存实例,体现在图中,每一个哈希槽区间处于缓存实例第1行的是该哈希槽区间的高优先级缓存实例(又称主缓存实例,能读写数据,在读数据时被优先读取,下同);处于缓存实例第2行的是该哈希槽区间的低优先级缓存实例(又称从缓存实例,能读写数据,在读数据时被滞后读取,下同);即在这个哈希槽区间下低优先级缓存实例是高优先级缓存实例的备份。即,图3中[0,1023]的缓存实例A是哈希槽区间[0,1023]的高优先级缓存实例,图3中[0,1023]的缓存实例B是哈希槽区间[0,1023]的低优先级缓存实例,在哈希槽区间[0,1023]中,缓存实例B是缓存实例A的备份,其中,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B映射至相同的哈希槽中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A映射至相同的哈希槽中,而且,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B位于不同的存储节点中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A位于不同的存储节点中。
在具体的某一实施例中,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B映射至相同的哈希槽中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A映射至相同的哈希槽中,而且,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B位于不同IP地址的存储节点中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A位于不同IP地址的存储节点中。
在具体的另一实施例中,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B映射至相同的哈希槽中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A映射至相同的哈希槽中,而且,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B位于不同物理服务器或物理主机的存储节点中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A位于不同物理服务器或物理主机的存储节点中。
通过本申请的数据管理系统提供的存储架构,可以确保在同一哈希槽区间(具体为同一哈希槽)下有2个不同存储节点(IP地址)的缓存实例,并且这2个缓存实例的优先级不同,即,每个缓存实例仅在1个哈希槽区间(具体为同一哈希槽)上有个最高优先级,即为高优先级的缓存实例。该新建业务构成的缓存实例分布图只能有1个环,即缓存实例分布图只有1个连通分量,进而能够确保映射于同一个区间或者哈希槽上的主缓存实例和副缓存实例(亦或称之为从缓存实例)被配置在不同的存储节点(IP地址或者物理主机)上,这样,即便一个存储节点(IP地址或者物理主机)上所有的缓存实例都被挂起时,也不会导致业务数据部分丢失,进而可以确保操作业务能够正常运行。
本申请还提供一种分布式缓存管理方法,应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中,其中,各该存储节点中预置有至少一个缓存实例,所述分布式缓存网络比如为MemCache分布式缓存网络架构和Redis分布式缓存网络架构。在以下描述的实施例中,暂以Redis分布式缓存网络架构(请参阅图1)为例进行说明,但需要特别说明的是,本申请揭露的技术思想亦可应用在例如MemCache分布式缓存网络中,特此述明。
在本申请的某些实施方式中,各该存储节点中预置有至少一个缓存实例。所述分布式缓存是其中将数据被存储在多个存储节点(例如为主机)上的缓存,所述存储节点是被配置为支持分布式缓存的一个或多个节点的计算机或服务器或其他处理系统,每一个节点包括分布式缓存的一个或多个数据模块。在一种实施方式中,所述的多个存储节点位于不同的IP地址中。在另一种实施方式中,所述的多个存储节点也可以位于不同的物理服务器中。
比如,所述存储节点例如为一台物理存储服务器、一台位于某一IP地址中的主机、或者设置在一台主机中的存储部件。其中,所述存储部件可包括高速随机存取存储器,并且还可包括非易失性存储器,例如一个或多个磁盘存储设备、闪存设备或其他非易失性固态存储设备。在某些实施例中,存储部件还可以包括远离一个或多个处理器的存储器,例如经由RF电路或外部端口以及通信网络访问的网络附加存储器,其中所述通信网络可以是因特网、一个或多个内部网、局域网(LAN)、广域网(WLAN)、存储局域网(SAN)等,或其适当组合。存储器控制器可控制设备的诸如CPU和外设接口之类的其他组件对存储器的访问。
所述缓存实例比如为一种可调用CPU资源和/或内存资源的缓存应用,比如为一个进程或者用于执行某种功能的一个程序,该进程或程序在独占一定的物理空间,该空间被定义为缓存,使得来自客户端的操作将数据写入该物理空间中或者自该物理空间中读取数据。在一种实施例中,所述缓存实例是由IP地址及端口号表示,但并不局限于此,在不同的实施例中,所述缓存实例可以有业务名称、所属机房、关联业务、缓存类型、状态、操作人、最近操作日期等一种或多种的信息来表示。
在本申请的某些实施例中,所述至少一客户端例如为包括存储器、存储器控制器、一个或多个处理单元(CPU)、外设接口、RF电路、音频电路、扬声器、麦克风、输入/输出(I/O)子系统、显示屏、其他输出或控制设备,以及外部端口等组件的计算机,所述计算机中的这些组件通过一条或多条通信总线或信号线进行通信。
所述路由层用以通过哈希运算为每一缓存实例映射一哈希槽。所述哈希值为一键值(key),于实例的操作中,所述业务请求中包含的数据为key-value数据,至少一个所述哈希值与一哈希槽(hash slot)相对应。所述哈希槽可以通过哈希函数将特定的键值信息映射到特定的数据信息,这可以保证键值信息和数据信息之间一一对应的关系。例如,可以将键值空间分割为16384个哈希槽,而每一个上述存储节点可以包括一部分上述哈希槽,并且使得每一个存储节点中的哈希槽数量相等。通常,可以使用键的CRC16编码对16384取模来计算一个指定键值信息所属的哈希槽。
请参阅图7,显示为本申的分布式缓存管理方法的再一实施例的流程示意图,如图所示,本申请提供的分布式缓存管理方法包括以下步骤:
于步骤S31中,从至少一个存储节点中确定至少一个缓存实例作为扩容实例并提交扩容请求;于一实施例中,所述至少一客户端从至少一个存储节点中确定至少一个缓存实例作为扩容实例并提交扩容请求,或者所述至少一客户端向路由层提交扩容请求并经由一管理平台从至少一个存储节点中确定至少一个缓存实例作为扩容实例。于具体的实施例中下,依据所述至少一客户端指定的业务缓存容量及每一缓存实例可支配的内存空间来确定至少一个缓存实例,在本实施例的描述中,暂以确定一个缓存实例为例进行说明。
于步骤S32中,从所述多个存储节点中确定一组由主缓存实例及与其对应的至少一个副缓存实例组成的缓存实例集,于一实施例中,经由一管理平台从所述多个存储节点中确定一组由主缓存实例及与其对应的至少一个副缓存实例组成的缓存实例集,其中,所述主缓存实例与所述至少一个副缓存实例映射至相同的哈希槽中,且所述主缓存实例与所述至少一个副缓存实例位于不同的存储节点中。
于步骤S33中,将该组缓存实例集裂变为两组缓存实例集;于一实施例中,经由一管理平台将该组缓存实例集裂变为两组缓存实例集,其中,于第一组缓存实例集中,所述扩容实例被配置为所述主缓存实例的第一副缓存实例,所述副缓存实例被配置为所述主缓存实例的第二副缓存实例;于第二组缓存实例集中,所述扩容实例被配置为主缓存实例,原副缓存实例被配置为所述第二组缓存实例集中主缓存实例的第一副缓存实例,原主缓存实例被配置为所述第二组缓存实例集中主缓存实例的第二副缓存实例;并且,于所述第一、第二组缓存实例集中,所述主缓存实例、第一副缓存实例、以及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点(IP地址或者物理主机)中。于一实施例中,同一缓存实例集合中的主缓存实例操作优先级高于所述第一副缓存实例,所述第一副缓存实例操作优先级高于所述第二副缓存实例。所述第一或二副缓存实例为读写缓存实例或只读缓存实例,在本实施例中,比如第一副缓存实例是为主缓存实例提供备份的读写缓存实例(从缓存实例),第二副缓存实例是为主缓存实例提供备份的只读缓存实例。
在本申请分布式缓存管理方法提供的扩容请求业务的一种情况下,于上述步骤S32的实际操作过程中,例如从所述多个存储节点中确定的缓存实例集有多组的情况下,判断所述扩容实例的IP地址与第一组缓存实例集的主缓存实例或副缓存实例的IP地址是否相同时,若相同,则再从所述多个存储节点中确定第二组缓存实例集;若不相同则选用上述第一组缓存实例集作为可裂变的缓存实例集;若判断所述扩容实例的IP地址与第二组缓存实例集的主缓存实例或副缓存实例的IP地址也相同时,则再从所述多个存储节点中确定第三组缓存实例集;重复判断过程,直至判断所述扩容实例的IP地址与一组缓存实例集中主缓存实例或副缓存实例的IP地址不相同。
在本申请分布式缓存管理方法提供的扩容请求业务的另一种情况下,于上述步骤S33的实际操作过程中,当判断第一组缓存实例集中已配置有一扩容实例(比如称之为第一扩容实例)时,从所述多个存储节点中确定第二组缓存实例集,以便将另一扩容实例(比如称之为第二扩容实例)配置于所述第二组缓存实例集中;同理,当判断第二组缓存实例集中也已经配置有扩容实例(比如称之为第二扩容实例)时,从所述多个存储节点中确定第三组缓存实例集,以便将再一扩容实例(比如称之为第三扩容实例)配置于所述第三组缓存实例集中;类似情况,不予赘述。
在本申请分布式缓存管理方法提供的扩容请求业务的再一种情况下,于上述步骤S33的实际操作过程中,当判断所述第一组缓存实例集中已配置有一扩容实例(比如称之为第一扩容实例)时,从所述多个存储节点中确定第二组缓存实例集,并将所述第一组缓存实例集中已配置的扩容实例迁移于所述第二组缓存实例集中,以便将另一扩容实例(比如称之为第二扩容实例)可配置于所述第一组缓存实例集中。同理,当判断第二组缓存实例集中也已经配置有第二扩容实例时,从所述多个存储节点中确定第三组缓存实例集,并将所述第二组缓存实例集中已配置的第二扩容实例扩容实例迁移于所述第三组存实例集中,以便将再一扩容实例(比如称之为第三扩容实例)可配置于所述第二组缓存实例集中。类似情况,不予赘述。
为了进一步说明本申请提供的分布式缓存管理方法在扩容缓存实例时的作业原理,以下将进行原理性说明,本申请提供的扩容方法选择一个新增的缓存实例x,满足IP(ci)≠IP(x)且IP(cj)≠IP(x)(其中IP(x)是实例x的IP地址),通过以下步骤就能选择出新增的缓存实例:
1)输入一个扩容实例(候选的缓存实例)cx,找到所有能选择扩容实例cx的边集E{ex};所述边集E{ex}表示为一组由主缓存实例及与其对应的至少一个副缓存实例组成的缓存实例集。
2)遍历所述边集E{ex}中的每一条边(每一个缓存实例的IP地址),对于所述边集E{ex}中的每一条边ex,如果ex已选择缓存实例cy,则让cy作为移动点;在全部的边中寻找没有选择缓存实例且能选择cy的边ey,找到则让边ex选择cx,边ey选择cy,结束遍历;
3)对于所述边集E{ex}中的每一条边ex,如果ex没有选择缓存实例,则让ex边选择cx,结束遍历;
4)遍历结束后,如发现没有一条边可以选择cx,则舍弃cx
重复1~4步,直到选择的缓存实例数为n,或者遍历完所有空闲的缓存实例。
请参阅图8a至图8d,显示为扩容业务中依次加入不同缓存实例的实例分布图,如图所示,A,B,C,D,E,F代表不同的IP地址,1,2,3代表不同的端口号。“IP地址:端口“就是一个缓存实例的名字,如“A:1、C:1、B:1、D:1”。缓存实例图的边方向是顺时针。该业务中依次加入缓存实例E:1,B:2,F:1,B:3。请参阅图8a-8d显示的业务扩容业务的缓存实例图。
如图所示,当E:1加入时,边
Figure GDA0002304706660000241
没有选择缓存实例,则边
Figure GDA0002304706660000242
选择E:1,加入E:1后的情况图8a所示。
当B:2加入时,边
Figure GDA0002304706660000243
已选择缓存实例,为此,将边
Figure GDA0002304706660000244
选择的E:1作为移动点;发现边
Figure GDA0002304706660000245
没有选择缓存实例,因此让边
Figure GDA0002304706660000246
选择B:2,边
Figure GDA0002304706660000247
选择E:1,加入B:2后的情况如图8b所示。
当加入F:1时,发现边
Figure GDA0002304706660000248
无法选择F:1,否则B:2不能放入任一没有选择缓存实例的边上;为此接着试着让边
Figure GDA0002304706660000249
选择F:1,发现可以让边
Figure GDA00023047066600002410
选择E:1,加入F:1后的情况如图8c所示。
当加入B:3时,发现边
Figure GDA00023047066600002411
无法选择B:3,否则B:2不能放入任一没有选择缓存实例的边上;为此接着试着让边
Figure GDA00023047066600002412
选择B:3,发现可以让边
Figure GDA00023047066600002413
选择F:1,加入B:3后的情况如图8d所示。
简而言之,本申请提供的分布式缓存管理方法的成倍扩容业务的本质是将每一个区间分裂成两个区间,在缓存实例图中就是将每一条边扩展成两条边,即一条边
Figure GDA00023047066600002414
分裂成两条边
Figure GDA00023047066600002415
以及
Figure GDA00023047066600002416
例如,图8a-8d业务扩容业务的缓存实例图,图9a-图9d所示的缓存实例图的边方向是顺时针。图9a是图8a-8d业务扩容前的缓存实例图,图9c是对图9a业务的简单描述,图9b对图9a业务扩容后的缓存实例图,9d是对图9b业务的对照描述示意图。
图9c的第1行是一个扩容之前的连续的哈希槽区间,第2行是高优先级缓存实例,第3行是低优先级缓存实例。图9d的第1行是一个扩容之后的连续的哈希槽区间,第2行是高优先级缓存实例,第3行是低优先级缓存实例,第4行是只读缓存实例。
具体地,在执行扩容操作之前,诚如图9c所示的状态,在哈希槽区间[0,511]中,缓存实例A:1为该组的主缓存实例,缓存实例C:1是缓存实例A:1的副缓存实例,缓存实例A:1和缓存实例C:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[512,1023]中,缓存实例C:1为该组的主缓存实例,缓存实例D:1是主缓存实例C:1的副缓存实例,缓存实例C:1和缓存实例D:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[1024,1535]中,缓存实例D:1为该组的主缓存实例,缓存实例B:1是主缓存实例D:1的副缓存实例,缓存实例D:1和缓存实例B:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[1536,2047]中,缓存实例B:1为该组的主缓存实例,缓存实例A:1是主缓存实例B:1的副缓存实例,缓存实例B:1和缓存实例A:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中。
在执行扩容操作之后,诚如图9d所示的状态,由于缓存实例B:2的加入,原哈希槽区间[0,511]被裂变为两个哈希槽区间[0,255]及[256,511],其中,在哈希槽区间[0,255]中,缓存实例A:1为该组的主缓存实例,缓存实例B:2是缓存实例A:1的第一副缓存实例,缓存实例C:1是主缓存实例A:1的第二副缓存实例,且缓存实例A:1、缓存实例B:2及缓存实例C:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[256,511]中,缓存实例B:2为该组的主缓存实例,缓存实例C:1是主缓存实例B:2的第一副缓存实例,缓存实例A:1是主缓存实例B:2的第二副缓存实例,且缓存实例B:2、缓存实例C:1及缓存实例A:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中。
由于缓存实例B:3的加入,原哈希槽区间[512,1023]被裂变为两个哈希槽区间[512,767]及[768,1023],其中,在哈希槽区间[512,767]中,缓存实例C:1为该组的主缓存实例,缓存实例B:3是主缓存实例C:1的第一副缓存实例,缓存实例D:1是主缓存实例C:1的第二副缓存实例,且缓存实例C:1、缓存实例B:3及缓存实例D:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[768,1023]中,缓存实例B:3为该组的主缓存实例,缓存实例D:1是主缓存实例B:3的第一副缓存实例,缓存实例C:1是主缓存实例B:3的第二副缓存实例,且缓存实例B:3、缓存实例D:1及缓存实例C:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中。
由于缓存实例E:1的加入,原哈希槽区间[1024,1535]被裂变为两个哈希槽区间[1024,1279]及[1280,1535],其中,在哈希槽区间[1024,1279]中,缓存实例D:1为该组的主缓存实例,缓存实例E:1是主缓存实例D:1的第一副缓存实例,缓存实例B:1是主缓存实例D:1的第二副缓存实例,且缓存实例D:1、缓存实例E:1及缓存实例B:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[1280,1535]中,缓存实例E:1为该组的主缓存实例,缓存实例B:1是主缓存实例E:1的第一副缓存实例,缓存实例D:1是主缓存实例E:1的第二副缓存实例,且缓存实例E:1、缓存实例B:1及缓存实例D:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中。
由于缓存实例F:1的加入,原哈希槽区间[1536,2047]被裂变为两个哈希槽区间[1536,1791]及[1792,2047],其中,在哈希槽区间[1536,1791]中,缓存实例B:1为该组的主缓存实例,缓存实例F:1是主缓存实例B:1的第一副缓存实例,缓存实例A:1是主缓存实例B:1的第二副缓存实例,且缓存实例B:1、缓存实例F:1及缓存实例A:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[1792,2047]中,缓存实例F:1为该组的主缓存实例,缓存实例A:1是主缓存实例F:1的第一副缓存实例,缓存实例B:1是主缓存实例F:1的第二副缓存实例,且缓存实例F:1、缓存实例A:1及缓存实例B:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中。
由于成倍扩容是通过贪心思想尽可能地选择更多的缓存实例,成倍扩容的算法复杂度为O(mn2),其中m是放入缓存实例次数。
本申请的分布式缓存管理方法在执行扩容操作后同一个哈希槽区间中的所有缓存实例IP地址不同,这样即使一个IP上的所有实例挂起时,也不会导致业务数据部分丢失,使得业务能正常进行。
本申请还提供一种分布式缓存管理系统,应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中,所述分布式缓存网络比如为MemCache分布式缓存网络架构和Redis分布式缓存网络架构。在以下描述的实施例中,暂以Redis分布式缓存网络架构(例如图1所示为的Redis集群(Redis cluster)的架构)为例进行说明,但需要特别说明的是,本申请揭露的技术思想亦可应用在例如MemCache分布式缓存网络架构中,特此述明。
所述分布式缓存是其中将数据被存储在多个存储节点(例如为主机)上的缓存,所述存储节点是被配置为支持分布式缓存的一个或多个节点的计算机或服务器或其他处理系统,每一个节点包括分布式缓存的一个或多个数据模块。在一种实施方式中,所述的多个存储节点位于不同的IP地址中。在另一种实施方式中,所述的多个存储节点也可以位于不同的物理服务器中。
比如,所述存储节点例如为一台物理存储服务器、一台位于某一IP地址中的主机、或者设置在一台主机中的存储部件。其中,所述存储部件可包括高速随机存取存储器,并且还可包括非易失性存储器,例如一个或多个磁盘存储设备、闪存设备或其他非易失性固态存储设备。在某些实施例中,存储部件还可以包括远离一个或多个处理器的存储器,例如经由RF电路或外部端口以及通信网络访问的网络附加存储器,其中所述通信网络可以是因特网、一个或多个内部网、局域网(LAN)、广域网(WLAN)、存储局域网(SAN)等,或其适当组合。存储器控制器可控制设备的诸如CPU和外设接口之类的其他组件对存储器的访问。
所述缓存实例比如为一种可调用CPU资源和/或内存资源的缓存应用,比如为一个进程或者用于执行某种功能的一个程序,该进程或程序在独占一定的物理空间,该空间被定义为缓存,使得来自客户端的操作将数据写入该物理空间中或者自该物理空间中读取数据。在一种实施例中,所述缓存实例是由IP地址及端口号表示,但并不局限于此,在不同的实施例中,所述缓存实例可以有业务名称、所属机房、关联业务、缓存类型、状态、操作人、最近操作日期等一种或多种的信息来表示。
所述至少一客户端从所述多个存储节点中确定多个缓存实例并提交业务请求,以及接收经由所述路由层反馈的业务执行结果。在本申请的某些实施例中,所述至少一客户端例如为包括存储器、存储器控制器、一个或多个处理单元(CPU)、外设接口、RF电路、音频电路、扬声器、麦克风、输入/输出(I/O)子系统、显示屏、其他输出或控制设备,以及外部端口等组件的计算机,所述计算机中的这些组件通过一条或多条通信总线或信号线进行通信。
所述路由层用以通过哈希运算为每一缓存实例映射一哈希槽。所述哈希值为一键值(key),于实例的操作中,所述业务请求中包含的数据为key-value数据,至少一个所述哈希值与一哈希槽(hash slot)相对应。所述哈希槽可以通过哈希函数将特定的键值信息映射到特定的数据信息,这可以保证键值信息和数据信息之间一一对应的关系。例如,可以将键值空间分割为16384个哈希槽,而每一个上述存储节点可以包括一部分上述哈希槽,并且使得每一个存储节点中的哈希槽数量相等。通常,可以使用键的CRC16编码对16384取模来计算一个指定键值信息所属的哈希槽。
所述多个存储节点中的每一存储节点中预置有至少一个缓存实例,所述多个存储节点中具有至少一组由主缓存实例及与其对应的至少一个副缓存实例组成的缓存实例集,其中,所述主缓存实例与所述至少一个副缓存实例映射至相同的哈希槽中,且所述主缓存实例与所述至少一个副缓存实例位于不同的存储节点中。
所述客户端从至少一个存储节点中确定至少一个缓存实例作为扩容实例并提交扩容请求,以及接收经由所述路由层反馈的扩容结果;于具体的实施例中下,依据所述至少一客户端指定的业务缓存容量及每一缓存实例可支配的内存空间来确定至少一个缓存实例,在本实施例的描述中,暂以确定一个缓存实例为例进行说明。
所述管理平台接收经由所述路由层提交的扩容请求,将所述多个存储节点中的一组缓存实例集裂变为两组缓存实例集;所述管理平台例如为一虚拟的分布式缓存管理系统,比如顺网科技公司的顺网分布式缓存系统hours,其可以通过统一化的配置平台对缓存实例(Redis或MemCache)以缓存业务为单位进行管理。hours能对缓存数据进行数据冗余,保证了系统的高可用性。
其中,于第一组缓存实例集中,所述扩容实例被配置为所述主缓存实例的第一副缓存实例,所述副缓存实例被配置为所述主缓存实例的第二副缓存实例;于第二组缓存实例集中,所述扩容实例被配置为主缓存实例,原副缓存实例被配置为所述第二组缓存实例集中主缓存实例的第一副缓存实例,原主缓存实例被配置为所述第二组缓存实例集中主缓存实例的第二副缓存实例;并且,于所述第一、第二组缓存实例集中,所述主缓存实例、第一副缓存实例、以及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点(IP地址或者物理主机)中。于一实施例中,同一缓存实例集合中的主缓存实例操作优先级高于所述第一副缓存实例,所述第一副缓存实例操作优先级高于所述第二副缓存实例。所述第一或二副缓存实例为读写缓存实例或只读缓存实例,在本实施例中,比如第一副缓存实例是为主缓存实例提供备份的读写缓存实例(从缓存实例),第二副缓存实例是为主缓存实例提供备份的只读缓存实例。
在本申请分布式缓存管理系统提供的扩容请求业务在一种情况下,例如从所述多个存储节点中确定的缓存实例集有多组的情况下,所述管理平台还用于当判断所述扩容实例的IP地址与第一组缓存实例集的主缓存实例或副缓存实例的IP地址相同时,再从所述多个存储节点中确定第二组缓存实例集;重复判断过程,直至判断所述扩容实例的IP地址与一组缓存实例集中主缓存实例或副缓存实例的IP地址不相同。具体地,判断所述扩容实例的IP地址与第一组缓存实例集的主缓存实例或副缓存实例的IP地址是否相同时,若相同,则再从所述多个存储节点中确定第二组缓存实例集;若不相同则选用上述第一组缓存实例集作为可裂变的缓存实例集;若判断所述扩容实例的IP地址与第二组缓存实例集的主缓存实例或副缓存实例的IP地址也相同时,则再从所述多个存储节点中确定第三组缓存实例集;重复判断过程,直至判断所述扩容实例的IP地址与一组缓存实例集中主缓存实例或副缓存实例的IP地址不相同。
在本申请分布式缓存管理系统提供的扩容请求业务在另一种情况下,所述管理平台当判断第一组缓存实例集中已配置有一扩容实例(比如称之为第一扩容实例)时,从所述多个存储节点中确定第二组缓存实例集,以便将另一扩容实例(比如称之为第二扩容实例)配置于所述第二组缓存实例集中;同理,当判断第二组缓存实例集中也已经配置有扩容实例(比如称之为第二扩容实例)时,从所述多个存储节点中确定第三组缓存实例集,以便将再一扩容实例(比如称之为第三扩容实例)配置于所述第三组缓存实例集中;类似情况,不予赘述。
在本申请分布式缓存管理系统提供的扩容请求业务在另一种情况下,所述管理平台从所述多个存储节点中确定的缓存实例集有多组的情况下,所述管理平台还用于当判断所述第一组缓存实例集中已配置有一扩容实例(比如称之为第一扩容实例)时,从所述多个存储节点中确定第二组缓存实例集,并将所述第一组缓存实例集中已配置的扩容实例迁移于所述第二组缓存实例集中,以便将另一扩容实例(比如称之为第二扩容实例)可配置于所述第一组缓存实例集中。同理,当判断第二组缓存实例集中也已经配置有第二扩容实例时,从所述多个存储节点中确定第三组缓存实例集,并将所述第二组缓存实例集中已配置的第二扩容实例扩容实例迁移于所述第三组存实例集中,以便将再一扩容实例(比如称之为第三扩容实例)可配置于所述第二组缓存实例集中。类似情况,不予赘述。
为了进一步说明本申请提供的分布式缓存管理系统在扩容缓存实例时的作业原理,以下将进行原理性说明,本申请提供的系统主要是如何确定或选择一个新增的缓存实例x,满足IP(ci)≠IP(x)且IP(cj)≠IP(x)(其中IP(x)是实例x的IP地址),通过以下步骤就能选择出新增的缓存实例:
1)客户端选择或确定一个扩容实例(候选的缓存实例)cx,找到所有能选择扩容实例cx的边集E{ex};所述边集E{ex}表示为一组由主缓存实例及与其对应的至少一个副缓存实例组成的缓存实例集。
2)管理平台遍历所述边集E{ex}中的每一条边(每一个缓存实例的IP地址),对于所述边集E{ex}中的每一条边ex,如果ex已选择缓存实例cy,则让cy作为移动点;在全部的边中寻找没有选择缓存实例且能选择cy的边ey,找到则让边ex选择cx,边ey选择cy,结束遍历;
3)管理平台对于所述边集E{ex}中的每一条边ex,如果ex没有选择缓存实例,则让ex边选择cx,结束遍历;
4)管理平台遍历结束后,如发现没有一条边可以选择cx,则舍弃cx
重复1~4步,直到选择的缓存实例数为n,或者遍历完所有空闲的缓存实例。
图8a及图8b,A,B,C,D,E,F代表不同的IP地址,1,2,3代表不同的端口号。“IP地址:端口“就是一个缓存实例的名字,如“A:1、C:1、B:1、D:1”。缓存实例图的边方向是顺时针。该业务中依次加入缓存实例E:1,B:2,F:1,B:3。
当缓存实例E:1加入时,边
Figure GDA0002304706660000291
没有选择缓存实例,则边
Figure GDA0002304706660000292
选择E:1,加入E:1后的情况图8a所示。
当缓存实例B:2加入时,边
Figure GDA0002304706660000293
已选择缓存实例,为此,将边
Figure GDA0002304706660000294
选择的E:1作为移动点;发现边
Figure GDA0002304706660000295
没有选择缓存实例,因此让边
Figure GDA0002304706660000296
选择B:2,边
Figure GDA0002304706660000297
选择E:1,加入B:2后的情况如图8b所示。
当加入缓存实例F:1时,发现边
Figure GDA0002304706660000298
无法选择F:1,否则B:2不能放入任一没有选择缓存实例的边上;为此接着试着让边
Figure GDA0002304706660000299
选择F:1,发现可以让边
Figure GDA00023047066600002910
选择E:1,加入F:1后的情况如图8c所示。
当加入缓存实例B:3时,发现边
Figure GDA00023047066600002911
无法选择B:3,否则B:2不能放入任一没有选择缓存实例的边上;为此接着试着让边
Figure GDA0002304706660000301
选择B:3,发现可以让边
Figure GDA0002304706660000302
选择F:1,加入B:3后的情况如图8d所示。
简而言之,本申请提供的分布式缓存管理方法的成倍扩容业务的本质是将每一个区间分裂成两个区间,在缓存实例图中就是将每一条边扩展成两条边,即一条边
Figure GDA0002304706660000303
分裂成两条边
Figure GDA0002304706660000304
以及
Figure GDA0002304706660000305
例如,图8a-8d业务扩容业务的缓存实例图,图9a-9d所示的缓存实例图的边方向是顺时针。图9a是图8a-8d业务扩容前的缓存实例图,图9c是对图9a业务的简单描述,图9b对图9a业务扩容后的缓存实例图,9d是对图9b业务的对照描述示意图。
图9c的第1行是一个扩容之前的连续的哈希槽区间,第2行是高优先级缓存实例,第3行是低优先级缓存实例。图9d的第1行是一个扩容之后的连续的哈希槽区间,第2行是高优先级缓存实例,第3行是低优先级缓存实例,第4行是只读缓存实例。
具体地,在执行扩容操作之前,诚如图9c所示的状态,在哈希槽区间[0,511]中,缓存实例A:1为该组的主缓存实例,缓存实例C:1是缓存实例A:1的副缓存实例,缓存实例A:1和缓存实例C:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[512,1023]中,缓存实例C:1为该组的主缓存实例,缓存实例D:1是主缓存实例C:1的副缓存实例,缓存实例C:1和缓存实例D:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[1024,1535]中,缓存实例D:1为该组的主缓存实例,缓存实例B:1是主缓存实例D:1的副缓存实例,缓存实例D:1和缓存实例B:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[1536,2047]中,缓存实例B:1为该组的主缓存实例,缓存实例A:1是主缓存实例B:1的副缓存实例,缓存实例B:1和缓存实例A:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中。
在执行扩容操作之后,诚如图9d所示的状态,由于缓存实例B:2的加入,原哈希槽区间[0,511]被裂变为两个哈希槽区间[0,255]及[256,511],其中,在哈希槽区间[0,255]中,缓存实例A:1为该组的主缓存实例,缓存实例B:2是缓存实例A:1的第一副缓存实例,缓存实例C:1是主缓存实例A:1的第二副缓存实例,且缓存实例A:1、缓存实例B:2及缓存实例C:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[256,511]中,缓存实例B:2为该组的主缓存实例,缓存实例C:1是主缓存实例B:2的第一副缓存实例,缓存实例A:1是主缓存实例B:2的第二副缓存实例,且缓存实例B:2、缓存实例C:1及缓存实例A:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中。
由于缓存实例B:3的加入,原哈希槽区间[512,1023]被裂变为两个哈希槽区间[512,767]及[768,1023],其中,在哈希槽区间[512,767]中,缓存实例C:1为该组的主缓存实例,缓存实例B:3是主缓存实例C:1的第一副缓存实例,缓存实例D:1是主缓存实例C:1的第二副缓存实例,且缓存实例C:1、缓存实例B:3及缓存实例D:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[768,1023]中,缓存实例B:3为该组的主缓存实例,缓存实例D:1是主缓存实例B:3的第一副缓存实例,缓存实例C:1是主缓存实例B:3的第二副缓存实例,且缓存实例B:3、缓存实例D:1及缓存实例C:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中。
由于缓存实例E:1的加入,原哈希槽区间[1024,1535]被裂变为两个哈希槽区间[1024,1279]及[1280,1535],其中,在哈希槽区间[1024,1279]中,缓存实例D:1为该组的主缓存实例,缓存实例E:1是主缓存实例D:1的第一副缓存实例,缓存实例B:1是主缓存实例D:1的第二副缓存实例,且缓存实例D:1、缓存实例E:1及缓存实例B:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[1280,1535]中,缓存实例E:1为该组的主缓存实例,缓存实例B:1是主缓存实例E:1的第一副缓存实例,缓存实例D:1是主缓存实例E:1的第二副缓存实例,且缓存实例E:1、缓存实例B:1及缓存实例D:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中。
由于缓存实例F:1的加入,原哈希槽区间[1536,2047]被裂变为两个哈希槽区间[1536,1791]及[1792,2047],其中,在哈希槽区间[1536,1791]中,缓存实例B:1为该组的主缓存实例,缓存实例F:1是主缓存实例B:1的第一副缓存实例,缓存实例A:1是主缓存实例B:1的第二副缓存实例,且缓存实例B:1、缓存实例F:1及缓存实例A:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中;在哈希槽区间[1792,2047]中,缓存实例F:1为该组的主缓存实例,缓存实例A:1是主缓存实例F:1的第一副缓存实例,缓存实例B:1是主缓存实例F:1的第二副缓存实例,且缓存实例F:1、缓存实例A:1及缓存实例B:1映射至相同的哈希槽中且位于不同IP地址或主机的存储节点中。
由于成倍扩容是通过贪心思想尽可能地选择更多的缓存实例,成倍扩容的算法复杂度为O(mn2),其中m是放入缓存实例次数。本申请的分布式缓存管理系统在执行扩容操作后同一个哈希槽区间中的所有缓存实例IP地址不同,这样即使一个IP上的所有实例挂起时,也不会导致业务数据部分丢失,使得业务能正常进行。
本申请还提供一种数据管理系统,于一实施例中,所述的数据管理系统例如为由多个计算机或其他处理系统(例如服务器、主机等)组成的云存储或云计算系统,比如MemCache分布式缓存系统和Redis分布式缓存系统等。所述的数据管理系统包括多个存储节点,各该存储节点中预置有至少一个缓存实例,所述多个存储节点中具有至少两组缓存实例集,其中,所述至少两组缓存实例集分别配置有主缓存实例、对应所述主缓存实例的第一副缓存实例及第二副缓存实例,其中,第一组缓存实例集的第一副缓存实例被配置为第二组缓存实例集的主缓存实例,第一组缓存实例集的第二副缓存实例被配置为第二组缓存实例集的第一副缓存实例,第一组缓存实例集的主缓存实例被配置为第二组缓存实例集的第二副缓存实例,且第一及第二组缓存实例集中的主缓存实例、第一副缓存实例及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点中。
在本申请的数据管理系统某些实施方式中,各该存储节点中预置有至少一个缓存实例。所述分布式缓存是其中将数据被存储在多个存储节点(例如为主机)上的缓存,所述存储节点是被配置为支持分布式缓存的一个或多个节点的计算机或服务器或其他处理系统,每一个节点包括分布式缓存的一个或多个数据模块。在一种实施方式中,所述的多个存储节点位于不同的IP地址中。在另一种实施方式中,所述的多个存储节点也可以位于不同的物理服务器中。
比如,所述存储节点例如为一台物理存储服务器、一台位于某一IP地址中的主机、或者设置在一台主机中的存储部件。其中,所述存储部件可包括高速随机存取存储器,并且还可包括非易失性存储器,例如一个或多个磁盘存储设备、闪存设备或其他非易失性固态存储设备。在某些实施例中,存储部件还可以包括远离一个或多个处理器的存储器,例如经由RF电路或外部端口以及通信网络访问的网络附加存储器,其中所述通信网络可以是因特网、一个或多个内部网、局域网(LAN)、广域网(WLAN)、存储局域网(SAN)等,或其适当组合。存储器控制器可控制设备的诸如CPU和外设接口之类的其他组件对存储器的访问。
所述缓存实例比如为一种可调用CPU资源和/或内存资源的缓存应用,比如为一个进程或者用于执行某种功能的一个程序,该进程或程序在独占一定的物理空间,该空间被定义为缓存,使得来自客户端的操作将数据写入该物理空间中或者自该物理空间中读取数据。在一种实施例中,所述缓存实例是由IP地址及端口号表示,但并不局限于此,在不同的实施例中,所述缓存实例可以有业务名称、所属机房、关联业务、缓存类型、状态、操作人、最近操作日期等一种或多种的信息来表示。在本实施例中,同一缓存实例集合中的主缓存实例操作优先级高于所述第一副缓存实例,所述第一副缓存实例操作优先级高于所述第二副缓存实例。所述第一或二副缓存实例为读写缓存实例或只读缓存实例。所述缓存实例是由IP地址及端口号表示。
所述哈希槽与若干哈希值对应,且每一个哈希槽中的哈希值是连续的,多个哈希槽组成的区间是连续的,所述每一组缓存实例集由一个哈希槽区间表示。所述哈希值为一键值(key),于实例的操作中,所述业务请求中包含的数据为key-value数据,至少一个所述哈希值与一哈希槽(hash slot)相对应。所述哈希槽可以通过哈希函数将特定的键值信息映射到特定的数据信息,这可以保证键值信息和数据信息之间一一对应的关系。例如,可以将键值空间分割为16384个哈希槽,而每一个上述存储节点可以包括一部分上述哈希槽,并且使得每一个存储节点中的哈希槽数量相等。通常,可以使用键的CRC16编码对16384取模来计算一个指定键值信息所属的哈希槽。
本申请的数据管理系统,比如所述多个存储节点中具有的缓存实例集以4组为例,每组缓存实例集中包括一主缓存实例及两个副缓存实例,所述的两个副缓存实例为第一副缓存实例和第二副缓存实例,比如第一副缓存实例为该组中主缓存实例的读写缓存实例,又称从缓存实例,能读写数据,在读数据时被滞后读取;第二副缓存实例为该组中主缓存实例的只读缓存实例,只读缓存实例只能数据读取,不能写入数据,在读取数据时,读取优先级最低。其中,每一组缓存实例集中的主缓存实例及与其对应的第一、第二副缓存实例映射至相同的哈希槽中,且每一组缓存实例集中的主缓存实例及与其对应的第一、第二副缓存实例位于不同的存储节点中。
如图10所示,图10显示为本申请数据管理系统在另一种实施状态下的缓存业务的架构图,如图所示,数据管理系统的整个缓存业务的数据通过数据key的哈希算法分布在四个哈希槽区间[0,511],[512,1023]以及[1024,1535],[1536,2047]上。图10中的A,B,C,D都是缓存实例,每一个区间下处于第1行的缓存实例是该区间的高优先级缓存实例;处于第2行缓存实例的是该区间的低优先级缓存实例;即在这个区间下低优先级缓存实例是高优先级缓存实例的备份;处于第3行的缓存实例是该区间的只读缓存实例。
如图10所示,在[0,511]组的缓存实例集中主缓存实例A与第一副缓存实例C、第二副缓存实例B映射至相同的哈希槽区间[0,511]中的一哈希槽中,且[0,511]组的缓存实例集中主缓存实例A与第一副缓存实例C、第二副缓存实例B位于不同的存储节点中;在[512,1023]组的缓存实例集中主缓存实例C与第一副缓存实例B、第二副缓存实例A映射至相同的哈希槽区间[512,1023]中的一哈希槽中,且[512,1023]组的缓存实例集中主缓存实例C与第一副缓存实例B、第二副缓存实例A位于不同的存储节点中;在[1024,1535]组的缓存实例集中主缓存实例B与第一副缓存实例D、第二副缓存实例A映射至相同的哈希槽区间[1024,1535]中的一哈希槽中,且[1024,1535]组的缓存实例集中主缓存实例B与第一副缓存实例D、第二副缓存实例A位于不同的存储节点中;在[1536,2047]组的缓存实例集中主缓存实例D与第一副缓存实例A、第二副缓存实例B映射至相同的哈希槽区间[1536,2047]中的一哈希槽中,且[1536,2047]组的缓存实例集中主缓存实例D与第一副缓存实例A、第二副缓存实例B位于不同的存储节点中。
通过本申请的数据管理系统提供的存储架构,当用户在大量写数据时,所有的请求数据会通过缓存中间件将数据写到一个区间下的所有缓存实例(除了只读缓存实例)下。当用户在大量读数据时,所有的请求数据会通过缓存中间件将数据均匀分布到每一个区间下。由于在用户读取数据会优先读取高优先级缓存实例上的数据,并且一旦取得数据,将其结果返回给用户,所有请求数据的压力会均摊到各个缓存实例上。这种分配方式能在读多于写的业务场景中充分利用每个缓存实例的性能,这样大大提高了系统中缓存实例的资源利用率。
而且,通过本申请的数据管理系统提供的存储架构,可以确保在同一哈希槽区间(具体为同一哈希槽)下有3个不同存储节点(IP地址)的缓存实例,并且这3个缓存实例的优先级不同,即,每个缓存实例仅在1个哈希槽区间(具体为同一哈希槽)上有个最高优先级,即为高优先级的缓存实例。该新建业务构成的缓存实例分布图只能有1个环,即缓存实例分布图只有1个连通分量,进而能够确保映射于同一个区间或者哈希槽上的主缓存实例和副缓存实例(亦或称之为从缓存实例)被配置在不同的存储节点(IP地址或者物理主机)上,这样,即便一个存储节点(IP地址或者物理主机)上所有的缓存实例都被挂起时,也不会导致业务数据部分丢失,进而可以确保操作业务能够正常运行。
本申请再提供一种分布式缓存管理方法,应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中。应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中,其中,各该存储节点中预置有至少一个缓存实例,所述分布式缓存网络比如为MemCache分布式缓存网络架构和Redis分布式缓存网络架构。在以下描述的实施例中,暂以Redis分布式缓存网络架构(请参阅图1)为例进行说明,但需要特别说明的是,本申请揭露的技术思想亦可应用在例如MemCache分布式缓存网络中,特此述明。
在本申请的某些实施方式中,各该存储节点中预置有至少一个缓存实例。所述分布式缓存是其中将数据被存储在多个存储节点(例如为主机)上的缓存,所述存储节点是被配置为支持分布式缓存的一个或多个节点的计算机或服务器或其他处理系统,每一个节点包括分布式缓存的一个或多个数据模块。在一种实施方式中,所述的多个存储节点位于不同的IP地址中。在另一种实施方式中,所述的多个存储节点也可以位于不同的物理服务器中。
比如,所述存储节点例如为一台物理存储服务器、一台位于某一IP地址中的主机、或者设置在一台主机中的存储部件。其中,所述存储部件可包括高速随机存取存储器,并且还可包括非易失性存储器,例如一个或多个磁盘存储设备、闪存设备或其他非易失性固态存储设备。在某些实施例中,存储部件还可以包括远离一个或多个处理器的存储器,例如经由RF电路或外部端口以及通信网络访问的网络附加存储器,其中所述通信网络可以是因特网、一个或多个内部网、局域网(LAN)、广域网(WLAN)、存储局域网(SAN)等,或其适当组合。存储器控制器可控制设备的诸如CPU和外设接口之类的其他组件对存储器的访问。
所述缓存实例比如为一种可调用CPU资源和/或内存资源的缓存应用,比如为一个进程或者用于执行某种功能的一个程序,该进程或程序在独占一定的物理空间,该空间被定义为缓存,使得来自客户端的操作将数据写入该物理空间中或者自该物理空间中读取数据。在一种实施例中,所述缓存实例是由IP地址及端口号表示,但并不局限于此,在不同的实施例中,所述缓存实例可以有业务名称、所属机房、关联业务、缓存类型、状态、操作人、最近操作日期等一种或多种的信息来表示。
在本申请的某些实施例中,所述至少一客户端例如为包括存储器、存储器控制器、一个或多个处理单元(CPU)、外设接口、RF电路、音频电路、扬声器、麦克风、输入/输出(I/O)子系统、显示屏、其他输出或控制设备,以及外部端口等组件的计算机,所述计算机中的这些组件通过一条或多条通信总线或信号线进行通信。
所述路由层用以通过哈希运算为每一缓存实例映射一哈希槽。所述哈希值为一键值(key),于实例的操作中,所述业务请求中包含的数据为key-value数据,至少一个所述哈希值与一哈希槽(hash slot)相对应。所述哈希槽可以通过哈希函数将特定的键值信息映射到特定的数据信息,这可以保证键值信息和数据信息之间一一对应的关系。例如,可以将键值空间分割为16384个哈希槽,而每一个上述存储节点可以包括一部分上述哈希槽,并且使得每一个存储节点中的哈希槽数量相等。通常,可以使用键的CRC16编码对16384取模来计算一个指定键值信息所属的哈希槽。
请参阅图11,显示为本申的分布式缓存管理方法的又一实施例的流程示意图,如图所示,本申请提供的分布式缓存管理方法包括以下步骤:
于步骤S51中,从所述多个存储节点中确定至少两组缓存实例集并提交缩容请求,于一实施例中,所述至少一客户端从所述多个存储节点中确定至少两组缓存实例集并提交缩容请求,于具体的实施例中下,依据所述至少一客户端指定的业务缓存容量及每一缓存实例可支配的内存空间来确定至少两组缓存实例集,在本实施例的描述中,暂以确定两组缓存实例集为例进行说明。
其中,所述至少两组缓存实例集分别配置有主缓存实例、对应所述主缓存实例的第一副缓存实例及第二副缓存实例,第一组缓存实例集的第一副缓存实例被配置为第二组缓存实例集的主缓存实例,第一组缓存实例集的第二副缓存实例被配置为第二组缓存实例集的第一副缓存实例,第一组缓存实例集的主缓存实例被配置为第二组缓存实例集的第二副缓存实例,且第一及第二组缓存实例集中的主缓存实例、第一副缓存实例及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点中;于一实施例中,同一缓存实例集合中的主缓存实例操作优先级高于所述第一副缓存实例,所述第一副缓存实例操作优先级高于所述第二副缓存实例。同一缓存实例集合中的第一或二副缓存实例为读写缓存实例或只读缓存实例。
于步骤S52中,将所述第一及第二组缓存实例集合并,保留所述第一组缓存实例集的主缓存实例以及所述第二组缓存实例集的第一副缓存实例,形成由一主缓存实例及与其对应的第一副缓存实例组成的一组缓存实例集,所述主缓存实例与所述第一副缓存实例映射至相同的哈希槽中,且所述主缓存实例与所述第一副缓存实例位于不同的存储节点中。
为了进一步说明本申请提供的分布式缓存管理方法在缩容缓存实例时的作业原理,以下将进行原理性说明,本申请提供的缩容方法对于冗余度为2,哈希槽区间数为2n的缓存业务C2={c1,c2,c3,...,c2n},将其进行减半缩容就是这个冗余度为2,哈希槽区间数为2n的缓存实例构成的缓存实例图G2减少n条边,使其变成冗余度为2,哈希槽区间数为n的缓存实例构成的缓存实例图G1,简单来说,就是将图G2相邻的两条边
Figure GDA0002304706660000361
(i≠j,ci∈C2,cj∈C2)以及
Figure GDA0002304706660000362
(j≠k,cj∈C2,ck∈C2),去掉点cj合并成一条边
Figure GDA0002304706660000363
即成倍扩容的逆过程。在这里只要选择出n个cj去掉就能得到图G1,换言之,将冗余度为2,哈希槽区间数为2n的缓存业务的点数量减半就能得到图G1
试着将每条边
Figure GDA0002304706660000364
的两个端点分成两类,一类是保留的点,一类是去掉的点。减半缩容就变成了一个染色问题:用两种书写方式,即下划线方式和不带下划线方式对图G2进行染色,要求边上的两个端点不能是同一种方式。用图的广度优先搜索算法就完成染色,接着假设下划线方式的点保留,不带下划线方式的点去除,那么就能得到需要去掉的点。图12a和12b表示为缩容减半业务说明中列举的几种实例分布图,图中边方向是顺时针。
由于确定的冗余度为2,区间数为2n的业务对应的实例分布图可能存在m个环(1≤m≤n),这样要遍历的染色情况就是2m中(1个环只有2种染色方法,如图12a和12b所示),这样算法时间复杂度会变得复杂,为此判断可以通过图的连通分量算法来完成,即,去掉每一组缓存实例集只读缓存实例并合并原有的相邻哈希槽区间,将保留的实例Ci={ci,1,ci,2,ci,3,...,ci,n}(i=1,2)去重;其中,i=1,2表示保留方案;令其符合同一哈希槽区间(具体为同一哈希槽)下有2个不同存储节点(IP地址)的缓存实例,并且这2个缓存实例的优先级不同,即,每个缓存实例仅在1个哈希槽区间(具体为同一哈希槽)上有个最高优先级,即为高优先级的缓存实例。该新建业务构成的缓存实例分布图只能有1个环,即缓存实例分布图只有1个连通分量,进而能够确保映射于同一个区间或者哈希槽上的主缓存实例和副缓存实例(亦或称之为从缓存实例)被配置在不同的存储节点(IP地址或者物理主机)上,这样,即便一个存储节点(IP地址或者物理主机)上所有的缓存实例都被挂起时,也不会导致业务数据部分丢失,进而可以确保操作业务能够正常运行。
如图12a-12d所示,显示为针对图9b和图9d所表示的业务缩容说明示例图。图9b和图9d所表示的业务需要缩容,那么两种保留方案如图12a和12b所示,下划线书写方式的为保留的点,不带下划线书写方式为去掉的点。经过合并区间后去重后的两种结果如图12c,12d所示,显然显然图12d是不满足同一区间下有2个不同IP地址的缓存实例,并且缓存实例的优先级不同的条件。为此减半缩容后的结果是图12c,经比较可以看到图12c与图9c是一致的。减半扩容的染色方式可以通过广度优先搜索完成,广度优先搜索的时间复杂度是O(n),而合并区间的时间复杂度为O(n)。为此,扩容算法时间复杂度为O(n)。
再以图10为例,如图10所示,在[0,511]组的缓存实例集中主缓存实例A与第一副缓存实例C、第二副缓存实例B映射至相同的哈希槽区间[0,511]中的一哈希槽中,且[0,511]组的缓存实例集中主缓存实例A与第一副缓存实例C、第二副缓存实例B位于不同的存储节点中;在[512,1023]组的缓存实例集中主缓存实例C与第一副缓存实例B、第二副缓存实例A映射至相同的哈希槽区间[512,1023]中的一哈希槽中,且[512,1023]组的缓存实例集中主缓存实例C与第一副缓存实例B、第二副缓存实例A位于不同的存储节点中;在[1024,1535]组的缓存实例集中主缓存实例B与第一副缓存实例D、第二副缓存实例A映射至相同的哈希槽区间[1024,1535]中的一哈希槽中,且[1024,1535]组的缓存实例集中主缓存实例B与第一副缓存实例D、第二副缓存实例A位于不同的存储节点中;在[1536,2047]组的缓存实例集中主缓存实例D与第一副缓存实例A、第二副缓存实例B映射至相同的哈希槽区间[1536,2047]中的一哈希槽中,且[1536,2047]组的缓存实例集中主缓存实例D与第一副缓存实例A、第二副缓存实例B位于不同的存储节点中。
将上述图10经本申请的分布式缓存管理方法能保证在缓存业务扩缩容操作后,则呈现为图3所示的缓存业务的架构图,图3中[0,1023]的缓存实例B是哈希槽区间[0,1023]的低优先级缓存实例,在哈希槽区间[0,1023]中,缓存实例B是缓存实例A的备份,其中,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B映射至相同的哈希槽中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A映射至相同的哈希槽中,而且,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B位于不同的存储节点中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A位于不同的存储节点中。
本申请的分布式缓存管理方法能保证在缓存业务扩缩容操作后,同一个哈希槽区间下的缓存实例(不算入只读缓存实例)IP地址不同,这样即使一个IP上的所有实例挂起时,也不会导致业务数据部分丢失,使得业务能正常进行。
本申请还一种分布式缓存管理系统,应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中,所述分布式缓存网络比如为MemCache分布式缓存网络架构和Redis分布式缓存网络架构。在以下描述的实施例中,暂以Redis分布式缓存网络架构(例如图1所示为的Redis集群(Redis cluster)的架构)为例进行说明,但需要特别说明的是,本申请揭露的技术思想亦可应用在例如MemCache分布式缓存网络架构中,特此述明。
所述分布式缓存是其中将数据被存储在多个存储节点(例如为主机)上的缓存,所述存储节点是被配置为支持分布式缓存的一个或多个节点的计算机或服务器或其他处理系统,每一个节点包括分布式缓存的一个或多个数据模块。在一种实施方式中,所述的多个存储节点位于不同的IP地址中。在另一种实施方式中,所述的多个存储节点也可以位于不同的物理服务器中。
比如,所述存储节点例如为一台物理存储服务器、一台位于某一IP地址中的主机、或者设置在一台主机中的存储部件。其中,所述存储部件可包括高速随机存取存储器,并且还可包括非易失性存储器,例如一个或多个磁盘存储设备、闪存设备或其他非易失性固态存储设备。在某些实施例中,存储部件还可以包括远离一个或多个处理器的存储器,例如经由RF电路或外部端口以及通信网络访问的网络附加存储器,其中所述通信网络可以是因特网、一个或多个内部网、局域网(LAN)、广域网(WLAN)、存储局域网(SAN)等,或其适当组合。存储器控制器可控制设备的诸如CPU和外设接口之类的其他组件对存储器的访问。
所述缓存实例比如为一种可调用CPU资源和/或内存资源的缓存应用,比如为一个进程或者用于执行某种功能的一个程序,该进程或程序在独占一定的物理空间,该空间被定义为缓存,使得来自客户端的操作将数据写入该物理空间中或者自该物理空间中读取数据。在一种实施例中,所述缓存实例是由IP地址及端口号表示,但并不局限于此,在不同的实施例中,所述缓存实例可以有业务名称、所属机房、关联业务、缓存类型、状态、操作人、最近操作日期等一种或多种的信息来表示。
所述多个存储节点中的每一存储节点中预置有至少一个缓存实例,所述多个存储节点中具有至少两组缓存实例集,其中,所述至少两组缓存实例集分别配置有主缓存实例、对应所述主缓存实例的第一副缓存实例及第二副缓存实例,第一组缓存实例集的第一副缓存实例被配置为第二组缓存实例集的主缓存实例,第一组缓存实例集的第二副缓存实例被配置为第二组缓存实例集的第一副缓存实例,第一组缓存实例集的主缓存实例被配置为第二组缓存实例集的第二副缓存实例,且第一及第二组缓存实例集中的主缓存实例、第一副缓存实例及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点中,于一实施例中,第一及第二组缓存实例集中的主缓存实例、第一副缓存实例及第二副缓存实例位于不同的IP地址或者物理主机中。于一实施例中,同一缓存实例集合中的主缓存实例操作优先级高于所述第一副缓存实例,所述第一副缓存实例操作优先级高于所述第二副缓存实例。同一缓存实例集合中的第一或二副缓存实例为读写缓存实例或只读缓存实例。
所述路由层用以通过哈希运算为每一缓存实例映射一哈希槽;于实例的操作中,所述业务请求中包含的数据为key-value数据,至少一个所述哈希值与一哈希槽(hashslot)相对应。所述哈希槽可以通过哈希函数将特定的键值信息映射到特定的数据信息,这可以保证键值信息和数据信息之间一一对应的关系。例如,可以将键值空间分割为16384个哈希槽,而每一个上述存储节点可以包括一部分上述哈希槽,并且使得每一个存储节点中的哈希槽数量相等。通常,可以使用键的CRC16编码对16384取模来计算一个指定键值信息所属的哈希槽。
所述至少一客户端从所述多个存储节点中确定至少两组缓存实例集并提交缩容请求,以及接收经由所述路由层反馈的缩容结果。依据所述至少一客户端指定的业务缓存容量及每一缓存实例可支配的内存空间来确定至少两组缓存实例集,在本实施例的描述中,暂以确定两组缓存实例集为例进行说明。
所述管理平台接收经由所述路由层提交的缩容请求,将所述第一及第二组缓存实例集合并,保留所述第一组缓存实例集的主缓存实例以及所述第二组缓存实例集的第一副缓存实例,形成由一主缓存实例及与其对应的第一副缓存实例组成的一组缓存实例集,所述主缓存实例与所述第一副缓存实例映射至相同的哈希槽中,且所述主缓存实例与所述第一副缓存实例位于不同的存储节点中。于一实施例中,所述主缓存实例与所述第一副缓存实例位于不同的IP地址或者物理主机中。于一实施例中,所述管理平台例如为一虚拟的分布式缓存管理系统,比如顺网科技公司的顺网分布式缓存系统hours,其可以通过统一化的配置平台对缓存实例(Redis或MemCache)以缓存业务为单位进行管理。hours能对缓存数据进行数据冗余,保证了系统的高可用性。
为了进一步说明本申请提供的分布式缓存管理系统在缩容缓存实例时的作业原理,以下将进行原理性说明,本申请提供的缩容方法对于冗余度为2,哈希槽区间数为2n的缓存业务C2={c1,c2,c3,...,c2n},将其进行减半缩容就是这个冗余度为2,哈希槽区间数为2n的缓存实例构成的缓存实例图G2减少n条边,使其变成冗余度为2,哈希槽区间数为n的缓存实例构成的缓存实例图G1,简单来说,就是将图G2相邻的两条边
Figure GDA0002304706660000401
(i≠j,ci∈C2,cj∈C2)以及
Figure GDA0002304706660000402
(j≠k,cj∈C2,ck∈C2),去掉点cj合并成一条边
Figure GDA0002304706660000403
即成倍扩容的逆过程。在这里只要选择出n个cj去掉就能得到图G1,换言之,将冗余度为2,哈希槽区间数为2n的缓存业务的点数量减半就能得到图G1
试着将每条边
Figure GDA0002304706660000404
的两个端点分成两类,一类是保留的点,一类是去掉的点。减半缩容就变成了一个染色问题:用两种书写方式,即下划线方式和不带下划线方式对图G2进行染色,要求边上的两个端点不能是同一种方式。用图的广度优先搜索算法就完成染色,接着假设下划线方式的点保留,不带下划线方式的点去除,那么就能得到需要去掉的点。图12a和12b表示为缩容减半业务说明中列举的几种实例分布图,图中边方向是顺时针。
由于确定的冗余度为2,区间数为2n的业务对应的实例分布图可能存在m个环(1≤m≤n),这样要遍历的染色情况就是2m中(1个环只有2种染色方法,如图12a和12b所示),这样算法时间复杂度会变得复杂,为此判断可以通过图的连通分量算法来完成,即,去掉每一组缓存实例集只读缓存实例并合并原有的相邻哈希槽区间,将保留的实例Ci={ci,1,ci,2,ci,3,...,ci,n}(i=1,2)去重;其中,i=1,2表示保留方案;令其符合同一哈希槽区间(具体为同一哈希槽)下有2个不同存储节点(IP地址)的缓存实例,并且这2个缓存实例的优先级不同,即,每个缓存实例仅在1个哈希槽区间(具体为同一哈希槽)上有个最高优先级,即为高优先级的缓存实例。该新建业务构成的缓存实例分布图只能有1个环,即缓存实例分布图只有1个连通分量,进而能够确保映射于同一个区间或者哈希槽上的主缓存实例和副缓存实例(亦或称之为从缓存实例)被配置在不同的存储节点(IP地址或者物理主机)上,这样,即便一个存储节点(IP地址或者物理主机)上所有的缓存实例都被挂起时,也不会导致业务数据部分丢失,进而可以确保操作业务能够正常运行。
如图12a-12d所示,显示为针对图9b和图9d所表示的业务缩容说明示例图。图9b和图9d所表示的业务需要缩容,那么两种保留方案如图12a和12b所示,下划线书写方式的为保留的点,不带下划线书写方式为去掉的点。经过合并区间后去重后的两种结果如图12c,12d所示,显然图12d是不满足同一区间下有2个不同IP地址的缓存实例,并且缓存实例的优先级不同的条件。为此减半缩容后的结果是图12c,经比较可以看到图12c与图9c是一致的。减半扩容的染色方式可以通过广度优先搜索完成,广度优先搜索的时间复杂度是O(n),而合并区间的时间复杂度为O(n)。为此,扩容算法时间复杂度为O(n)。
再以图10为例,如图10所示,在[0,511]组的缓存实例集中主缓存实例A与第一副缓存实例C、第二副缓存实例B映射至相同的哈希槽区间[0,511]中的一哈希槽中,且[0,511]组的缓存实例集中主缓存实例A与第一副缓存实例C、第二副缓存实例B位于不同的存储节点中;在[512,1023]组的缓存实例集中主缓存实例C与第一副缓存实例B、第二副缓存实例A映射至相同的哈希槽区间[512,1023]中的一哈希槽中,且[512,1023]组的缓存实例集中主缓存实例C与第一副缓存实例B、第二副缓存实例A位于不同的存储节点中;在[1024,1535]组的缓存实例集中主缓存实例B与第一副缓存实例D、第二副缓存实例A映射至相同的哈希槽区间[1024,1535]中的一哈希槽中,且[1024,1535]组的缓存实例集中主缓存实例B与第一副缓存实例D、第二副缓存实例A位于不同的存储节点中;在[1536,2047]组的缓存实例集中主缓存实例D与第一副缓存实例A、第二副缓存实例B映射至相同的哈希槽区间[1536,2047]中的一哈希槽中,且[1536,2047]组的缓存实例集中主缓存实例D与第一副缓存实例A、第二副缓存实例B位于不同的存储节点中。
将上述图10经本申请的分布式缓存管理方法能保证在缓存业务扩缩容操作后,则呈现为图3所示的缓存业务的架构图,图3中[0,1023]的缓存实例B是哈希槽区间[0,1023]的低优先级缓存实例,在哈希槽区间[0,1023]中,缓存实例B是缓存实例A的备份,其中,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B映射至相同的哈希槽中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A映射至相同的哈希槽中,而且,[0,1023]组的缓存实例集中主缓存实例A与副缓存实例B位于不同的存储节点中,[1024,2047]组的缓存实例集中的主缓存实例B及副缓存实例A位于不同的存储节点中。
本申请的分布式缓存管理系统能保证在缓存业务扩缩容操作后,同一个哈希槽区间下的缓存实例(不算入只读缓存实例)IP地址不同,这样即使一个IP上的所有实例挂起时,也不会导致业务数据部分丢失,使得业务能正常进行。
本申请再提供一种计算机可读写存储介质,其上存储有用于分布式缓存管理计算机程序,所述分布式缓存管理计算机程序被处理器执行时实现上述分布式缓存管理方法的步骤。
于本申请提供的实施例中,所述计算机可读写存储介质可以包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁存储设备、闪存、或者能够用于存储具有指令或数据结构形式的期望的程序代码并能够由计算机进行存取的任何其它介质。另外,任何连接都可以适当地称为计算机可读介质。例如,如果指令是使用同轴电缆、光纤光缆、双绞线、数字订户线(DSL)或者诸如红外线、无线电和微波之类的无线技术,从网站、服务器或其它远程源发送的,则所述同轴电缆、光纤光缆、双绞线、DSL或者诸如红外线、无线电和微波之类的无线技术包括在所述介质的定义中。然而,应当理解的是,计算机可读写存储介质和数据存储介质不包括连接、载波、信号或者其它暂时性介质,而是旨在针对于非暂时性、有形的存储介质。如申请中所使用的磁盘和光盘包括压缩光盘(CD)、激光光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘,其中,磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。
在一个或多个示例性方面,本申请所述分布式缓存管理计算机程序所描述的功能可以用硬件、软件、固件或者其任意组合的方式来实现。当用软件实现时,可以将这些功能作为一个或多个指令或代码存储或传送到计算机可读介质上。本申请所公开的方法或算法的步骤可以用处理器可执行软件模块来体现,其中处理器可执行软件模块可以位于有形、非临时性计算机可读写存储介质上。有形、非临时性计算机可读写存储介质可以是计算机能够存取的任何可用介质。
由上可知,本申请中揭露的技术方案中的成倍扩容的本质是将每一个区间分裂成两个区间,在缓存实例图中就是将每一条边扩展成两条边,即一条边
Figure GDA0002304706660000421
分裂成两条边
Figure GDA0002304706660000422
以及
Figure GDA0002304706660000423
减半缩容的本质是将相邻的两个区间合并成一个区间,在缓存实例图中就是将每两条边缩成一条边,实例分布图相邻的两条边
Figure GDA0002304706660000424
以及
Figure GDA0002304706660000425
去掉点cj合并成一条边
Figure GDA0002304706660000426
为此,成倍扩容和减半缩容是两个可逆的操作,基本上可以认为减半缩容能将业务缩容到成倍扩容前的状态。
综上所述,本申请提供的分布式缓存管理方法、系统及数据管理系统可以确保在同一哈希槽区间(具体为同一哈希槽)下有多个不同存储节点(IP地址)的缓存实例,并且这些缓存实例的优先级不同,即,每个缓存实例仅在1个哈希槽区间(具体为同一哈希槽)上有个最高优先级,即为高优先级的缓存实例。该新建业务构成的缓存实例分布图只能有1个环,即缓存实例分布图只有1个连通分量,进而能够确保映射于同一个区间或者哈希槽上的主缓存实例和副缓存实例(亦或称之为从缓存实例)被配置在不同的存储节点(IP地址或者物理主机)上,这样,即便一个存储节点(IP地址或者物理主机)上所有的缓存实例都被挂起时,也不会导致业务数据部分丢失,进而可以确保操作业务能够正常运行。
上述实施例仅例示性说明本申请的原理及其功效,而非用于限制本申请。任何熟悉此技术的人士皆可在不违背本申请的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本申请所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本申请的权利要求所涵盖。

Claims (64)

1.一种分布式缓存管理方法,应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中,其中,各该存储节点中预置有至少一个缓存实例,其特征在于,所述分布式缓存管理方法包括以下步骤:
从所述多个存储节点中确定多个缓存实例并提交业务请求;以及
依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集,使每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例映射至相同的哈希槽中,并确保每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例位于不同的存储节点中。
2.根据权利要求1所述的分布式缓存管理方法,其特征在于,所述的从所述多个存储节点中确定多个缓存实例并提交业务请求的步骤为依据指定的业务缓存容量及每一缓存实例可支配的内存空间来确定所述多个缓存实例的个数。
3.根据权利要求1所述的分布式缓存管理方法,其特征在于,所述多个存储节点位于不同的IP地址或位于不同的物理服务器。
4.根据权利要求1所述的分布式缓存管理方法,其特征在于,所述依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集之前还包括确定所述多个缓存实例中各缓存实例所在的IP地址分布以及各缓存实例与哈希槽映射关系的步骤。
5.根据权利要求1所述的分布式缓存管理方法,其特征在于,所述依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集的步骤包括:
确定将所述多个缓存实例进行遍历的次数、每次遍历的路径以及所述路径上缓存实例的个数;以及
依据确定遍历的次数、每次遍历的路径以及所述路径上缓存实例的个数遍历所述多个缓存实例,以将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集,使每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例映射至相同的哈希槽中,并确保每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例位于不同的存储节点中。
6.根据权利要求5所述的分布式缓存管理方法,其特征在于,所述确定将所述多个缓存实例进行遍历的次数、每次遍历的路径以及所述路径上缓存实例的个数的步骤包括:
依据所述多个缓存实例中各缓存实例的IP地址分布将同一IP地址中缓存实例的最多个数确定为遍历次数;
依据所述多个缓存实例的总个数及所述遍历次数确定所述路径上缓存实例的个数;以及
依据各IP地址中存在的缓存实例的数量从多到少来确定每一路径上缓存实例的遍历次序。
7.根据权利要求5或6所述的分布式缓存管理方法,其特征在于,所述将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集的步骤包括:
将每一路径中的先遍历的缓存实例配置为主缓存实例,将所述主缓存实例之后遍历的缓存实例配置为对应所述主缓存实例的副缓存实例以形成一组缓存实例集;
将每一路径中的最后遍历的缓存实例配置为主缓存实例,下一路径中首次遍历的缓存实例配置为对应所述主缓存实例的副缓存实例以形成另一组缓存实例集。
8.根据权利要求1所述的分布式缓存管理方法,其特征在于,所述业务请求包括新建缓存实例业务请求、扩容缓存实例业务请求、或缩容缓存实例业务请求中的一种。
9.根据权利要求1所述的分布式缓存管理方法,其特征在于,所述副缓存实例为操作优先级低于主缓存实例的读写缓存实例或只读缓存实例。
10.根据权利要求1所述的分布式缓存管理方法,其特征在于,所述缓存实例是由IP地址及端口号表示。
11.根据权利要求1所述的分布式缓存管理方法,其特征在于,所述哈希槽与若干哈希值对应,且每一个哈希槽中的哈希值是连续的,多个哈希槽组成的区间是连续的,所述每一组缓存实例集由一个哈希槽区间表示。
12.一种分布式缓存管理系统,其特征在于,包括:
多个存储节点,每一存储节点中预置有至少一个缓存实例;
路由层,用以通过哈希运算为每一缓存实例映射一哈希槽;
至少一客户端,从所述多个存储节点中确定多个缓存实例并提交业务请求,以及接收经由所述路由层反馈的业务执行结果;
管理平台,接收提交的业务请求,并依据指定的冗余度将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集,使每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例映射至相同的哈希槽中,并确保每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例位于不同的存储节点中。
13.根据权利要求12所述的分布式缓存管理系统,其特征在于,依据所述至少一客户端指定的业务缓存容量及每一缓存实例可支配的内存空间来确定所述多个缓存实例的个数。
14.根据权利要求12所述的分布式缓存管理系统,其特征在于,所述多个存储节点位于不同的IP地址或位于不同的物理服务器。
15.根据权利要求12所述的分布式缓存管理系统,其特征在于,所述管理平台还用于确定所述多个缓存实例中各缓存实例所在的IP地址分布以及各缓存实例与哈希槽映射关系。
16.根据权利要求12所述的分布式缓存管理系统,其特征在于,所述管理平台通过确定将所述多个缓存实例进行遍历的次数、每次遍历的路径以及所述路径上缓存实例的个数,再依据所述次数、路径以及所述路径上缓存实例的个数遍历所述多个缓存实例,以将所述多个缓存实例配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集。
17.根据权利要求16所述的分布式缓存管理系统,其特征在于,所述管理平台通过各缓存实例的IP地址分布将同一IP地址中缓存实例的最多个数确定为遍历次数,依据所述多个缓存实例的总个数及所述遍历次数确定所述路径上缓存实例的个数,以及依据各IP地址中存在的缓存实例的数量从多到少来确定每一路径上缓存实例的遍历次序。
18.根据权利要求16所述的分布式缓存管理系统,其特征在于,所述管理平台还用以将每一路径中的先遍历的缓存实例配置为主缓存实例,将所述主缓存实例之后遍历的缓存实例配置为对应所述主缓存实例的副缓存实例以形成一组缓存实例集,用以将每一路径中的最后遍历的缓存实例配置为主缓存实例,下一路径中首次遍历的缓存实例配置为对应所述主缓存实例的副缓存实例以形成另一组缓存实例集。
19.根据权利要求12所述的分布式缓存管理系统,其特征在于,所述客户端提交的业务请求包括新建缓存实例业务请求、扩容缓存实例业务请求、或缩容缓存实例业务请求中的一种。
20.根据权利要求12所述的分布式缓存管理系统,其特征在于,所述副缓存实例为操作优先级低于主缓存实例的读写缓存实例或只读缓存实例。
21.根据权利要求12所述的分布式缓存管理系统,其特征在于,所述缓存实例是由IP地址及端口号表示。
22.根据权利要求12所述的分布式缓存管理系统,其特征在于,所述哈希槽与若干哈希值对应,且每一个哈希槽中的哈希值是连续的,多个哈希槽组成的区间是连续的,所述每一组缓存实例集由一个哈希槽区间表示。
23.一种数据管理系统,包括多个存储节点,各该存储节点中预置有至少一个缓存实例,其特征在于,所述多个存储节点中的多个缓存实例被配置为多组包括一主缓存实例及至少一副缓存实例的缓存实例集,其中,每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例映射至相同的哈希槽中,且每一组缓存实例集中的主缓存实例及与其对应的至少一个副缓存实例位于不同的存储节点中。
24.根据权利要求23所述的数据管理系统,其特征在于,所述多个存储节点位于不同的IP地址或位于不同的物理服务器。
25.根据权利要求23所述的数据管理系统,其特征在于,所述副缓存实例为操作优先级低于主缓存实例的读写缓存实例或只读缓存实例。
26.根据权利要求23所述的数据管理系统,其特征在于,所述缓存实例是由IP地址及端口号表示。
27.根据权利要求23所述的数据管理系统,其特征在于,所述哈希槽与若干哈希值对应,且每一个哈希槽中的哈希值是连续的,多个哈希槽组成的区间是连续的,所述每一组缓存实例集由一个哈希槽区间表示。
28.一种分布式缓存管理方法,应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中,其中,各该存储节点中预置有至少一个缓存实例,其特征在于,所述分布式缓存管理方法包括以下步骤:
从至少一个存储节点中确定至少一个缓存实例作为扩容实例并提交扩容请求;
从所述多个存储节点中确定一组由主缓存实例及与其对应的至少一个副缓存实例组成的缓存实例集,其中,所述主缓存实例与所述至少一个副缓存实例映射至相同的哈希槽中,且所述主缓存实例与所述至少一个副缓存实例位于不同的存储节点中;以及
将该组缓存实例集裂变为两组缓存实例集;
其中,于第一组缓存实例集中,所述扩容实例被配置为所述主缓存实例的第一副缓存实例,所述副缓存实例被配置为所述主缓存实例的第二副缓存实例;于第二组缓存实例集中,所述扩容实例被配置为主缓存实例,原副缓存实例被配置为所述第二组缓存实例集中主缓存实例的第一副缓存实例,原主缓存实例被配置为所述第二组缓存实例集中主缓存实例的第二副缓存实例;并且,于所述第一、第二组缓存实例集中,所述主缓存实例、第一副缓存实例、以及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点中。
29.根据权利要求28所述的分布式缓存管理方法,其特征在于,所述多个存储节点位于不同的IP地址或位于不同的物理服务器。
30.根据权利要求28所述的分布式缓存管理方法,其特征在于,同一缓存实例集合中的主缓存实例操作优先级高于所述第一副缓存实例,所述第一副缓存实例操作优先级高于所述第二副缓存实例。
31.根据权利要求28所述的分布式缓存管理方法,其特征在于,所述第一或二副缓存实例为读写缓存实例或只读缓存实例。
32.根据权利要求28所述的分布式缓存管理方法,其特征在于,从所述多个存储节点中确定的缓存实例集有多组的情况下,还包括以下步骤:
当判断所述扩容实例的IP地址与第一组缓存实例集的主缓存实例或副缓存实例的IP地址相同时,再从所述多个存储节点中确定第二组缓存实例集;
重复判断过程,直至判断所述扩容实例的IP地址与一组缓存实例集中主缓存实例或副缓存实例的IP地址不相同。
33.根据权利要求28所述的分布式缓存管理方法,其特征在于,从所述多个存储节点中确定的缓存实例集有多组的情况下,还包括以下步骤:
当判断第一组缓存实例集中已配置有一扩容实例时,从所述多个存储节点中确定第二组缓存实例集,以便将另一扩容实例配置于所述第二组缓存实例集中。
34.根据权利要求28所述的分布式缓存管理方法,其特征在于,从所述多个存储节点中确定的缓存实例集有多组的情况下,还包括以下步骤:
当判断所述第一组缓存实例集中已配置有一扩容实例时,从所述多个存储节点中确定第二组缓存实例集,并将所述第一组缓存实例集中已配置的扩容实例迁移于所述第二组缓存实例集中,以便将另一扩容实例可配置于所述第一组缓存实例集中。
35.根据权利要求28所述的分布式缓存管理方法,其特征在于,所述缓存实例是由IP地址及端口号表示。
36.根据权利要求28所述的分布式缓存管理方法,其特征在于,所述哈希槽与若干哈希值对应,且每一个哈希槽中的哈希值是连续的,多个哈希槽组成的区间是连续的,所述每一组缓存实例集由一个哈希槽区间表示。
37.一种分布式缓存管理系统,其特征在于,包括:
多个存储节点,每一存储节点中预置有至少一个缓存实例,所述多个存储节点中具有至少一组由主缓存实例及与其对应的至少一个副缓存实例组成的缓存实例集,其中,所述主缓存实例与所述至少一个副缓存实例映射至相同的哈希槽中,且所述主缓存实例与所述至少一个副缓存实例位于不同的存储节点中;
路由层,用以通过哈希运算为每一缓存实例映射一哈希槽;
至少一客户端,从至少一个存储节点中确定至少一个缓存实例作为扩容实例并提交扩容请求,以及接收经由所述路由层反馈的扩容结果;
管理平台,接收经由所述路由层提交的扩容请求,将所述多个存储节点中的一组缓存实例集裂变为两组缓存实例集;
其中,于第一组缓存实例集中,所述扩容实例被配置为所述主缓存实例的第一副缓存实例,所述副缓存实例被配置为所述主缓存实例的第二副缓存实例;于第二组缓存实例集中,所述扩容实例被配置为主缓存实例,原副缓存实例被配置为所述第二组缓存实例集中主缓存实例的第一副缓存实例,原主缓存实例被配置为所述第二组缓存实例集中主缓存实例的第二副缓存实例;并且,于所述第一、第二组缓存实例集中,所述主缓存实例、第一副缓存实例、以及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点中。
38.根据权利要求37所述的分布式缓存管理系统,其特征在于,所述多个存储节点位于不同的IP地址或位于不同的物理服务器。
39.根据权利要求37所述的分布式缓存管理系统,其特征在于,同一缓存实例集合中的主缓存实例操作优先级高于所述第一副缓存实例,所述第一副缓存实例操作优先级高于所述第二副缓存实例。
40.根据权利要求37所述的分布式缓存管理系统,其特征在于,所述第一或二副缓存实例为读写缓存实例或只读缓存实例。
41.根据权利要求37所述的分布式缓存管理系统,其特征在于,从所述多个存储节点中确定的缓存实例集有多组的情况下,所述管理平台还用于当判断所述扩容实例的IP地址与第一组缓存实例集的主缓存实例或副缓存实例的IP地址相同时,再从所述多个存储节点中确定第二组缓存实例集;重复判断过程,直至判断所述扩容实例的IP地址与一组缓存实例集中主缓存实例或副缓存实例的IP地址不相同。
42.根据权利要求37所述的分布式缓存管理系统,其特征在于,从所述多个存储节点中确定的缓存实例集有多组的情况下,所述管理平台还用于当判断第一组缓存实例集中已配置有一扩容实例时,从所述多个存储节点中确定第二组缓存实例集,以便将另一扩容实例配置于所述第二组缓存实例集中。
43.根据权利要求37所述的分布式缓存管理系统,其特征在于,从所述多个存储节点中确定的缓存实例集有多组的情况下,所述管理平台还用于当判断所述第一组缓存实例集中已配置有一扩容实例时,从所述多个存储节点中确定第二组缓存实例集,并将所述第一组缓存实例集中已配置的扩容实例迁移于所述第二组缓存实例集中,以便将另一扩容实例可配置于所述第一组缓存实例集中。
44.根据权利要求37所述的分布式缓存管理系统,其特征在于,所述缓存实例是由IP地址及端口号表示。
45.根据权利要求37所述的分布式缓存管理系统,其特征在于,所述哈希槽与若干哈希值对应,且每一个哈希槽中的哈希值是连续的,多个哈希槽组成的区间是连续的,所述每一组缓存实例集由一个哈希槽区间表示。
46.一种数据管理系统,包括多个存储节点,各该存储节点中预置有至少一个缓存实例,其特征在于,所述多个存储节点中具有至少两组缓存实例集,其中,所述至少两组缓存实例集分别配置有主缓存实例、对应所述主缓存实例的第一副缓存实例及第二副缓存实例,其中,第一组缓存实例集的第一副缓存实例被配置为第二组缓存实例集的主缓存实例,第一组缓存实例集的第二副缓存实例被配置为第二组缓存实例集的第一副缓存实例,第一组缓存实例集的主缓存实例被配置为第二组缓存实例集的第二副缓存实例,且第一及第二组缓存实例集中的主缓存实例、第一副缓存实例及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点中。
47.根据权利要求46所述的数据管理系统,其特征在于,所述多个存储节点位于不同的IP地址或位于不同的物理服务器。
48.根据权利要求46所述的数据管理系统,其特征在于,同一缓存实例集合中的主缓存实例操作优先级高于所述第一副缓存实例,所述第一副缓存实例操作优先级高于所述第二副缓存实例。
49.根据权利要求46所述的数据管理系统,其特征在于,所述第一或二副缓存实例为读写缓存实例或只读缓存实例。
50.根据权利要求46所述的数据管理系统,其特征在于,所述缓存实例是由IP地址及端口号表示。
51.根据权利要求46所述的数据管理系统,其特征在于,所述哈希槽与若干哈希值对应,且每一个哈希槽中的哈希值是连续的,多个哈希槽组成的区间是连续的,所述每一组缓存实例集由一个哈希槽区间表示。
52.一种分布式缓存管理方法,应用于包括至少一客户端、进行哈希运算的路由层、以及多个存储节点构建的分布式缓存网络中,其中,各该存储节点中预置有至少一个缓存实例,其特征在于,所述分布式缓存管理方法包括以下步骤:
从所述多个存储节点中确定至少两组缓存实例集并提交缩容请求,其中,所述至少两组缓存实例集分别配置有主缓存实例、对应所述主缓存实例的第一副缓存实例及第二副缓存实例,第一组缓存实例集的第一副缓存实例被配置为第二组缓存实例集的主缓存实例,第一组缓存实例集的第二副缓存实例被配置为第二组缓存实例集的第一副缓存实例,第一组缓存实例集的主缓存实例被配置为第二组缓存实例集的第二副缓存实例,且第一及第二组缓存实例集中的主缓存实例、第一副缓存实例及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点中;
将所述第一及第二组缓存实例集合并,保留所述第一组缓存实例集的主缓存实例以及所述第二组缓存实例集的第一副缓存实例,形成由一主缓存实例及与其对应的第一副缓存实例组成的一组缓存实例集,所述主缓存实例与所述第一副缓存实例映射至相同的哈希槽中,且所述主缓存实例与所述第一副缓存实例位于不同的存储节点中。
53.根据权利要求52所述的分布式缓存管理方法,其特征在于,所述多个存储节点位于不同的IP地址或位于不同的物理服务器。
54.根据权利要求52所述的分布式缓存管理方法,其特征在于,同一缓存实例集合中的主缓存实例操作优先级高于所述第一副缓存实例,所述第一副缓存实例操作优先级高于所述第二副缓存实例。
55.根据权利要求52所述的分布式缓存管理方法,其特征在于,同一缓存实例集合中的第一或二副缓存实例为读写缓存实例或只读缓存实例。
56.根据权利要求52所述的分布式缓存管理方法,其特征在于,所述缓存实例是由IP地址及端口号表示。
57.根据权利要求52所述的分布式缓存管理方法,其特征在于,所述哈希槽与若干哈希值对应,且每一个哈希槽中的哈希值是连续的,多个哈希槽组成的区间是连续的,所述每一组缓存实例集由一个哈希槽区间表示。
58.一种分布式缓存管理系统,其特征在于,包括:
多个存储节点,每一存储节点中预置有至少一个缓存实例,所述多个存储节点中具有至少两组缓存实例集,其中,所述至少两组缓存实例集分别配置有主缓存实例、对应所述主缓存实例的第一副缓存实例及第二副缓存实例,第一组缓存实例集的第一副缓存实例被配置为第二组缓存实例集的主缓存实例,第一组缓存实例集的第二副缓存实例被配置为第二组缓存实例集的第一副缓存实例,第一组缓存实例集的主缓存实例被配置为第二组缓存实例集的第二副缓存实例,且第一及第二组缓存实例集中的主缓存实例、第一副缓存实例及第二副缓存实例映射至相同的哈希槽中,且所述主缓存实例、第一副缓存实例、以及第二副缓存实例位于不同的存储节点中;
路由层,用以通过哈希运算为每一缓存实例映射一哈希槽;
至少一客户端,从所述多个存储节点中确定至少两组缓存实例集并提交缩容请求,以及接收经由所述路由层反馈的缩容结果;以及
管理平台,接收经由所述路由层提交的缩容请求,将所述第一及第二组缓存实例集合并,保留所述第一组缓存实例集的主缓存实例以及所述第二组缓存实例集的第一副缓存实例,形成由一主缓存实例及与其对应的第一副缓存实例组成的一组缓存实例集,所述主缓存实例与所述第一副缓存实例映射至相同的哈希槽中,且所述主缓存实例与所述第一副缓存实例位于不同的存储节点中。
59.根据权利要求58所述的分布式缓存管理系统,其特征在于,所述多个存储节点位于不同的IP地址或位于不同的物理服务器。
60.根据权利要求58所述的分布式缓存管理系统,其特征在于,同一缓存实例集合中的主缓存实例操作优先级高于所述第一副缓存实例,所述第一副缓存实例操作优先级高于所述第二副缓存实例。
61.根据权利要求58所述的分布式缓存管理系统,其特征在于,所述第一或二副缓存实例为读写缓存实例或只读缓存实例。
62.根据权利要求58所述的分布式缓存管理系统,其特征在于,所述缓存实例是由IP地址及端口号表示。
63.根据权利要求58所述的分布式缓存管理系统,其特征在于,所述哈希槽与若干哈希值对应,且每一个哈希槽中的哈希值是连续的,多个哈希槽组成的区间是连续的,所述每一组缓存实例集由一个哈希槽区间表示。
64.一种计算机可读写存储介质,其上存储有用于分布式缓存管理计算机程序,其特征在于,所述分布式缓存管理计算机程序被处理器执行时实现权利要求1-11、28-36及52-57任一项所述分布式缓存管理方法的步骤。
CN201710685559.6A 2017-08-11 2017-08-11 分布式缓存管理方法、系统及数据管理系统 Active CN107493327B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710685559.6A CN107493327B (zh) 2017-08-11 2017-08-11 分布式缓存管理方法、系统及数据管理系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710685559.6A CN107493327B (zh) 2017-08-11 2017-08-11 分布式缓存管理方法、系统及数据管理系统

Publications (2)

Publication Number Publication Date
CN107493327A CN107493327A (zh) 2017-12-19
CN107493327B true CN107493327B (zh) 2020-05-15

Family

ID=60643536

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710685559.6A Active CN107493327B (zh) 2017-08-11 2017-08-11 分布式缓存管理方法、系统及数据管理系统

Country Status (1)

Country Link
CN (1) CN107493327B (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108920092B (zh) * 2018-05-07 2021-07-20 北京奇艺世纪科技有限公司 内存数据的数据操作方法、装置及电子设备
EP3794802A4 (en) 2018-06-06 2021-05-19 Huawei Technologies Co., Ltd. SYSTEM AND PROCEDURES FOR CONTROLLING ADMINISTRATIVE OPERATIONS AND SHARED STORAGE SPACE FOR A CLOUD COMPUTING CLOUD COMPUTING
CN109032502A (zh) * 2018-06-13 2018-12-18 广州市信景技术有限公司 一种分布式数据集群存储系统
CN109274665A (zh) * 2018-09-13 2019-01-25 北京奇安信科技有限公司 Dns威胁情报处理方法及装置
CN110083549B (zh) * 2019-04-01 2021-10-01 福建天泉教育科技有限公司 一种缓存读写的方法及终端
CN110161999A (zh) * 2019-06-14 2019-08-23 湖南千盟智能信息技术有限公司 基于大数据的焦化智能制造系统
CN110489494B (zh) * 2019-08-27 2023-02-24 中国工商银行股份有限公司 分布式数据库在线扩容方法及装置
CN111338571B (zh) * 2020-02-18 2021-08-17 腾讯科技(深圳)有限公司 任务处理方法、装置、设备及存储介质
CN112667711B (zh) * 2020-12-29 2022-12-27 浪潮云信息技术股份公司 一种MySQL只读实例管理方法、系统及计算机可读介质
CN112738339B (zh) * 2020-12-29 2022-09-23 杭州东信北邮信息技术有限公司 一种电信域微服务架构下的服务实例无损扩缩容方法
CN114143196B (zh) * 2021-11-25 2023-07-28 北京百度网讯科技有限公司 实例配置更新方法、装置、设备、存储介质及程序产品
CN114172917B (zh) * 2021-12-01 2023-06-09 东方财富信息股份有限公司 一种分布式缓存系统及其部署的方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104539583A (zh) * 2014-12-05 2015-04-22 浙江浙大中控信息技术有限公司 一种实时数据库订阅系统及方法
CN105159985A (zh) * 2015-08-31 2015-12-16 努比亚技术有限公司 基于redis集群的数据查询装置及方法
CN106375425A (zh) * 2016-08-30 2017-02-01 中国民生银行股份有限公司 分布式缓存的处理方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9442854B2 (en) * 2012-11-15 2016-09-13 Elwha Llc Memory circuitry including computational circuitry for performing supplemental functions

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104539583A (zh) * 2014-12-05 2015-04-22 浙江浙大中控信息技术有限公司 一种实时数据库订阅系统及方法
CN105159985A (zh) * 2015-08-31 2015-12-16 努比亚技术有限公司 基于redis集群的数据查询装置及方法
CN106375425A (zh) * 2016-08-30 2017-02-01 中国民生银行股份有限公司 分布式缓存的处理方法和装置

Also Published As

Publication number Publication date
CN107493327A (zh) 2017-12-19

Similar Documents

Publication Publication Date Title
CN107493327B (zh) 分布式缓存管理方法、系统及数据管理系统
US11082206B2 (en) Layout-independent cryptographic stamp of a distributed dataset
US10291696B2 (en) Peer-to-peer architecture for processing big data
US10178174B2 (en) Migrating data in response to changes in hardware or workloads at a data store
JP6542909B2 (ja) ファイル操作方法及び装置
US9590915B2 (en) Transmission of Map/Reduce data in a data center
US10423641B2 (en) Hierarchical coherency log for managing a distributed data storage system
US8341119B1 (en) Flexible copies having different sub-types
US10244050B2 (en) Network-based elastic storage
CN109933312B (zh) 一种有效降低容器化关系型数据库i/o消耗的方法
US8135918B1 (en) Data de-duplication for iSCSI
US10320905B2 (en) Highly available network filer super cluster
US11811839B2 (en) Managed distribution of data stream contents
JP6288596B2 (ja) データ処理方法および装置
US9110820B1 (en) Hybrid data storage system in an HPC exascale environment
WO2021213281A1 (zh) 数据读取方法和系统
US8386741B2 (en) Method and apparatus for optimizing data allocation
US20190188186A1 (en) Consistent hashing configurations supporting multi-site replication
WO2019091349A1 (zh) 数据均衡方法、装置及计算机设备
WO2023179784A1 (zh) 数据处理方法以及装置
WO2024021470A1 (zh) 一种跨区域的数据调度方法、装置、设备及存储介质
US11681475B2 (en) Methods, devices, and a computer program product for processing an access request and updating a storage system
JP5278254B2 (ja) ストレージシステム、データ記憶方法及びプログラム
US12032514B2 (en) Method, device, and computer program product for adaptive matching
CN106527982B (zh) 一种针对由异构存储设备组成的对象存储系统的对象分布算法

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
GR01 Patent grant
GR01 Patent grant