[发明专利]在垃圾收集期间的分布式缓存可用性无效
申请号: | 201080027104.1 | 申请日: | 2010-06-10 |
公开(公告)号: | CN102460411A | 公开(公告)日: | 2012-05-16 |
发明(设计)人: | M·克里希纳普拉塞德;M·Z·斯蒂芬斯;陆迅;A·K·诺瑞 | 申请(专利权)人: | 微软公司 |
主分类号: | G06F15/16 | 分类号: | G06F15/16;G06F9/06 |
代理公司: | 上海专利商标事务所有限公司 31100 | 代理人: | 黄嵩泉 |
地址: | 美国华*** | 国省代码: | 美国;US |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 垃圾 收集 期间 分布式 缓存 可用性 | ||
背景技术
在计算机科学的上下文中,缓存是被存储在其他地方(例如,被存储在数据库或其他数据存储系统中)的原始数据的副本的数据集合。被存储在缓存中的数据常常是原始数据中被频繁地使用的子集。举例来说,由于相比于与缓存相关联的访问时间的相对较长的访问时间,访问原始数据可能是昂贵的。因此,访问在缓存处而非在数据库或其他数据存储系统处的数据可能是合乎需要的。
分布式缓存是其中将数据存储在多个机器(例如,计算机或其他处理系统)上的缓存。分布式缓存提供在存储原始数据的数据存储系统(例如,关系数据库)中往往不可用的可缩放性。然而,用托管代码(例如,Java、公共语言运行时(CLR)等等)编写的分布式缓存常常遇到关于诸如垃圾收集操作等的一些操作的瓶颈。
缓存可以被用来存储诸如(但不限于)数据结构等的对象。各对象可以与允许它们由应用程序读取或写入的诸如地址等的唯一标识符相关联。出于各种原因,被存储在缓存中的某些对象可能不再被任何应用程序引用。在这种情况中,将那些对象维持在缓存中所要求的资源(例如,与缓存相关联的存储器)被浪费掉了。为了解决这一问题,可以使用“垃圾收集”操作来标识不被任何应用程序引用的对象并收回被用来维持那些对象的资源。
通常,在分析一对象以便判断该对象是否被至少一个应用程序引用的同时,垃圾收集操作“锁定”该对象。锁定对象防止了各进程(例如,与软件应用程序相关联的进程)访问该对象。因此,对于管理对分布式缓存的访问的实体来说,可能看上去是存储经锁定的对象的机器无响应。该实体可能因此不必要地尝试重新配置该机器。
在各机器当中运行分布式缓存的多个实例以便将相同量的数据存储为单个实例而不是运行单个实例,可以减少在垃圾收集操作期间被锁定的对象的数量。然而,运行多个缓存实例要求更多开销,且可能妨碍要求数据全部都在单个进程上的存储器中的进程的执行(例如,联结、依存关系等等)。在其中每一机器存储相应的相同数据的实例的经复制的分布式缓存(replicated distributed cache)中,如果在一个机器上锁定了一个对象,则可以使用负载平衡来提供对另一机器上的该对象的访问。然而,在其中每一机器存储相应的数据分区的经分区的分布式缓存(partitioned distributed cache)中,这样的负载平衡是不可能的。
发明内容
在此描述尤其用于在垃圾收集操作期间管理对分布式缓存的访问的各种方法。分布式缓存由被多个机器(例如,计算机或其他处理系统)主控的多个节点构成。每一节点包括分布式缓存的一个或多个数据模块。数据模块是分布式缓存或分布式缓存的副本的相应部分(例如,分区或其他合适的部分)。应注意,可以跨越多个节点复制分布式缓存的任何部分。举例来说,一个部分的第一实例可以被包括在第一节点中,该部分的第二实例可以被包括在第二节点中,等等。此外,节点可以包括分布式缓存的相同部分的多个实例。然而,“分布式缓存的副本”是指被存储在分布式缓存中的所有数据的实例。相对于节点执行的垃圾收集操作可以锁定该节点中所包括的数据的实例。然而,在跨越多个节点复制分布式缓存的部分或全部时,该数据的一个或多个其他实例在分布式缓存的其他节点上可用,以使得垃圾收集操作的执行不将该数据呈现为对尝试访问该数据的进程(例如,与各软件应用程序相关联的各进程)来说是不可访问的。
数据管理器是在各节点当中分发分布式缓存的各数据模块的至少一个计算机或其他处理系统,包括一个或多个处理器。在复制场景中,数据模块的多个实例可以被存储在不同的节点中以便得到“高可用性”。数据管理器也确定相应的数据模块的哪些实例应该是相应的数据模块的主要实例以及哪些应该是数据模块的次要实例。相对于缓存操作的数据模块的主要实例是相对于该数据模块的缓存操作最初针对的数据模块的实例或者相对于该数据模块的缓存操作在其处被发起的数据模块的实例。缓存操作的示例包括但不限于读操作、写操作、逐出(eviction)操作、通知操作等等。例如,相对于数据模块的读(或写)操作最初针对的数据模块的实例是相对于该读(或写)操作的数据模块的主要实例。在另一示例中,在其处发起相对于数据模块的逐出(或通知)操作的数据模块的实例是相对于该逐出(或通知)操作的数据模块的主要实例。相对于缓存操作的数据模块的次要实例本质上是相对于缓存操作的数据模块的“备份”实例。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于微软公司,未经微软公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201080027104.1/2.html,转载请声明来源钻瓜专利网。