CN102460411A - 在垃圾收集期间的分布式缓存可用性 - Google Patents
在垃圾收集期间的分布式缓存可用性 Download PDFInfo
- Publication number
- CN102460411A CN102460411A CN2010800271041A CN201080027104A CN102460411A CN 102460411 A CN102460411 A CN 102460411A CN 2010800271041 A CN2010800271041 A CN 2010800271041A CN 201080027104 A CN201080027104 A CN 201080027104A CN 102460411 A CN102460411 A CN 102460411A
- Authority
- CN
- China
- Prior art keywords
- instance
- data module
- node
- data
- state
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
本文描述用于在垃圾收集期间管理对分布式缓存的访问的技术。在要相对于节点执行垃圾收集时,该节点可以向数据管理器发送请求,以请求将该节点中所包括的、处于主要状态的数据模块的实例置于次要状态。数据管理器可以将数据模块的状态改变成次要状态。数据管理器可以将在另一节点中所包括的数据模块的另一实例的状态改变成主要状态。在相对于该节点的垃圾收集完成时,该节点可以向数据管理器发送另一请求,以请求将被置于次要状态的数据模块返回到主要状态。数据管理器可以将那些数据模块返回到主要状态。
Description
背景技术
在计算机科学的上下文中,缓存是被存储在其他地方(例如,被存储在数据库或其他数据存储系统中)的原始数据的副本的数据集合。被存储在缓存中的数据常常是原始数据中被频繁地使用的子集。举例来说,由于相比于与缓存相关联的访问时间的相对较长的访问时间,访问原始数据可能是昂贵的。因此,访问在缓存处而非在数据库或其他数据存储系统处的数据可能是合乎需要的。
分布式缓存是其中将数据存储在多个机器(例如,计算机或其他处理系统)上的缓存。分布式缓存提供在存储原始数据的数据存储系统(例如,关系数据库)中往往不可用的可缩放性。然而,用托管代码(例如,Java、公共语言运行时(CLR)等等)编写的分布式缓存常常遇到关于诸如垃圾收集操作等的一些操作的瓶颈。
缓存可以被用来存储诸如(但不限于)数据结构等的对象。各对象可以与允许它们由应用程序读取或写入的诸如地址等的唯一标识符相关联。出于各种原因,被存储在缓存中的某些对象可能不再被任何应用程序引用。在这种情况中,将那些对象维持在缓存中所要求的资源(例如,与缓存相关联的存储器)被浪费掉了。为了解决这一问题,可以使用“垃圾收集”操作来标识不被任何应用程序引用的对象并收回被用来维持那些对象的资源。
通常,在分析一对象以便判断该对象是否被至少一个应用程序引用的同时,垃圾收集操作“锁定”该对象。锁定对象防止了各进程(例如,与软件应用程序相关联的进程)访问该对象。因此,对于管理对分布式缓存的访问的实体来说,可能看上去是存储经锁定的对象的机器无响应。该实体可能因此不必要地尝试重新配置该机器。
在各机器当中运行分布式缓存的多个实例以便将相同量的数据存储为单个实例而不是运行单个实例,可以减少在垃圾收集操作期间被锁定的对象的数量。然而,运行多个缓存实例要求更多开销,且可能妨碍要求数据全部都在单个进程上的存储器中的进程的执行(例如,联结、依存关系等等)。在其中每一机器存储相应的相同数据的实例的经复制的分布式缓存(replicated distributed cache)中,如果在一个机器上锁定了一个对象,则可以使用负载平衡来提供对另一机器上的该对象的访问。然而,在其中每一机器存储相应的数据分区的经分区的分布式缓存(partitioned distributedcache)中,这样的负载平衡是不可能的。
发明内容
在此描述尤其用于在垃圾收集操作期间管理对分布式缓存的访问的各种方法。分布式缓存由被多个机器(例如,计算机或其他处理系统)主控的多个节点构成。每一节点包括分布式缓存的一个或多个数据模块。数据模块是分布式缓存或分布式缓存的副本的相应部分(例如,分区或其他合适的部分)。应注意,可以跨越多个节点复制分布式缓存的任何部分。举例来说,一个部分的第一实例可以被包括在第一节点中,该部分的第二实例可以被包括在第二节点中,等等。此外,节点可以包括分布式缓存的相同部分的多个实例。然而,“分布式缓存的副本”是指被存储在分布式缓存中的所有数据的实例。相对于节点执行的垃圾收集操作可以锁定该节点中所包括的数据的实例。然而,在跨越多个节点复制分布式缓存的部分或全部时,该数据的一个或多个其他实例在分布式缓存的其他节点上可用,以使得垃圾收集操作的执行不将该数据呈现为对尝试访问该数据的进程(例如,与各软件应用程序相关联的各进程)来说是不可访问的。
数据管理器是在各节点当中分发分布式缓存的各数据模块的至少一个计算机或其他处理系统,包括一个或多个处理器。在复制场景中,数据模块的多个实例可以被存储在不同的节点中以便得到“高可用性”。数据管理器也确定相应的数据模块的哪些实例应该是相应的数据模块的主要实例以及哪些应该是数据模块的次要实例。相对于缓存操作的数据模块的主要实例是相对于该数据模块的缓存操作最初针对的数据模块的实例或者相对于该数据模块的缓存操作在其处被发起的数据模块的实例。缓存操作的示例包括但不限于读操作、写操作、逐出(eviction)操作、通知操作等等。例如,相对于数据模块的读(或写)操作最初针对的数据模块的实例是相对于该读(或写)操作的数据模块的主要实例。在另一示例中,在其处发起相对于数据模块的逐出(或通知)操作的数据模块的实例是相对于该逐出(或通知)操作的数据模块的主要实例。相对于缓存操作的数据模块的次要实例本质上是相对于缓存操作的数据模块的“备份”实例。
数据管理器能够改变数据模块的实例的状态,以使得可以相对于数据模块的第一实例执行垃圾收集操作。例如,数据管理器可以将数据模块的第一实例的状态从主要状态改变成次要状态。当节点中所包括的各数据模块的所有实例处于次要状态时,该节点被称为离线。举例来说,各缓存操作不在离线节点中所包括的各数据模块的各实例处被发起,或者最初不针对离线节点中所包括的各数据模块的各实例,这是因为各数据模块的那些实例处于次要状态。在另一示例中,数据管理器可以将数据模块的第二实例的状态从次要状态改变成主要状态,以使得被存储在该数据模块中的数据在垃圾收集操作期间是可用的。
当节点接收到将相对于该节点执行垃圾收集操作的指示时,该节点可以向数据管理器发送请求,以请求在相对于该节点的垃圾收集操作的执行之前将该节点中所包括的处于主要状态的数据模块的各实例置于次要状态。当该节点接收到相对于该节点的垃圾收集操作完成的指示时,该节点可以向数据管理器发送另一请求,以请求将被置于次要状态的数据模块的各实例返回到主要状态。
描述了一种示例方法,其中从分布式缓存的节点接收在相对于该节点的垃圾收集操作的执行之前将该节点置于离线状态的请求。响应于接收到该请求,使用处理器,将该节点中所包括的数据模块的实例的状态从主要状态改变成次要状态。该实例的主要状态指示,相对于数据模块的缓存操作要在该节点中所包括的数据模块的该实例处被发起,或者最初要针对该节点中所包括的数据模块的该实例。该实例的次要状态指示,相对于数据模块的缓存操作不要在该节点中所包括的数据模块的该实例处被发起,或者最初不要针对该节点中所包括的数据模块的该实例。
描述了另一示例方法,其中从分布式缓存的节点接收在相对于该节点的垃圾收集操作的执行之前将该节点置于离线状态的请求。响应于从该节点接收到该请求,作出除了该节点中所包括的数据模块的实例之外的数据模块的每一实例都被垃圾收集操作锁定的判断。响应于判断除了该节点中所包括的数据模块的实例之外的数据模块的每一实例都被垃圾收集操作锁定,作出推迟相对于该节点的垃圾收集操作的请求。
还描述了另外一种示例方法,其中从分布式缓存的节点接收在相对于该节点的垃圾收集操作的执行之前将该节点置于离线状态的请求。响应于从该节点接收到该请求,将该节点的负载与阈值进行比较。基于该负载超过该阈值,作出推迟相对于该节点的垃圾收集操作的请求。
还描述了另外一种示例方法,其中在分布式缓存的节点处接收指示器。该指示器指示,要相对于该节点执行垃圾收集操作。使用主控该节点的机器的处理器,从该节点向数据管理器发送请求。该请求寻求在垃圾收集操作的执行之前将该节点中所包括的数据模块的实例置于次要状态。
还描述了另外一种示例方法,其中在分布式缓存的节点处接收到指示器的。该指示器指示,相对于该节点完成了垃圾收集操作。使用主控该节点的机器的处理器,从该节点向数据管理器发送请求。响应于相对于该节点的垃圾收集操作的完成,该请求寻求将该节点中所包括的数据模块的实例从次要状态返回到主要状态。
描述了包括接收模块和状态模块的示例数据管理器。接收模块被配置为从分布式缓存的节点接收在相对于该节点的垃圾收集操作的执行之前将该节点置于离线状态的请求。状态模块被配置为响应于该请求将该节点中所包括的数据模块的实例的状态从主要状态改变成次要状态。
还描述了计算机程序产品。该计算机程序产品包括其上记录有用于允许基于处理器的系统在垃圾收集操作期间管理对分布式缓存的访问的计算机程序逻辑的计算机可读介质。该计算机程序产品包括第一程序逻辑模块和第二程序逻辑模块。第一程序逻辑模块用于允许基于处理器的系统响应于来自第一节点的、在相对于第一节点的垃圾收集操作的执行之前将第一节点置于离线状态的请求,将分布式缓存的第一节点中所包括的数据模块的第一实例的状态从主要状态改变成次要状态。第二程序逻辑模块用于允许该基于处理器的系统响应于该请求,将分布式缓存的第二节点中所包括的数据模块的第二实例的状态从次要状态改变成主要状态。
提供本发明内容以便以简化形式介绍下面在具体实施方式中进一步描述的概念的选集。本发明内容不旨在标识所要求保护的本主题的关键特征或必要特征,也不旨在用来限制所要求保护的本主题的范围。此外,应注意,本发明不限于在具体实施方式和/或此文档的其他部分中描述的具体实施例。在此仅出于说明性目的呈现这样的实施例。基于在此包含的教导,其他实施例对于相关领域中的技术人员将是显而易见的。
附图说明
被合并在此并形成说明书的部分的附图示出了本发明的各实施方式,并且与该描述一起,进一步用于解释所涉及的原理以及允许相关领域中的技术人员实现和使用所公开的技术。
图1是分布式缓存的示例逻辑表示。
图2是被用来在具有主要数据分区的经分区的分布式缓存中路由Put(放置)操作和Get(获取)操作的请求和响应的示例路由协议的框图。
图3是被用来在具有主要数据分区和次要数据分区的经分区的分布式缓存中路由Put操作和Get操作的请求和响应的示例路由协议的框图。
图4是被用来在经复制的分布式缓存中路由Put操作和Get操作的请求和响应的示例路由协议的框图。
图5是被用来使用本地缓存路由Put操作和Get操作的请求和响应的示例路由协议的框图。
图6是根据一种实施方式利用分布式缓存的示例计算机系统的框图。
图7和图8描绘根据各实施方式用于请求节点中所包括的数据模块的实例的状态改变的方法的流程图。
图9是根据一种实施方式的图1中所示出的机器的示例实现的框图。
图10A-图10C描绘根据一种实施方式用于在垃圾收集操作期间管理对分布式缓存的访问的方法的流程图的相应部分。
图11、图13和图15是根据一种实施方式的图1中所示出的数据管理器的示例实现的框图。
图12和图14描绘根据各实施方式用于在垃圾收集操作期间管理对分布式缓存的访问的方法的流程图。
图16描绘可以在其中实现各实施方式的示例计算机。
当结合附图理解时,将从下面陈述的具体实施方式更明显地看出所公开的技术的特征和优点,附图中,类似的参考字符始终标识相应的元素。附图中,类似的参考数字通常指示相同的、功能上相似的和/或结构上相似的元素。元素首次在其中出现的图由相应的参考数字中最左边的数字标识。
具体实施方式
具体实施方式从介绍性部分开始,以便介绍在随后的部分中更详细地讨论的一些概念。在接下来的部分中描述分布式缓存的示例实现。然后,讨论用于在垃圾收集期间提供分布式缓存可用性的各示例实施方式,接着是结论部分。
I.介绍
以下详细描述参考示出本发明的示例性实施例的附图。但是,本发明的范围不限于这些实施例,而是由所附权利要求书定义。因此,诸如所示实施例的修改版本之类的在附图所示之外的实施例仍然由本发明所包含。
本说明书中对“一个实施例”、“实施例”、“示例实施例”等的参考,指的是所述实施例可包括具体的特征、结构或特点,但是每个实施例不一定包括该具体的特征、结构或特点。此外,这些短语不一定指相同的实施例。此外,当结合实施例描述具体特征、结构或特性时,应当理解在相关领域的技术人员的知识范围内能够结合其他实施例来实现具体特征、结构或特性,无论是否被显式地描述。
各示例实施方式能够在垃圾收集操作期间管理对分布式缓存的访问。分布式缓存由被多个机器(例如,计算机或其他处理系统)主控的多个节点构成。每一节点包括分布式缓存的一个或多个数据模块。数据模块是分布式缓存或分布式缓存的副本的相应部分(例如,分区或其他合适的部分)。应注意,可以跨越多个节点复制分布式缓存的任何部分。例如,一个部分的第一实例可以被包括在第一节点中,该部分的第二实例可以被包括在第二节点中,等等。此外,节点可以包括分布式缓存的相同部分的多个实例。然而,“分布式缓存的副本”是指被存储在分布式缓存中的所有数据的实例。相对于节点执行的垃圾收集操作可以锁定该节点中所包括的数据的实例。然而,在跨越多个节点复制分布式缓存的部分或全部时,该数据的一个或多个其他实例在分布式缓存的其他节点上可用,以使得垃圾收集操作的执行不将该数据呈现为对尝试访问该数据的进程(例如,与各软件应用程序相关联的各进程)来说是不可访问的。
数据管理器是在主控相应节点的机器当中分发分布式缓存的各数据模块的实例的至少一个计算机或其他处理系统,包括一个或多个处理器。在复制场景中,数据模块的多个实例可以被存储在不同的节点中,以便得到那些数据模块的“高可用性”。数据管理器还确定相应数据模块的哪些实例应该是相应数据模块的主要实例以及哪些应该是数据模块的次要实例。相对于缓存操作的数据模块的主要实例是相对于数据模块的缓存操作最初针对的数据模块的实例或者相对于数据模块的缓存操作在其处被发起的数据模块的实例。缓存操作的示例包括但不限于读操作、写操作、逐出操作、通知操作等等。例如,相对于数据模块的读(或写)操作最初针对的数据模块的实例是相对于该读(或写)操作的数据模块的主要实例。在另一示例中,在其处发起相对于数据模块的逐出(或通知)操作的数据模块的实例是相对于该逐出(或通知)操作的数据模块的主要实例。相对于缓存操作的数据模块的次要实例本质上是相对于缓存操作的数据模块的“备份”实例。
根据各示例实施方式,数据管理器能够改变数据模块的实例的状态,以使得可以相对于主要数据模块执行垃圾收集操作。例如,数据管理器可以将数据模块的第一实例的状态从主要状态改变成次要状态。当节点中所包括的各数据模块的所有实例处于次要状态时,该节点被称为离线。举例来说,缓存操作不在离线的节点中所包括的各数据模块的各实例处被发起,或者最初不针对离线的节点中所包括的各数据模块的各实例,这是因为数据模块的那些实例处于次要状态。在另一示例中,数据管理器可以将数据模块的第二实例的状态从次要状态改变成主要状态,以使得被存储在该数据模块中的数据在垃圾收集操作期间是可用的。
根据各示例实施方式,当节点接收到将相对于该节点执行垃圾收集操作的指示时,该节点向数据管理器发送请求。该请求寻求在相对于该节点的垃圾收集操作的执行之前将该节点中所包括的处于主要状态的数据模块的实例置于次要状态。当该节点接收到相对于该节点的垃圾收集操作完成的指示时,该节点可以向数据管理器发送另一请求,以请求将从主要状态被置于次要状态的数据模块的实例返回到主要状态。
II.分布式缓存的示例实现
图1是分布式缓存100的示例逻辑表示。分布式缓存是其中将数据被存储在多个机器(例如,机器102A-102N)上的缓存。机器是被配置为支持分布式缓存的一个或多个节点的计算机(例如,服务器)或其他处理系统。每一节点包括分布式缓存的一个或多个数据模块。数据模块是分布式缓存或分布式缓存的副本的相应部分(例如,分区或其他合适的部分)。应注意,可以跨越多个节点复制分布式缓存的任何部分。举例来说,一个部分的第一实例可以被包括在第一节点中,该部分的第二实例可以被包括在第二节点中,等等。此外,节点可以包括分布式缓存的相同部分的多个实例。然而,“分布式缓存的副本”是指被存储在分布式缓存中的所有数据的实例。
分布式缓存100包括已命名的缓存(named cache)106A和106B。已命名的缓存是数据的逻辑分组。为便于讨论,已命名的缓存可以被认为是数据库,尽管各示例实施方式的范围在这一方面不受到限制。已命名的缓存106A和106B指定物理配置和缓存策略,包括但不限于故障恢复、期满、逐出等等。需要与所指派的分布式缓存(例如,分布式缓存100)通信的应用程序实例化相同的已命名的缓存。
基于各种缓存的策略,应用程序可以使用一个或多个已命名的缓存。例如,第一类型的数据(例如,活动数据)可以被存储在经分区的已命名的缓存中,而第二类型的数据(例如,引用数据)可以被存储在经复制的已命名的缓存。下面更详细地讨论经分区的分布式缓存和经复制的分布式缓存。
出于说明性目的,在图1中示出两个已命名的缓存(即,已命名的缓存106A和106B),且这两个已命名的缓存不旨在是限制性的。相关领域中的技术人员将认识到,分布式缓存100可以包括任何数量的已命名的缓存。已命名的缓存106A被示出为存储与产品目录相关联的数据,且已命名的缓存106B被示出为存储与电子设备清单相关联的数据,但应明白,已命名的缓存可以存储任何合适的数据的分组。
节点104A-104Z中的每一个(又称为“缓存主机”)包括分布式缓存100的一个或多个数据模块。数据模块是分布式缓存或分布式缓存的副本的相应部分(例如,分区或其他合适的部分)。应注意,可以跨越多个节点复制分布式缓存的任何部分。举例来说,一个部分的第一实例可以被包括在第一节点中,该部分的第二实例可以被包括在第二节点中,等等。此外,节点可以包括分布式缓存的相同部分的多个实例。然而,“分布式缓存的副本”是指被存储在分布式缓存中的所有数据的实例。节点104A-104Z被统称为“群集”。
已命名的缓存106A和106B中的每一个包括一个或多个区域。区域是已命名的缓存中的对象的逻辑分组。举例来说,出于说明性目的,图1中将已命名的缓存106A示出为包括区域108A-108Y。因此,在节点104A-104Z当中的每一数据模块可以包括已命名的缓存106A和/或已命名的缓存106B的一个或多个相应区域。为便于讨论,区域可以被认为是表,尽管各实施方式的范围在这一方面不受到限制。举例来说,区域可以存储键值对的任意集合。键值对包括键和对应的值。键可以是字符串,例如,被用来在查找分布式缓存100中的位置的字符串。值是对应于由该键指示的位置的数据(例如,对象)。下面参考图2-图5提供键值对的进一步讨论。
应注意,应用程序并不必须指定区域以便访问已命名的缓存(例如,已命名的缓存106A或106B)。举例来说,应用程序可以使用仅使用对应的对象的键的put、get和remove(移除)应用程序编程接口(API)。事实上,在不使用各区域时,应用程序可以更好地缩放,这是因为可以跨越已命名的缓存分发由该应用程序所写的键值对而无需考虑区域。例如,如果在键值对的创建和写期间没有指定区域,则可以自动地将该键值对分区到例如多个隐含创建的区域中。
每一区域108A-1008Y包括一个或多个缓存项。如图1中所示出,出于说明性目的,区域108A包括缓存项110A-110P。缓存项表示包括与其他信息一起被缓存的对象的最低级别的缓存,该其他信息可以包括但不限于键、对象有效载荷、一个或多个标签、生存时间(TTL)、所创建的时间戳、版本号、其他内部簿记信息等等。出于说明性目的,缓存项110A-110P中的每一个被示出为包括键、有效载荷和标签,但应明白,各示例实施方式在这一方面不受到限制。例如,缓存项110A-110P并不必须包括相应的键、有效载荷和/或标签。在另一示例中,缓存项110A-110P可以包括除了图1中所示出的键、有效载荷和/或标签之外的信息或者代替它们的信息。以下是示出已命名的缓存和区域的创建的C#代码示例:
上面所提供的示例代码不旨在是限制性的。应明白,任何合适类型的代码都可以用来创建已命名的缓存和/或区域。
在复制场景中,可以跨越节点104A-104Z存储各数据模块的多个实例以便得到“高可用性”。节点104A-104Z中的每一个可以是相对于分布式缓存100的任何一个或多个数据模块的主要节点或次要节点。主要节点是包括经指派的数据模块的主要实例的节点。举例来说,对经指派的数据模块的访问被路由到经指派的数据模块的主要节点。次要节点是包括经指派的区域的次要实例的节点。举例来说,例如,如果已命名的缓存被配置为具有数据模块的“备份实例”以便得到高可用性,那么,指定主要节点用于提供对该数据模块的访问,且在例如主要实例变得不可访问的情况下,选择一个或多个其他节点以便包括该数据模块的一个或多个相应的次要实例。在次要实例中反映对数据模块的主要实例所作出的改变。可以同步地或异步地将这样的改变提供给次要实例。在异步方法中,如果数据模块的主要节点故障,则次要节点可以被用来读取被存储在该数据模块中的数据,而不必将日志写到盘。举例来说,主要节点的故障导致次要节点变成主要节点,以使得数据模块保持是可访问的。
一个节点可以是相对于一个或多个第一数据模块的主要节点和相对于相同的分布式缓存的一个或多个第二数据模块的次要节点。例如,如果该节点被指定为具有第一数据模块的主要实例,则该节点被认为是相对于第一数据模块的主要节点。包括第一数据模块的实例但不提供对该第一数据模块的访问的任何其他节点被认为是相对于该第一数据模块的次要节点。如果该节点不提供对第二数据模块的访问,则该节点被认为是相对于第二数据模块的次要节点。提供对第二数据模块的访问的节点被认为是相对于该第二数据模块的主要节点。
分布式缓存100可以是各种缓存类型中的任何一种类型,包括但不限于经分区的缓存、经复制的缓存或本地缓存。应明白,这些类型的分布式缓存中的每一个可以包括任何一个或多个数据模块的多个实例。例如,数据模块的多个实例可以被存储在分布式缓存的多个相应节点中。在另一示例中,数据模块的多个实例可以被存储在公共节点上。每一数据模块的一个实例可以被指派为相应数据模块的主要实例。该数据模块的其他实例被指派为相应数据模块的次要实例。
例如,应用程序可以基于例如要被缓存的数据的类型选择适当类型的缓存。经分区的缓存是包括在其上定义了已命名的缓存的各节点当中分区的区域的缓存。跨越群集(例如,机器102A-102N)的各机器的经组合的存储器可以用来缓存数据,这可以增加对分布式缓存100可用的存储器的量。与数据分区相关联的所有缓存操作在包含相对于相应的缓存操作的数据分区的主要实例的节点处被发起,或者与数据分区相关联的所有缓存操作最初针对包含相对于相应的缓存操作的数据分区的主要实例的节点。
经分区的缓存可以用来取得所期望的缩放。举例来说,机器和/或节点可以被添加到分布式缓存100,以便允许发生自动负载平衡。举例来说,被存储在机器102A-102N(或节点104A-104Z)当中的一些分区可以被迁移到所添加的机器和/或节点。这样的自动负载平衡可以导致键跨越经修订的群集而分布。访问请求可以被路由到更多机器,这可以得到增加的吞吐量。附加的机器可以提供附加的存储器。附加的存储器可以允许分布式缓存100存储更多的数据。
图2是被用来在具有数据分区的主要实例210A-210C的经分区的分布式缓存中路由Put操作206和Get操作208的请求和响应的示例路由协议200的框图。主要实例210A-210C中的每一个包括一个或多个相应数据分区的一个或多个主要实例。应注意,在图2的实施方式中,节点104A-104C中没有包括数据分区的副本,这是因为节点104A-104C中的每一个仅包括相应数据分区的主要实例。在给定的时间,只有一个数据分区的实例可以是主要实例。Put操作(例如,Put操作206)在分布式缓存(例如,分布式缓存100)中写数据。Get操作(例如,Get操作208)从分布式缓存(例如,分布式缓存100)读取数据。Put操作206和Get操作208由相应的缓存客户机202A、202B执行。
缓存客户机是与节点通信以便相对于分布式缓存中的数据分区进行写和/或读数据的软件应用程序。缓存客户机可以被配置成简单缓存客户机或路由缓存客户机。简单缓存客户机是被配置为联系群集中的一个节点(例如,节点104A-104C中的一个)的缓存客户机。简单缓存客户机不具有路由能力且不跟踪每一经缓存的对象被存储在分布式缓存中的何处。如果简单缓存客户机向不存储对象或不是对象的主要节点的节点请求该对象,则该节点从群集检索该对象,且然后,将该对象返回给该简单缓存客户机。另一方面,路由客户机是具有路由能力的缓存客户机。路由缓存客户机包括路由表以便跨越群集中的各节点(例如,节点104A-104C)跟踪经缓存的对象放置。因为路由缓存客户机跟踪经缓存的对象中的每一个位于何处,所以路由缓存客户机可以直接对将该对象存储在存储器中的节点作出请求。
如图2中所示出,出于说明性目的,缓存客户机202A和202B被配置成简单缓存客户机。然而,应明白,缓存客户机202A或202B中的任何一个或多个可以被配置成路由缓存客户机。在图2中,Put操作206为键“K2”赋值“V2”。节点104A的路由层204A确定键“K2”与节点104B相关联。因此,路由层204A将与Put操作206相关联的请求路由到节点104B的主要数据分区210B。路由层204C也将对应于对键“K2”的Get操作208的请求路由到主要数据分区210B。应注意,路由层可以被合并到缓存客户机中。因此,路由层204A可以被合并到缓存客户机202A中,并且/或者路由层204C可以被合并到缓存客户机202B中。
图3是被用来在具有数据分区的主要实例210A-210C和数据分区的次要实例302A-302C的经分区的分布式缓存中路由Put操作206和Get操作208的请求和响应的示例路由协议300的框图。跨越节点104A-104C复制数据(例如,键值对“K1,V1”、“K2,V2”和“K3,V3”),尽管不复制数据分区210A-210C和302A-302C。如图3中所示出,缓存客户机202A发送将值“V2”与键“K2”放置到节点104A的请求。路由层204A确定键“K2”属于节点104B,且因此将键“K2”路由到节点104B。节点104B本地执行Put操作206,且也将对应于Put操作206的放置请求发送给次要节点104A和104C。节点104A和104C被视为相对于键值对“K2,V2”的次要节点,这是因为节点104A和104C包括键值对“K2,V2”的次要实例。节点104B等待来自节点104A和104C的、已经从节点104B接收到对键值对“K2,V2”的请求的确认。一旦接收到这样的确认,节点104B就向节点104A提供确认Put操作的成功的指示器。节点104A将该指示器转发给缓存客户机202A。
以与以上参考图2所描述的方式类似的方式来执行Get操作208。举例来说,路由层204C将对应于Get操作208的请求路由到包括键“K2”的主要数据分区210B。
图4是被用来在经复制的分布式缓存中路由Put操作206和Get操作208的请求和响应的示例路由协议400的框图。如图4中所示出,节点104A-104C包括经复制的数据分区402A-402C的相应实例。经复制的数据分区的每一实例402A-402C包括键值对“K1,V1”、“K2,V2”和“K3,V3”。缓存客户机202A向节点104A提供对应于Put操作206的Put请求。Put请求包括键“K2”和值“V2”。节点104A经由路由层204A将Put请求路由到节点104B,这是因为在这一示例中节点104B是键“K2”的主要节点。响应于接收到Put请求,节点104B本地执行写操作。节点104B向节点104A提供指示节点104B已经执行写操作的通知。节点104A将该通知转发给缓存客户机202A。同时,节点104B异步地将该改变传播到分布式缓存的所有其他节点(例如,在这一示例中是节点104C)。在经复制的分布式缓存中本地执行Get操作208。
图5是被用来使用本地缓存502A、502B路由Put操作206和Get操作208的请求和响应的示例路由协议500的框图。如图5中所示出,缓存客户机202A、202B包括相应的本地缓存502A、502B。举例来说,对于频繁访问的项,应用程序可以将本地缓存维持在应用程序进程空间中。每一本地缓存502A、502B被示出为包括相应的路由层504A、504B。在本地缓存502A、502B中,可以以对象形式保持有效载荷,以便例如节省并行化成本和/或到主要节点的网络跳跃,这可以改善分布式缓存的性能。
III.用于在垃圾收集期间管理对分布式缓存的访问的示例实施方式
图6是根据一种实施方式利用分布式缓存(例如,图1中所示出的分布式缓存100)的示例计算机系统600的框图。一般地说,计算机系统600操作用于存储在分布式缓存的节点之间的数据的实例(例如,对象)。如图6中所示出,计算机系统600包括多个用户系统602A-602M、垃圾收集器604、数据管理器606、网络608、数据库610和缓存主控系统612。缓存主控系统612包括下面更详细地讨论的多个机器102A-102N。在网络608上使用公知的网络通信协议执行在用户系统602A-602M、垃圾收集器604、数据管理器606、数据库610和机器102A-102N之间的通信。网络608可以是广域网(例如,因特网)、局域网(LAN)、另一类型的网络或其组合。
用户系统602A-602M是能够与机器102A-102N通信的计算机或其他处理系统,各自包括一个或多个处理器。用户系统602A-602M能够访问被存储在由缓存主控系统612主控的分布式缓存中的数据。分布式缓存包括由相应的机器102A-102N主控的节点614A-614N。例如,用户系统602A-602M可以被配置为向机器102A-102N提供Put请求,以便请求向其写数据。在另一示例中,用户系统602A-602M可以被配置为向机器102A-102N提供Get请求,以便请求读取被存储在其上的数据。举例来说,用户可以使用被部署在由用户拥有的或以另外方式对用户可访问的用户系统602上的客户机来发起Put请求或Get请求。
缓存主控系统612主控分布式缓存。缓存主控系统612包括多个机器102A-102N。机器102A-102N是能够与用户系统602A-602M通信的计算机或其他处理系统,各自包括一个或多个处理器。机器102A-102N被配置为主控相应的节点614A-614N。每一节点包括分布式缓存的相应数据模块。如图1中所示出,第一节点614A包括第一数据模块616A,第二节点614B包括第二模块616B,等等。
数据模块是分布式缓存或分布式缓存的副本的相应部分(例如,缓存项、区域、分区等等)。应注意,可以跨越节点614A-614N复制分布式缓存的任何部分。举例来说,一个部分的第一实例可以被包括在第一节点614A的节点中,该部分的第二实例可以被包括在第二节点614B的节点中,等等。此外,节点可以包括分布式缓存的相同部分的多个实例。例如,第一节点614A的节点可以包括缓存项、区域、数据分区或分布式缓存的任何其他合适的部分中的两个或更多个实例。然而,“分布式缓存的副本”是指被存储在分布式缓存中的所有数据的实例。相对于节点执行的垃圾收集操作可以锁定该节点中所包括的数据的实例。然而,当跨越节点614A-614N复制分布式缓存的部分或全部时,该数据的一个或多个其他实例在分布式缓存的其他节点上可用,以使得垃圾收集操作的执行不将该数据呈现为对尝试访问该数据的进程(例如,与应用程序618A-618N相关联的进程)来说是不可访问的。
数据模块的任何数量实例可以被存储在节点614A-614N当中,尽管在给定时间只有一个数据模块的实例可以被指定为相对于缓存操作的该数据模块的主要实例。相对于缓存操作的数据模块的主要实例被称为处于相对于缓存操作的主要状态,且任何其他实例被称为处于相对于缓存操作的次要状态。应注意,包括数据模块的主要实例的节点被称为该数据模块的主要节点。包括数据模块的次要实例的节点被称为该数据模块的次要节点。应明白,一个节点可以是一些数据模块的主要节点和其他数据模块的次要节点。
各种应用程序中的任何一种应用程序都可以被部署在机器102A-102N上。如图6中所示出,第一应用程序618A被部署在机器102A上,第二应用程序618B被部署在机器102B上,等等。应用程序618A-618N可以执行创建要写到分布式缓存的新数据或者读取或修改被存储在分布式缓存中的现有数据的操作。举例来说,应用程序618A-618N可以使用Put请求和Get请求来分别跨越机器102A-102N写入和读取数据。在一些示例实施方式中,用户系统602A-602M无需通过网络608就能够访问应用程序618A-618N中的一个或多个。除了被部署在相应的机器102A-102N上或代替被部署在相应的机器102A-102N上,应用程序618A-618N中的任何一个或多个可以被部署在相应的用户系统602A-602M上。
缓存可以被用来存储对象,例如(但不限于)数据结构。各对象可以与允许它们被应用程序读取或写入的诸如地址等的唯一标识符相关联。出于各种原因,被存储在缓存中的某些对象可能不再被任何应用程序引用。在这种情况中,将那些对象维持在缓存中所要求的资源(例如,与缓存相关联的存储器)被浪费掉了。为了解决这一问题,可以使用“垃圾收集”操作来标识不被任何应用程序引用的对象并回收被用来维持那些对象的资源。
在根据垃圾收集操作分析对象的实例以便判断该对象是否被至少一个应用程序引用的同时,垃圾收集器604可以“锁定”对象的实例。锁定对象的实例防止了各进程(例如,与应用程序618A-618N相关联的各进程)访问该对象的该实例。然而,应明白,分布式缓存可以包括在垃圾收集操作期间可访问的该对象的其他实例(只要那些实例是处于主要状态且不被垃圾收集操作锁定)。下面参考数据管理器606和图7-图15中描绘的各示例实施方式更详细地讨论用于在垃圾收集操作期间管理对分布式缓存中的各对象的访问的技术。
出于说明性目的且不旨在是限制性的,垃圾收集器604在图6中被示出为独立计算机或处理系统。应明白,垃圾收集器604可以部分地或完全地被合并到缓存主控系统612中。举例来说,垃圾收集器604的部分或全部可以被存储在机器102A-102N的一个上或者被分布在机器102A-102N中的任何两个或更多个之间。
数据管理器606是在机器102A-102N之间分发分布式缓存的各数据模块的各实例的至少一个计算机或其他处理系统,包括一个或多个处理器。数据管理器606还确定相应的数据模块的哪些实例应该是主要数据模块且哪些应该是次要数据模块。
数据管理器606被配置为在垃圾收集操作期间管理对分布式缓存的访问。例如,数据管理器606可以被配置为确保节点中所包括的各数据模块的各实例在相对于该节点执行垃圾收集操作之前处于次要状态。在这一示例中,数据管理器606可以将在另一节点中所包括的数据模块的另一实例的状态改变成主要状态,以使得在垃圾收集操作期间该数据模块中的数据是可访问的。如果对其执行垃圾收集操作的节点包括分布式缓存的数据模块中仅有的一个实例,则数据管理器606可以生成要被包括在另一节点中的数据模块的另一实例,以使得在垃圾收集操作的执行期间可以将该新的实例设为数据模块的主要实例。下面参考图7-图15提供用于在垃圾收集操作期间管理对分布式缓存的访问的技术的进一步讨论。
出于说明性目的且不旨在是限制性的,数据管理器606在图6中被示出为独立计算机或处理系统。应明白,数据管理器606可以部分地或完全地被合并到缓存主控系统612中。举例来说,数据管理器606的部分或全部可以被存储在机器102A-102N的一个上或者被分布在机器102A-102N中的任何两个或更多个之间。
数据库610被配置为根据数据库模型(例如,关系模型、分层模型、网络模型等等)以结构化方式存储原始数据620。用户系统602A-602M和/或机器102A-102N可以根据包括但不限于结构化查询语言(SQL)、SPARQL、可扩展标记语言路径语言(XPath)等等的查询语言访问原始数据620。例如,分布式缓存的任何一个或多个数据模块616A-616C可以存储原始数据620中频繁使用的子集。由于相比于与分布式缓存相关联的访问时间的、与数据库610相关联的相对较长的访问时间,访问原始数据620可能是昂贵的。因此,访问在节点614A-614N处而非在数据库610处的数据可能是合乎需要的。
图7和图8描绘根据各实施方式用于请求节点中所包括的数据模块的实例的状态改变的方法的流程图700、800。从主控分布式缓存的节点的机器的角度来描述流程图700和800。例如,流程图700和800可以由图6中所示出的缓存主控系统612的机器102A-102N中的任何一个机器执行。出于说明性目的,根据一种实施方式,参照图9中示出的机器102’描述流程图700和800,机器102’是机器102的示例。在本文档中,只要使用上撇号’来修改参考数字,则经修改的参考数字就指示对应于该参考数字的元素的示例(或替代)实现。
如图9中所示出,机器102’包括节点614’。节点614’包括接收模块902和请求模块904。基于关于流程图700和800的讨论,其他结构和操作实施方式对于相关领域中的技术人员将是显而易见的。下面描述流程图700。
如图7中所示出,流程图700的方法在步骤702开始。在步骤702中,在分布式缓存的节点处接收到指示器。该指示器指示要相对于该节点执行垃圾收集操作。举例来说,节点可以从要执行垃圾收集操作的垃圾收集器(例如,垃圾收集器604)接收该指示器。在一种示例实现中,图9中的节点614’的接收模块902接收该指示器。
在步骤704,使用主控该节点的机器的一个或多个处理器从该节点向数据管理器发送请求,以请求在相对于该节点的垃圾收集操作的执行之前将该节点中所包括的至少一个数据模块的实例置于次要状态。实例的主要状态指示,相对于至少一个数据模块的缓存操作要在该节点中所包括的至少一个数据模块的该实例处被发起,或者相对于至少一个数据模块的缓存操作最初要针对在该节点中所包括的至少一个数据模块的该实例。实例的次要状态指示,相对于至少一个数据模块的缓存操作不要在该节点中所包括的至少一个数据模块的该实例处被发起,或者相对于至少一个数据模块的缓存操作最初不要针对该节点中所包括的至少一个数据模块的该实例。
例如,节点可以请求将该节点中所包括的处于主要状态的数据模块的任何实例置于次要状态。在另一示例中,节点可以请求将该节点中所包括的处于主要状态的一个或多个所选择的数据模块的实例置于次要状态。在一种示例实现中,请求模块904发送该请求。举例来说,可以使用机器102’的一个或多个处理器来发送该请求。
如图8中所示出,流程图800的方法在步骤802开始。在步骤802中,在分布式缓存的节点处接收到指示器。该指示器指示,相对于节点完成垃圾收集操作。举例来说,该节点可以从执行垃圾收集操作的垃圾收集器(例如,垃圾收集器604)接收该指示器。在一种示例实现中,图9中的节点614’的接收模块902接收该指示器。
在步骤804,响应于相对于该节点的垃圾收集操作的完成,使用主控该节点的机器的一个或多个处理器从该节点向数据管理器发送请求,以请求将该节点中所包括的至少一个数据模块的实例从次要状态返回到主要状态。
实例的主要状态指示,相对于至少一个数据模块的缓存操作要在该节点中所包括的至少一个数据模块的该实例处被发起,或者相对于至少一个数据模块的缓存操作最初要针对该节点中所包括的至少一个数据模块的该实例。实例的次要状态指示,相对于至少一个数据模块的缓存操作不要在该节点中所包括的至少一个数据模块的该实例处被发起,或者相对于至少一个数据模块的缓存操作最初不要针对该节点中所包括的至少一个数据模块的该实例。
例如,节点可以请求将该节点中所包括的、预测到垃圾收集操作的执行被置于次要状态的数据模块的任何实例返回到主要状态。在另一示例中,该节点可以请求将该节点中所包括的、预测到垃圾收集操作的执行被置于次要状态的一个或多个所选择的数据模块的实例返回到主要状态。在一种示例实现中,请求模块904向数据管理器发送该请求。举例来说,可以使用机器102’的一个或多个处理器来发送该请求。
图10A-图10C描绘根据一种实施方式用于在垃圾收集操作期间管理对分布式缓存的访问的方法的流程图的相应部分。从数据管理器的角度来描述流程图1000。例如,流程图1000可以由图6中所示出的计算机系统600的数据管理器606执行。出于说明性目的,根据一种实施方式,参照图11中示出的作为数据管理器606的示例的数据管理器606’描述流程图1000。如图11中所示出,数据管理器606’包括接收模块1102、状态模块1104、判断模块1106、生成模块1108、转发模块1110、删除模块1112和请求模块1114。基于关于流程图1000的讨论,其他结构和操作实施方式对于相关领域中的技术人员将是显而易见的。
如图10A中所示出,流程图1000的方法在步骤1002开始。在步骤1002中,从分布式缓存的第一节点接收在相对于第一节点的垃圾收集操作的执行之前将第一节点置于离线状态的请求。当节点中所包括的所有数据模块的各实例处于次要状态时,该节点处于离线状态。举例来说,数据模块的这样的实例对尝试访问数据模块中所包括的数据的应用程序来说是不可访问的。在一种示例实现中,接收模块1102从第一节点接收该请求。
在步骤1004,响应于接收到该请求,使用数据管理器的至少一个处理器来将第一节点中所包括的至少一个数据模块的第一实例的状态从主要状态改变成次要状态。例如,数据管理器可以将第一节点中所包括的、处于主要状态的数据模块的任何实例改变成次要状态。在另一示例中,数据管理器可以将第一节点中所包括的、处于主要状态的一个或多个所选择的数据模块的实例改变成次要状态。在一种示例实现中,状态模块1104将第一节点中所包括的至少一个数据模块的第一实例的状态从主要状态改变成次要状态。
第一实例的主要状态指示,要在第一节点中所包括的至少一个数据模块的第一实例处发起相对于至少一个数据模块的缓存操作,或者相对于至少一个数据模块的缓存操作最初要针对第一节点中所包括的至少一个数据模块的第一实例。第一实例的次要状态指示,相对于至少一个数据模块的缓存操作不要在第一节点中所包括的至少一个数据模块的第一实例处被发起,或者相对于至少一个数据模块的缓存操作最初不要针对第一节点中所包括的至少一个数据模块的第一实例。
在步骤1006,作出在垃圾收集操作期间是否要维持至少一个数据模块的可用性的判断。在一种示例实现中,判断模块1106判断是否要维持至少一个数据模块的可用性。如果在垃圾收集操作期间不要维持至少一个数据模块的可用性,则流程图1000结束。然而如果要维持至少一个数据模块的可用性,那么,流程继续到步骤1008。
在步骤1008,作出分布式缓存的第二节点是否包括至少一个数据模块的第二实例的判断。举例来说,可以作出分布式缓存的不同于第一节点的任何节点是否包括未被垃圾收集操作锁定的至少一个数据模块的一个或多个实例的判断。在一种示例实现中,判断模块1106判断第二节点是否包括至少一个数据模块的第二实例。如果第二节点包括至少一个数据模块的第二实例,则流程继续到步骤1012。如果第二节点不包括至少一个数据模块的第二实例那么,流程继续到步骤1010。
在步骤1010,生成第二节点中的至少一个数据模块的第二实例。举例来说,第二节点可以是分布式缓存的未正在对其执行垃圾收集操作的节点。在一种示例实现中,生成模块1108生成第二节点中的至少一个数据模块的第二实例。
在步骤1012,将第二节点中所包括的至少一个数据模块的第二实例的状态从次要状态改变成主要状态。第二实例的主要状态指示,相对于至少一个数据模块的缓存操作要在第二节点中所包括的至少一个数据模块的第二实例处被发起,或者相对于至少一个数据模块的缓存操作最初要针对第二节点中所包括的至少一个数据模块的第二实例。第二实例的次要状态指示,相对于至少一个数据模块的缓存操作不要在第二节点中所包括的至少一个数据模块的第二实例处被发起,或者至少一个数据模块的缓存操作最初不要针对第二节点中所包括的至少一个数据模块的第二实例。
举例来说,将第二节点中所包括的至少一个数据模块的第二实例的状态改变成主要状态可以允许该数据模块中所包括的数据在垃圾收集操作期间是可用的。在一种示例实现中,状态模块1104将第二节点中所包括的至少一个数据模块的第二实例的状态从次要状态改变成主要状态。一旦执行步骤1012,流程就继续到步骤1014,步骤1014在图10B中示出。
在步骤1014,作出关于是否要转发针对第二节点中所包括的至少一个数据模块的第二实例的写请求以便在分布式缓存的第三节点中记录。例如,第三节点中所包括的至少一个数据模块的第三实例可以维持要对该数据模块作出的关于写请求的所有改变的日志。可以出于例如在第二实例变得不可访问的情况下恢复关于各改变的信息的目的来维持该日志。在一种示例实现中,判断模块1106判断是否转发各写请求以便在第三节点中记录。如果不要将各写请求转发给第三节点,则流程继续到步骤1018。否则,继续到步骤1016。
在步骤1016,将各写请求转发给第三节点以便记录。在一种示例实现中,转发模块1110将各写请求转发到第三节点。
在步骤1018,作出关于相对于第一节点的垃圾收集操作是否完成的判断。举例来说,响应于相对于第一节点的垃圾收集操作的完成,执行垃圾收集操作的垃圾收集器(例如,垃圾收集器604)可以提供向第一节点提供指示器,以指示相对于第一节点的垃圾收集操作完成。在一种示例实现中,判断模块1106判断垃圾收集操作是否完成。如果垃圾收集操作没有完成,则流程返回到步骤1018。否则,流程继续到步骤1020。
在步骤1020,作出关于是否要将第一节点中所包括的至少一个数据模块的第一实例的状态返回到主要状态的判断。举例来说,该判断可以基于是否接收到寻求将第一节点中所包括的至少一个数据模块的第一实例的状态返回到主要状态的请求。在完成相对于第一节点的垃圾收集操作时,被配置为与数据管理器通信的分布式缓存的第一节点、第二节点或另一节点可以提供这样的请求。在一种示例实现中,判断模块1106判断是否要将第一节点中所包括的至少一个数据模块的第一实例的状态返回到主要状态。如果不要将第一节点中所包括的至少一个数据模块的第一实例的状态返回到主要状态,则流程图1000结束。否则,流程继续到步骤1022,步骤1022在图10C中示出。
在步骤1022,将第一节点中所包括的至少一个数据模块的第一实例的状态从次要状态返回到主要状态。在一种示例实现中,状态模块1104将第一节点中所包括的至少一个数据模块的第一实例的状态从次要状态返回到主要状态。
在步骤1024,作出关于在步骤1010是否生成了第二节点中的至少一个数据模块的第二实例的判断。例如,在完成步骤1010时可以将指示器设置为具有指示执行了步骤1010的值。根据此示例,在步骤1024的判断可以基于该指示器的值。在一种示例实现中,判断模块1106判断在步骤1010是否生成了第二节点中的至少一个数据模块的第二实例。如果在步骤1010在第二节点中生成了至少一个数据模块的第二实例,则流程继续到步骤1028。否则,流程继续到步骤1026。
在步骤1026,将第二节点中所包括的至少一个数据模块的第二实例的状态从主要状态返回到次要状态。在一种示例实现中,状态模块1104将第二节点中所包括的至少一个数据模块的第二实例的状态从主要状态返回到次要状态。一旦执行步骤1026,流程图1000就结束。
在步骤1028,从第二节点删除至少一个数据模块的第二实例。在一种示例实现中,删除模块1112从第二节点删除至少一个数据模块的第二实例。应明白,并不必须删除第二节点中所包括的至少一个数据模块的第二实例。例如,第二节点中所包括的至少一个数据模块的第二实例的状态可被置于次要状态,而不是被删除。根据此示例,在完成步骤1022之后,在每一情况中,流程将继续到步骤1026,且流程图1000此后将结束。
在步骤1030,作出关于在数据管理器处是否接收到寻求相对于第二节点执行垃圾收集操作的请求。举例来说,可以从被配置为与数据管理器通信的第一节点、第二节点或另一节点接收该请求。在一种示例实现中,判断模块1106判断在数据管理器606’处是否接收到寻求相对于第二节点执行垃圾收集操作的请求。如果没有接收到这样的请求,则流程图1000结束。然而,如果接收到这样的请求,则流程继续到步骤1032。
在步骤1032,将请求相对于第二节点执行垃圾收集操作的请求发送给垃圾收集器。举例来说,在执行其中从第二节点删除至少一个数据模块的第二实例的步骤1028之后,第二实例可以仍然存在于第二节点上,尽管第二实例可能不再被任何应用程序引用。因此,相对于第二节点的垃圾收集操作的执行可以物理上从第二节点移除第二实例。在一种示例实现中,请求模块1114向垃圾收集器发送请求相对于第二节点执行垃圾收集操作的请求。
在一些示例实施方式中,可以不执行流程图1000的一个或多个步骤1002、1004、1006、1008、1010、1012、1014、1016、1018、1020、1022、1024、1026、1028、1030和/或1032。此外,可以执行除了步骤1002、1004、1006、1008、1010、1012、1014、1016、1018、1020、1022、1024、1026、1028、1030和/或1032之外或者代替这些步骤的步骤。
应明白,数据管理器606’可以不包括接收模块1102、状态模块1104、判断模块1106、生成模块1108、转发模块1110、删除模块1112和/或请求模块1114中的一个或多个。此外,数据管理器606’可以包括模块除了接收模块1102、状态模块1104、判断模块1106、生成模块1108、转发模块1110、删除模块1112和/或请求模块1114之外的模块或者代替这些模块的模块。
图12描绘根据一种实施方式用于在垃圾收集操作期间管理对分布式缓存的访问的方法的流程图1200。从数据管理器的角度来描述流程图1200。例如,流程图1200可以由图6中所示出的计算机系统600的数据管理器606执行。出于说明性目的,根据一种实施方式,参照图13中所示出的作为数据管理器606的示例的数据管理器606”描述流程图1200。如图13中所示出,数据管理器606”包括接收模块1102’、判断模块1106’和请求模块1114’。基于讨论关于流程图1200,其他结构和操作实施方式对相关领域中的技术人员将是显而易见的。下面描述流程图1200。
如图12中所示出,流程图1200的方法在步骤1202开始。在步骤1202中,从分布式缓存的节点接收在相对于该节点的垃圾收集操作的执行之前将该节点置于离线状态的请求。在一种示例实现中,接收模块1102’从该节点接收将该节点置于离线状态的请求。
在步骤1204,响应于从第二节点接收到该请求,作出除了该节点中所包括的至少一个数据模块的一个或多个实例之外的至少一个数据模块的每一实例都被垃圾收集操作锁定的判断。经锁定的数据模块是正在对其执行垃圾收集操作的数据模块。举例来说,在步骤1204的判断可以基于从分布式缓存的垃圾收集器(例如,垃圾收集器604)或节点(例如,节点614A-614N中的任何一个节点)接收到的、指示正对其执行垃圾收集操作的数据模块(例如,数据模块616A-616N中的任何一个数据模块)的指示器。在一种示例实现中,判断模块1106’判断除了该节点中所包括的至少一个数据模块的一个或多个实例之外的至少一个数据模块的每一实例都被垃圾收集操作锁定。举例来说,数据管理器606”的一个或多个处理器可以被用来做出该判断。
在步骤1206,响应于判断除了该节点中所包括的至少一个数据模块的一个或多个实例之外的至少一个数据模块的每一实例都被垃圾收集操作锁定,作出推迟相对于该节点的垃圾收集操作的请求。在一种示例实现中,请求模块1114’请求推迟相对于第一节点的垃圾收集操作。
图14描绘根据一种实施方式用于在垃圾收集操作期间管理对分布式缓存的访问的另一方法的流程图1400。从数据管理器的角度来描述流程图1400。例如,流程图1400可以由图6中所示出的计算机系统600的数据管理器606执行。出于说明性目的,根据一种实施方式,参照图15中所示出的作为数据管理器606的示例的数据管理器606”’描述流程图1400。如图15中所示出,数据管理器606”’包括接收模块1102”、比较模块1502和请求模块1114”。基于讨论关于流程图1400,其他结构和操作实施方式对相关领域中的技术人员将是显而易见的。下面描述流程图1400。
如图14中所示出,流程图1400的方法在步骤1402开始。在步骤1402中,从分布式缓存的节点接收到在相对于该节点的垃圾收集操作的执行之前将该节点置于离线状态的请求。在一种示例实现中,接收模块1102”从该节点接收到将该节点置于离线状态的请求。
在步骤1404,响应于从该节点接收到该请求,将该节点的负载与阈值进行比较。该负载可以基于在指定的时间段内由该节点处理的请求的数量、正被消费的该节点的带宽的比例和/或任何其他合适的因素。在一种示例实现中,比较模块1502将该节点的负载与阈值进行比较。
在步骤1406,基于该负载超过该阈值,作出推迟相对于该节点的垃圾收集操作的请求。根据一些实施方式,相对高的负载可以指示,该节点充当大量数据的主要节点。例如,相对于该节点执行垃圾收集操作可以锁定该节点中所包括的数据的主要实例。根据此示例,相对于该节点执行垃圾收集操作将数据呈现为不可访问,这是因为各主要实例将被垃圾收集操作锁定。在另一示例中,该节点中所包括的各主要实例的状态可以被改变成次要状态,且包括在另一节点中的数据的另一实例(或者,单个节点中所包括的或跨越多个节点的数据的相应部分的多个实例)可以被改变成主要状态。根据此示例,需要大量的资源来将该节点中所包括的各主要实例的状态改变成次要状态并将包括在其他节点中的其他实例改变成主要状态。在一种示例实现中,请求模块1114”请求推迟相对于该节点的垃圾收集操作。
图16描绘可以在其中实现各实施方式的示例计算机1600。可以使用计算机1600(包括计算机1600的一个或多个特征和/或替代的特征)来实现图1和图6中所示出的机器102A-102N的任何一个,图6中所示出的用户系统602A-602M、垃圾收集器604、数据管理器606或数据库610,或图9、图11、图13和图15中所示出的它们的任何一个或多个子部件。计算机1600可以是例如常规个人计算机、移动计算机或工作站形式的通用计算设备,或者,计算机1600可以是特殊用途的计算设备。此处所提供的对计算机1600的描述只是为了说明,并不是限制性的。实施例也可以在相关领域的技术人员所知的其它类型的计算机系统中实现。
如图16所示,计算机1600包括处理单元1602、系统存储器1604,以及将包括系统存储器1604的各种系统组件耦合到处理单元1602的总线1606。系统总线1606表示若干类型的总线结构中的任何一种总线结构的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口,以及使用各种总线体系结构中的任何一种的处理器或局部总线。系统存储器1604包括只读存储器(ROM)1608和随机存取存储器(RAM)1610。基本输入/输出系统1612(BIOS)存储在ROM 1608中。
计算机1600还具有一个或多个以下驱动器:用于读写硬盘的硬盘驱动器1614、用于读或写可移动磁盘1618的磁盘驱动器1616、以及用于读或写诸如CD ROM、DVD ROM或其他光介质之类的可移动光盘1622的光盘驱动器1620。硬盘驱动器1614、磁盘驱动器1616,以及光盘驱动器1620分别通过硬盘驱动器接口1624、磁盘驱动器接口1626,以及光驱动器接口1628连接到系统总线1606。驱动器以及它们相关联的计算机可读存储介质为计算机提供了对计算机可读指令、数据结构、程序模块,及计算机的其他数据的非易失存储器。虽然描述了硬盘、可移动磁盘和可移动光盘,但是,也可以使用诸如闪存卡、数字视频盘、随机存取存储器(RAM)、只读存储器(ROM)等等之类的其他类型的计算机可读介质来存储数据。
数个程序模块可被存储在硬盘、磁盘、光盘、ROM,或RAM上。这些程序包括操作系统1630、一个或多个应用程序1632、其他程序模块1634,以及程序数据1636。应用程序1632或程序模块1634可以包括,例如,用于实现在此描述的节点104A-104Z、已命名的缓存106A-106B、区域108A-108Y、缓存项110A-110P、缓存客户机202A-202B、路由层204A-204C、Put操作206、Get操作208、主要数据模块210A-210C、次要数据模块302A-302C、经复制的数据模块402A-402C、本地缓存502A-502B、路由层504A-504B、节点614A-614N、数据模块616A-616N、应用程序618A-618N、接收模块902、请求模块904、接收模块1102、状态模块1104、判断模块1106、生成模块1108、转发模块1110、删除模块1112、请求模块1114、比较模块1502、流程图700(包括流程图700的任何步骤)、流程图800(包括流程图800的任何步骤)、流程图1000(包括流程图1000的任何步骤)、流程图1200(包括流程图1200的任何步骤)和/或流程图1400(包括流程图1400的任何步骤)的计算机程序逻辑。
用户可以通过诸如键盘1638和定点设备1640之类的输入设备向计算机1600中输入命令和信息。其他输入设备(未示出)可包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等。这些及其他输入设备常常通过耦合到总线1606的串行端口接口1642连接到处理单元1602,但是,也可以通过其他接口,诸如并行端口、游戏端口、通用串行总线(USB)端口,来进行连接。
监视器1644或其他类型的显示设备也可以经由诸如视频适配器1646之类的接口来连接到系统总线1606。除了监视器之外,计算机1600还可包括其他外围输出设备(未示出),如扬声器和打印机。
计算机1600通过网络接口或适配器1650、调制解调器1652、或用于通过网络建立通信的其他装置连接到网络1648(例如,因特网)。调制解调器1652(可以是内置的或外置的),通过串行端口接口1642连接到系统总线1606。
如此处所用的,术语“计算机程序介质”以及“计算机可读介质”被用于泛指介质,诸如与硬盘驱动器1614相关联的硬盘、可移动磁盘1618、可移动光盘1622,以及其他介质,诸如闪存卡、数字视频盘、随机读取存储器(RAM)、只读存储器(ROM)等。
如上文所指示的,计算机程序和模块(包括应用程序1632及其他程序模块1634)可被存储在硬盘、磁盘、光盘、ROM或RAM上。这样的计算机程序也可以通过网络接口1650或串行端口接口1642来接收。这些计算机程序在由应用程序执行或加载时使得计算机1600能够实现此处所讨论的实施例的特征。相应地,这样的计算机程序表示计算机1600的控制器。
各实施方式还涉及包括被存储在任何计算机可使用的介质上的软件(例如,计算机可读指令)的计算机程序产品。这样的软件,当在一个或多个数据处理设备中执行时,使数据处理设备如此处所描述的那样操作。实施例可使用现在已知或将来知晓的任何计算机可使用或计算机可读介质。计算机可读介质的例子包括但不限于存储设备,诸如RAM、硬盘、软盘、CD ROM、DVD ROM、Zip盘、磁带、磁存储设备、光存储设备、基于MEMS的存储设备、基于纳米技术的存储设备,等等。
IV.结论
虽然以上描述了不同的实施例,但应当理解的是它们只是作为示例而非限制。对于相关领域的技术人员显而易见的是,可以对其做出各种改变而不背离本发明的精神和范围。因此,此处所公开的本发明的宽度和范围不应被上述所公开的示例性实施例所限制,而应当仅根据所附权利要求书及其等同替换来定义。
Claims (15)
1.一种方法,包括:
从分布式缓存(100)的第一节点(614A-614N)接收在相对于所述第一节点(614A-614N)的垃圾收集操作的执行之前将所述第一节点(614A-614N)置于离线状态的请求;以及
响应于接收到所述请求,使用至少一个处理器(1602),将所述第一节点(614A-614N)中所包括的至少一个数据模块(616A-616N)的第一实例的状态从主要状态改变成次要状态,所述第一实例的所述主要状态指示,相对于所述至少一个数据模块(616A-616N)的缓存操作要在所述至少一个数据模块(616A-616N)的所述第一实例处被发起,或者相对于所述至少一个数据模块(616A-616N)的缓存操作最初要针对所述至少一个数据模块(616A-616N)的所述第一实例,且所述第一实例的所述次要状态指示,相对于所述至少一个数据模块(616A-616N)的所述缓存操作不要在所述第一实例处被发起,或者相对于所述至少一个数据模块(616A-616N)的所述缓存操作最初不要针对所述第一实例。
2.如权利要求1所述的方法,其特征在于,进一步包括:
响应于接收到所述请求,将所述分布式缓存(100)的第二节点(614A-614N)中所包括的至少一个数据模块(616A-616N)的第二实例的状态从次要状态改变成主要状态,所述第二实例的所述主要状态指示,相对于所述至少一个数据模块(616A-616N)的缓存操作要在所述至少一个数据模块(616A-616N)的所述第二实例处被发起,或者相对于所述至少一个数据模块(616A-616N)的缓存操作最初要针对所述至少一个数据模块(616A-616N)的所述第二实例,且所述第二实例的所述次要状态指示,相对于所述至少一个数据模块(616A-616N)的所述缓存操作不要在所述第二实例处被发起,或者相对于所述至少一个数据模块(616A-616N)的所述缓存操作最初不要针对所述第二实例。
3.如权利要求2所述的方法,其特征在于,进一步包括:
转发针对所述第二节点(614A-614N)中所包括的所述至少一个数据模块(616A-616N)的所述第二实例的写请求以便在所述分布式缓存(100)的第三节点(614A-614N)上记录。
4.如权利要求2所述的方法,其特征在于,进一步包括:
响应于所述垃圾收集操作的完成,将所述第一节点(614A-614N)中所包括的所述至少一个数据模块(616A-616N)的所述第一实例的所述状态从所述次要状态返回到所述主要状态;以及
响应于所述垃圾收集操作的完成,将所述第二节点(614A-614N)中所包括的所述至少一个数据模块(616A-616N)的所述第二实例的所述状态从所述主要状态返回到所述次要状态。
5.如权利要求2所述的方法,其特征在于,进一步包括:
响应于接收到所述请求,在所述第二节点(614A-614N)中生成所述至少一个数据模块(616A-616N)的所述第二实例;
其中,改变所述至少一个数据模块(616A-616N)的所述第二实例的所述状态是响应于所述生成所述至少一个数据模块(616A-616N)的所述第二实例来执行的。
6.如权利要求5所述的方法,其特征在于,进一步包括:
响应于所述垃圾收集操作的完成,将所述第一节点(614A-614N)的所述至少一个数据模块(616A-616N)的所述第一实例的所述状态从所述次要状态返回到所述主要状态;以及
响应于所述垃圾收集操作的完成,从所述第二节点(614A-614N)删除所述至少一个数据模块(616A-616N)的所述第二实例。
7.如权利要求6所述的方法,其特征在于,进一步包括:
响应于从所述第二节点(614A-614N)删除所述至少一个数据模块(616A-616N)的所述第二实例,请求执行相对于所述第二节点(614A-614N)的垃圾收集操作。
8.如权利要求1所述的方法,其特征在于,进一步包括:
从所述分布式缓存(100)的第二节点(614A-614N)接收在相对于所述第二节点(614A-614N)的所述垃圾收集操作的执行之前将所述第二节点(614A-614N)置于离线状态的请求;
响应于从所述第二节点(614A-614N)接收到所述请求,判断除了所述第二节点(614A-614N)中所包括的所述至少一个数据模块(616A-616N)的一个或多个第二实例之外的所述至少一个数据模块(616A-616N)的每一实例都被所述垃圾收集操作锁定;以及
响应于判断除了所述第二节点(614A-614N)中所包括的所述至少一个数据模块(616A-616N)的所述一个或多个第二实例之外的所述至少一个数据模块(616A-616N)的每一实例都被所述垃圾收集操作锁定,请求推迟相对于所述第二节点(614A-614N)的所述垃圾收集操作。
9.如权利要求1所述的方法,其特征在于,进一步包括:
从所述分布式缓存(100)的第二节点(614A-614N)接收在相对于所述第二节点(614A-614N)的所述垃圾收集操作的执行之前将所述第二节点(614A-614N)置于离线状态的请求;
响应于从所述第二节点(614A-614N)接收到所述请求,将所述第二节点(614A-614N)的负载与阈值进行比较;以及
基于所述负载超过所述阈值,请求推迟相对于所述第二节点(614A-614N)的所述垃圾收集操作。
10.如权利要求1所述的方法,其特征在于,相对于所述至少一个数据模块(616A-616N)的所述缓存操作是相对于所述至少一个数据模块(616A-616N)的写请求。
11.一种包括其中存储有控制逻辑的计算机可读介质的计算机程序产品,所述控制逻辑包括:
被安排为实施权利要求1-10中的任何一个的方法步骤的计算机可读程序装置。
12.一种数据管理器,包括:
接收模块(1102),所述接收模块(1102)被配置为从分布式缓存(100)的第一节点(614A-614N)接收在相对于所述第一节点(614A-614N)的垃圾收集操作的执行之前将所述第一节点(614A-614N)置于离线状态的请求;以及
状态模块(1104),所述状态模块(1104)被配置为响应于所述请求,将所述第一节点(614A-614N)中所包括的至少一个数据模块(616A-616N)的第一实例的状态从主要状态改变成次要状态,所述第一实例的所述主要状态指示,相对于所述至少一个数据模块(616A-616N)的缓存操作要在所述至少一个数据模块(616A-616N)的所述第一实例处被发起,或者相对于所述至少一个数据模块(616A-616N)的缓存操作最初要针对所述至少一个数据模块(616A-616N)的所述第一实例,且所述第一实例的所述次要状态指示,相对于所述至少一个数据模块(616A-616N)的所述缓存操作不要在所述第一实例处被发起,或者相对于所述至少一个数据模块(616A-616N)的所述缓存操作最初不要针对所述第一实例。
13.如要求12所述的数据管理器,其特征在于,所述状态模块(1104)还被配置为,响应于接收到所述请求,将所述分布式缓存(100)的第二节点(614A-614N)中所包括的所述至少一个数据模块(616A-616N)的第二实例的状态从次要状态改变成主要状态,所述第二实例的所述主要状态指示,相对于所述至少一个数据模块(616A-616N)的缓存操作要在所述至少一个数据模块(616A-616N)的所述第二实例处被发起,或者相对于所述至少一个数据模块(616A-616N)的缓存操作最初要针对所述至少一个数据模块(616A-616N)的所述第二实例,且所述第二实例的所述次要状态指示,相对于所述至少一个数据模块(616A-616N)的所述缓存操作不要在所述第二实例处被发起,或者相对于所述至少一个数据模块(616A-616N)的所述缓存操作最初不要针对所述第二实例。
14.如要求12所述的数据管理器,其特征在于,所述接收模块(1102)还被配置为,从所述分布式缓存(100)的第二节点(614A-614N)接收在相对于所述第二节点(614A-614N)的所述垃圾收集操作的执行之前将所述第二节点(614A-614N)置于离线状态的请求;以及
其中,所述数据管理器进一步包括:
判断模块(1106),所述判断模块(1106)被配置为判断除了所述第二节点(614A-614N)中所包括的所述至少一个数据模块(616A-616N)的一个或多个第二实例之外的所述至少一个数据模块(616A-616N)的每一实例都被所述垃圾收集操作锁定;以及
请求模块(1114),所述请求模块(1114)被配置为,响应于判断除了所述第二节点(614A-614N)中所包括的所述至少一个数据模块(616A-616N)的所述一个或多个第二实例之外的所述至少一个数据模块(616A-616N)的每一实例都被所述垃圾收集操作锁定,请求推迟相对于所述第二节点(614A-614N)的所述垃圾收集操作。
15.如要求12所述的数据管理器,其特征在于,所述接收模块(1102)还被配置为从所述分布式缓存(100)的第二节点(614A-614N)接收在相对于所述第二节点(614A-614N)的所述垃圾收集操作的执行之前将所述第二节点(614A-614N)置于离线状态的请求;以及
其中,所述数据管理器进一步包括:
比较模块(1502),所述比较模块(1502)被配置为响应于从所述第二节点(614A-614N)接收到所述请求将所述第二节点(614A-614N)的负载与阈值进行比较;以及
请求模块(1114),所述请求模块(1114)被配置为基于所述负载超过所述阈值,请求推迟相对于所述第二节点(614A-614N)的所述垃圾收集操作。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/484,185 US20100318584A1 (en) | 2009-06-13 | 2009-06-13 | Distributed Cache Availability During Garbage Collection |
US12/484,185 | 2009-06-13 | ||
PCT/US2010/038222 WO2010144739A2 (en) | 2009-06-13 | 2010-06-10 | Distributed cache availability during garbage collection |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102460411A true CN102460411A (zh) | 2012-05-16 |
Family
ID=43307285
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010800271041A Pending CN102460411A (zh) | 2009-06-13 | 2010-06-10 | 在垃圾收集期间的分布式缓存可用性 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20100318584A1 (zh) |
JP (1) | JP2012530294A (zh) |
CN (1) | CN102460411A (zh) |
WO (1) | WO2010144739A2 (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9380127B2 (en) | 2011-05-18 | 2016-06-28 | Alibaba Group Holding Limited | Distributed caching and cache analysis |
US8458702B1 (en) * | 2012-02-28 | 2013-06-04 | Google Inc. | Method for implementing user space up-calls on java virtual machine before/after garbage collection |
US9385915B2 (en) * | 2012-11-30 | 2016-07-05 | Netapp, Inc. | Dynamic caching technique for adaptively controlling data block copies in a distributed data processing system |
US9684607B2 (en) | 2015-02-25 | 2017-06-20 | Microsoft Technology Licensing, Llc | Automatic recovery of application cache warmth |
US10664495B2 (en) * | 2014-09-25 | 2020-05-26 | Oracle International Corporation | System and method for supporting data grid snapshot and federation |
US9684596B2 (en) | 2015-02-25 | 2017-06-20 | Microsoft Technology Licensing, Llc | Application cache replication to secondary application(s) |
US20170123700A1 (en) | 2015-11-03 | 2017-05-04 | Samsung Electronics Co., Ltd. | Io redirection methods with cost estimation |
US10254998B2 (en) * | 2015-11-03 | 2019-04-09 | Samsung Electronics Co., Ltd. | Coordinated garbage collection of flash devices in a distributed storage system |
US11068390B2 (en) * | 2019-02-01 | 2021-07-20 | EMC IP Holding Company LLC | Scalable garbage collection for deduplicated storage |
US10802965B2 (en) | 2019-02-05 | 2020-10-13 | Microsoft Technology Licensing, Llc | Reducing synchronization reliance in garbage collection marking |
US11068393B2 (en) | 2019-10-17 | 2021-07-20 | Microsoft Technology Licensing, Llc | Enhanced concurrency garbage collection stack scanning |
US11422932B2 (en) | 2019-12-20 | 2022-08-23 | Microsoft Technology Licensing, Llc | Integrated reference and secondary marking |
US11392427B2 (en) | 2020-01-06 | 2022-07-19 | Microsoft Technology Licensing, Llc | Lock-free reading of unitary value sets |
US11556379B2 (en) * | 2021-01-13 | 2023-01-17 | EMC IP Holding Company LLC | Protect cloud objects from attacks |
US11907117B2 (en) | 2022-06-08 | 2024-02-20 | Dell Products L.P. | Efficient method to dynamically select a protection duration for retention locking deduplicated objects |
US11954023B2 (en) | 2022-07-20 | 2024-04-09 | Microsoft Technology Licensing, Llc | Garbage collection prefetching state machine |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090019158A1 (en) * | 2006-05-16 | 2009-01-15 | Bea Systems, Inc. | Engine Near Cache for Reducing Latency in a Telecommunications Environment |
US20090112953A1 (en) * | 2007-10-30 | 2009-04-30 | Eric Lawrence Barsness | Enhanced garbage collection in a multi-node environment |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5960087A (en) * | 1996-07-01 | 1999-09-28 | Sun Microsystems, Inc. | Distributed garbage collection system and method |
US6629113B1 (en) * | 1999-06-30 | 2003-09-30 | International Business Machines Corporation | Method and system for dynamically adjustable and configurable garbage collector |
US6836820B1 (en) * | 2002-02-25 | 2004-12-28 | Network Appliance, Inc. | Flexible disabling of disk sets |
US20070067373A1 (en) * | 2003-11-03 | 2007-03-22 | Steven Higgins | Methods and apparatuses to provide mobile applications |
US7139864B2 (en) * | 2003-12-30 | 2006-11-21 | Sandisk Corporation | Non-volatile memory and method with block management system |
US7424499B2 (en) * | 2005-01-21 | 2008-09-09 | Microsoft Corporation | Lazy timestamping in transaction time database |
US20080086567A1 (en) * | 2006-10-10 | 2008-04-10 | Bea Systems, Inc. | SIP server architecture for improving latency in message processing |
US8001539B2 (en) * | 2007-02-28 | 2011-08-16 | Jds Uniphase Corporation | Historical data management |
US7900011B2 (en) * | 2007-07-19 | 2011-03-01 | International Business Machines Corporation | Apparatus, system, and method for improving system performance in a large memory heap environment |
EP2241977B1 (en) * | 2009-04-17 | 2015-05-27 | Accenture Global Services Limited | Exchangeable application components |
-
2009
- 2009-06-13 US US12/484,185 patent/US20100318584A1/en not_active Abandoned
-
2010
- 2010-06-10 WO PCT/US2010/038222 patent/WO2010144739A2/en active Application Filing
- 2010-06-10 JP JP2012515159A patent/JP2012530294A/ja not_active Withdrawn
- 2010-06-10 CN CN2010800271041A patent/CN102460411A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090019158A1 (en) * | 2006-05-16 | 2009-01-15 | Bea Systems, Inc. | Engine Near Cache for Reducing Latency in a Telecommunications Environment |
US20090112953A1 (en) * | 2007-10-30 | 2009-04-30 | Eric Lawrence Barsness | Enhanced garbage collection in a multi-node environment |
Also Published As
Publication number | Publication date |
---|---|
WO2010144739A2 (en) | 2010-12-16 |
WO2010144739A3 (en) | 2011-03-03 |
US20100318584A1 (en) | 2010-12-16 |
JP2012530294A (ja) | 2012-11-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102460411A (zh) | 在垃圾收集期间的分布式缓存可用性 | |
JP4568115B2 (ja) | ハードウェアベースのファイルシステムのための装置および方法 | |
CN101636742B (zh) | 对有时间限制的消息进行有效处理的方法和设备 | |
US5893149A (en) | Flushing of cache memory in a computer system | |
US6587921B2 (en) | Method and apparatus for cache synchronization in a clustered environment | |
CN101981545B (zh) | 用于事务缓存的系统和方法 | |
US7506008B2 (en) | Storage apparatus, storage control method, and computer product | |
KR102051282B1 (ko) | 선택적 리소스 이동을 이용하는 네트워크 결합 메모리 | |
JP4746838B2 (ja) | データベースへのアクセスを制御するための異なったデータベースサーバ間のデータベースのオーナーシップのパーティション化 | |
CN1156771C (zh) | 用于在非均匀存储器存取计算机系统内提供逐出协议的方法和系统 | |
CN103246614A (zh) | 多处理器数据处理系统、高速缓存存储器及其方法 | |
JP2000122902A (ja) | ログ構造記憶先にデ―タを書き込む方法、媒体及びデ―タ記憶システム | |
CN105376269B (zh) | 虚拟机存储系统及其实现方法和装置 | |
CN1833232A (zh) | 用于运行时数据管理的存储系统类区别提示 | |
CN115794368A (zh) | 业务系统、内存管理方法及装置 | |
CN101571879B (zh) | 在不同数据库服务器之间划分一个数据库所有权以控制访问数据库 | |
KR101295210B1 (ko) | 데이터베이스 관리 방법 및 장치 | |
US8595457B1 (en) | Method and system for replicating stored information | |
JP2007188518A (ja) | データベースへのアクセスを制御するための異なったデータベースサーバ間のデータベースのオーナーシップのパーティション化 | |
CN101714152B (zh) | 在不同数据库服务器之间划分一个数据库所有权以控制访问数据库 | |
JP2003241901A (ja) | ディスク共用制御方法および装置 | |
JP2006189976A (ja) | 記憶装置、そのデータ処理方法、そのデータ処理プログラム及びデータ処理システム | |
JPH05324433A (ja) | データベース入力制御方式 | |
JPH08137642A (ja) | フォントサービスシステム、フォントサーバ管理装置、フォントサーバ及びフォント管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120516 |