《用于事务缓存的系统和方法.pdf》由会员分享,可在线阅读,更多相关《用于事务缓存的系统和方法.pdf(39页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN104123240A43申请公布日20141029CN104123240A21申请号201410353906122申请日2009013061/025,18520080131US61/025,16520080131US61/025,17120080131US61/025,17620080131US200980111713220090130G06F12/0820060171申请人甲骨文国际公司地址美国加利福尼亚72发明人N雷瓦那鲁74专利代理机构中国国际贸易促进委员会专利商标事务所11038代理人袁玥54发明名称用于事务缓存的系统和方法57摘要一种支持事务缓存服务的计算机实现的方。
2、法和系统包含配置与一个或多个事务和一个或多个工作空间相关联的事务缓存;在事务装饰器中维持该一个或多个事务与该一个或多个工作空间之间的内部映射;获取具有一个或多个操作的事务;利用事务装饰器中的内部映射找到用于该事务的工作空间;以及向与该事务相关联的工作空间应用该事务的一个或多个操作。30优先权数据62分案原申请数据51INTCL权利要求书2页说明书28页附图8页19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书28页附图8页10申请公布号CN104123240ACN104123240A1/2页21一种用于支持可变对象处理的系统,包括一个或多个微处理器;缓存空间,其能够存储一个或。
3、多个可变缓存对象;一个或多个缓存的对象图,其中每个所述可变缓存对象可经由所述一个或多个缓存的对象图中的一个或多个检索路径获得;以及可变处理装饰器,运行在一个或多个微处理器上,其保持内部实例映射,所述内部实例映射在所述一个或多个缓存的对象图与存储在缓存空间中的一个或多个可变缓存对象之间透明地转换。2根据权利要求1所述的系统,其中所述缓存空间包括一个或多个缓存,并且其中所述一个或多个缓存中的至少一个所述缓存是会话或事务缓存。3根据权利要求1所述的系统,其中所述实例映射是在分配给可变缓存对象的唯一ID与对于所述可变缓存对象发起的JAVA虚拟机JVM实例之间的存储器敏感的映射。4根据权利要求1所述的系。
4、统,其中所述一个或多个检索路径包括缓存键和关系遍历。5根据权利要求1所述的系统,其中所述可变处理装饰器自动地检测可变对象之间的关系的变化。6根据权利要求1所述的系统,其中可变对象作为不可变状态的结构存储在缓存空间中,包括不可变的字段值和相关可变值的ID。7根据权利要求6所述的系统,其中钩子用于构建用户定义的类的实例且向/从缓存的结构传递其状态。8根据权利要求1所述的系统,其中当缓存的可变对象不再被从任何缓存的对象图引用时,它被删除。9根据权利要求1所述的系统,其中所述可变处理装饰器操作来自动地检测可变对象之间的关系的变化。10一种用于支持可变对象处理的计算机实现的方法,包括在运行在一个或多个微。
5、处理器上的可变处理装饰器中保持内部实例映射,所述内部实例映射在所述一个或多个缓存的对象图与存储在缓存空间中的一个或多个可变缓存对象之间透明地转换;以及从一个或多个缓存的对象图到达可变对象,其中每个缓存的对象图包括一个或多个检索路径。11根据权利要求10所述的方法,还包括通过一个或多个缓存的对象图在缓存空间中存储可变对象;以及通过一个或多个缓存的对象图从缓存空间检索可变对象。12根据权利要求10所述的方法,还包括在所述缓存空间中包括一个或多个缓存,其中所述一个或多个缓存中的一个缓存是会话或事务缓存。权利要求书CN104123240A2/2页313根据权利要求10所述的方法,还包括允许所述实例映射。
6、是在分配给可变缓存对象的唯一ID与对于所述可变缓存对象发起的JAVA虚拟机JVM实例之间的存储器敏感的映射。14根据权利要求10所述的方法,还包括在一个或多个检索路径中包括缓存键和关系遍历。15根据权利要求10所述的方法,还包括自动地检测可变对象之间的关系的变化。16根据权利要求10所述的方法,还包括当一次缓存的可变对象不再被从任何缓存的对象图引用时,它被删除。17根据权利要求10所述的方法,还包括将可变对象作为不可变状态的结构存储在缓存空间中,包括不可变的字段值和相关可变值的ID。18根据权利要求17所述的方法,还包括使用钩子构建用户定义的类的实例且向/从缓存的结构传递其状态。19根据权利要。
7、求10所述的方法,还包括在清洗时用子类的实例代替存在于可变对象图中的标准可变类型的实例。20一种机器可读介质,在其上存储有指令,所述指令在被执行时使得系统执行如下步骤在一个或多个缓存的对象图中存储可变对象,其中每个缓存的对象图可经由一个或多个检索路径获得;由运行在一个或多个微处理器上的可变处理装饰器在一个或多个缓存的对象图与缓存空间之间透明地转换;以及在可变处理装饰器中保持内部实例映射。权利要求书CN104123240A1/28页4用于事务缓存的系统和方法0001本申请是申请日为2009年1月30日、申请号为2009801117132、发明名称为“用于事务缓存的系统和方法”的中国专利申请的分案。
8、申请。0002版权声明0003本专利文件的一部分公开包含受著作权保护的材料。如出现在专利商标局专利记录档案中,著作权拥有人并不反对复制专利文件或专利公开内容,否则著作权拥有人保留对其的任何著作权。0004优先权声明0005本申请权利要求2008年1月31日提交的名为SYSTEMANDMETHODFORTRANSACTIONALCACHE的美国临时专利申请NO61/025,176;2008年1月31日提交的名为SYSTEMANDMETHODFORDISTRIBUTEDCACHE的美国临时专利申请NO61/025,165;2008年1月31日提交的名为SYSTEMANDMETHODFORTIERE。
9、DCACHE的美国临时专利申请NO61/025,171;2008年1月31日提交的名为SYSTEMANDMETHODFORMUTABLEOBJECTHANDLING的美国临时专利申请NO61/025,185,其公开内容通过引用结合于此。技术领域0006本发明一般涉及缓存服务领域,且尤其涉及分布式缓存。背景技术0007缓存是指在软件系统中为获得更高的性能而临时存储记录的拷贝。缓存由条目池POOLOFENTRIES组成。每个条目具有数据数据块,这些数据是一些后备存储器中数据的拷贝。每个条目还具有标签,该标签指定在后备存储器中的条目为拷贝的数据的身份。当缓存客户端CPU、网络浏览器、操作系统希望访问。
10、可推测在后备存储器中的数据时,它首先检查缓存。如果可以找到具有与所需数据的标签匹配的标签的条目,则使用该条目中的数据作为替代。这种情形已知为缓存命中。所以,例如,网络浏览器程序可以检查硬盘上的本地缓存以查看它是否具有特定URL的网页内容的本地拷贝。在该示例中,URL是标签,且网页内容是数据。导致缓存命中的访问百分比已知为缓存的命中率或命中比例。在备选情形中,当查询缓存且发现不包含具有所需标签的数据时,已知为缓存缺失。在缺失处理中从后备存储器获取的数据通常插入到缓存中,准备用于下一次访问。附图说明0008图1是根据本发明的一个实施例的缓存系统的示例性说明。0009图2是根据本发明的一个实施例的分。
11、层缓存的示例性说明。0010图3是根据本发明的一个实施例的分布式缓存的示例性框架的说明。0011图4是根据本发明的一个实施例的用于弱一致性复制缓存的缓存更新操作的示例性说明。0012图5是根据本发明的一个实施例的用于同步弱一致性复制缓存的陈旧缓存条目说明书CN104123240A2/28页5操作的示例性说明。0013图6是根据本发明的一个实施例的用于弱一致性复制缓存的针对节点关闭操作的缓存更新的示例性说明。0014图7是根据本发明的一个实施例的用于强一致性复制缓存的变异运算MUTATIONOPERATION序列的示例性说明。0015图8是根据本发明的一个实施例的用于强一致性复制缓存的附属操作序。
12、列的示例性说明。0016图9是根据本发明的一个实施例的用于事务缓存的示例性框架的说明。0017图10是根据本发明的一个实施例的用于可变对象处理的示例性框架的说明。具体实施方式0018通过在附图中举例而非限制的方式说明本发明,附图中相似的附图标记表示相似的元件。应当注意,本公开中的“一”或“一个”或“一些”实施例并不一定表示相同的实施例,且这些引用表示至少一个。0019缓存是指在软件系统中为获得更高的性能而临时存储记录的拷贝。可以通过减小对数据的原始记录的访问次数实现性能提升,这可能涉及创建原始记录时的数据库访问或计算密集的操作,或者它可以是对访问来说在资源方面昂贵的其他信息源。通过在一个进程、。
13、多个进程以及可能跨在多个机器上分布的进程中在线程上共享这种缓存对象,也可以实现性能提升。与之相连的是提供各种缓存特征增强诸如事务、分区缓存的缓存存取特征以及诸如复制的可用性特征。0020本发明的一个实施例是可以在JAVA应用中部署和使用的用于静态和动态JAVA对象的缓存系统。尽管该缓存系统可以与比如J2EE容器中存在的特征相结合,本发明不强制要求J2EE容器的存在以使用JAVA缓存系统。0021根据一个实施例,缓存是被缓存对象的命名容器。缓存系统或缓存空间具有一个或多个这种容器。缓存可以从缓存系统重载一些属性。在一个示例中,缓存主要向用户呈现JAVAUTILMAP接口。0022对象明确地布置在。
14、缓存CACHEASIDECACHES,旁路缓存中或者在访问与缓存相关的键时暗示地布置在缓存中CACHETHROUGHCACHES,贯穿缓存。在一些情况中,缓存的对象可以由特定键识别。0023缓存键是在缓存容器内用来引用缓存对象的键。键是重载针对对象定义的HASHCODE和EQUALS方法的JAVA对象。它们还是用于支持查询QUERIES和留存PERSISTENCE的可序列化和可比较接口。JAVALANGSTRING类型的对象被典型地使用。0024根据一个实施例,缓存键针对非本地的缓存对象是可序列化的。键的类可以重载JAVALANGOBJECT类的HASHCODE和EQUALS方法。基本类型也可。
15、以用作缓存键。0025图1是根据本发明的一个实施例的缓存系统的示例性说明。0026根据一个实施例,区域110A或110B是缓存内的容器。它可以提供缓存100中的分层对象存储。区域110A和110B可以重载一些缓存属性比如范围。区域110A可以具有子区域或缓存对象110C。0027根据一个实施例,为了实现复杂事件处理,一组缓存对象可以被分组。分组允许对说明书CN104123240A3/28页6相关对象自动执行某些缓存行为,诸如缓存失效。缓存失效是由于对缓存对象的更新或从缓存去除缓存对象而使得缓存对象失效的行为。0028例如,组对象的失效使得从属于该对象的所有对象都失效。类似地,在贯穿缓存中,如果。
16、被缓存的对象不存在其它依赖性,则组用于使得所有相关缓存对象无效FAULTIN。在另一示例中,组对象被限制为仅在容器缓存对象内具有依赖性。0029根据一个实施例,应用域无关缓存配置。在一个示例中,域无关缓存配置是配置分布式缓存的集群的域无关方式。另外,具有一个域范围内分布的缓存也是有用的,其可以不限制分布式缓存为集群。缓存服务还利用不同的安全措施。作为实现缓存的安全性的一个步骤,修改API以基于角色限制对于缓存的访问是有用的。本发明的一个实施例可以利用OPENJPA中的缓存实现方式。0030根据一个实施例,缓存管理器101是缓存服务的控制器。缓存服务通过具有动态管理和支配设备的永久配置描述。初始。
17、化时,缓存管理器101创建配置后的缓存且初始化它们。缓存管理器提供的生命周期服务可以类似于应用服务器中的服务器服务,但是它们被独立地定义以避免对于这种应用服务器的依赖性。0031缓存管理器101提供配置、管理、支配和性能监控服务。缓存管理器101还可以为比如许可和缓存会话的辅助服务提供支持。缓存管理器101的另一重要方面是作为一个整体进行容量管理和实施缓存服务的各种标准属性。0032根据一个实施例,会话可以提供视图管理和隔离。在一个示例中,一直到会话结束之前,在会话104内完成的对缓存对象的更新都并不传播。会话104还可以异常结束,意味着没有做出对缓存的其他用户可见的会话语境内的更新。会话10。
18、4本质上可以提供缓存更新的批处理。0033除会话支持之外,缓存服务还提供事务支持以管理缓存中的对象。缓存事务通过由事务缓存暴露的方法手动控制或者通过JAVA事务APIJTA自动控制。在一个示例中,事务105内做出的变化根据所配置的隔离等级被充分隔离。提交可以是原子的、一致的和可持久的。回滚可以被充分支持且可以不影响缓存的完整性。0034根据一个实施例,缓存映射CACHEMAP103是缓存的基本接口。作为示例,缓存映射103是基于映射的接口。像监控和存储意识性这样的附加功能性可以添加到缓存映射103。0035在一个示例中,在用户所关心的范围内,缓存可以仅是JAVAUTILMAP。该MAP从配置推。
19、导其属性。例如,如果该MAP被配置成要被复制,则对该MAP的所有更新被传播到集群中的其他节点。可以支持所有映射操作。缓存的典型用法如下所示0036说明书CN104123240A4/28页70037清单1典型的CACHEMAP用法0038在一些示例中,本地缓存不需要可序列化的键或值。像复制和分区缓存的其他形式要求可序列化的缓存条目。在一个示例中,缓存API的用户可以通过利用缓存管理器提供的如下操作来获得缓存实例00390040清单2CACHEMAP查找0041在另一示例中,缓存可以通过缓存管理器101创建。在一个示例中,缓存管理器101具有下面的创建方法00420043清单3缓存创建0044该方。
20、法允许客户传递一组名称值对且基于此构建缓存实例。0045根据一个实施例,存在用于缓存管理的两个接口。CACHEFACTORY可用于创建系统中的新缓存。CACHEMANAGER对于在系统中查找缓存是有用的。CACHE和CACHEENTRY是JCACHE的两个主要工件。它们扩展MAPMAPENTRY接口以提供额外缓存相关的API。0046根据一个实施例,可以扩展API以提供增强的功能性。例如,可以向缓存添加额外API以帮助用户获得关于该缓存的统计、改变行为且监听变化。在本发明的一个实施例中,CACHESTATISTICS提供缓存实例的各种统计。另外,用户可以使用CACHELISTENER接口的实现。
21、来监听缓存的变化。用户还可以插入CACHELOADER的实现来指定在缓存中没有发现被查找的键时该怎样载入缓存条目。用户还可以指定定制EVICTIONSTRATEGY来定义如何从缓存删去缓存条目。而且,CACHEEXCEPTION可用于表示缓存使用中的问题和例外条件。0047根据一个实施例,缓存映射103是MAP的实例。除了通过MAP接口支持的基本CRUD操作之外,下面的操作对于缓存映射用户是可用的。00481如果缺少,则输入00492去除00503替代00514将键集合载入到缓存0052根据一个实施例,缓存映射103提供附加的操作以检索包括以下信息的监控数据00531缓存命中缺失00542存储。
22、器中的元素计数00553清除统计且再度开始监控00564检查是否当前通过缓存装载器装载键0057根据一个实施例,也可以在单个缓存条目等级展现监控信息。然而,该信息可能不需要在跨JAVA虚拟机JVM的缓存实例之间共享。例如,可用的缓存条目等级统计是说明书CN104123240A5/28页800581创建时间00592过期时间00603命中数00614最后访问时间00625最后更新时间00636当前状态有效或过期0064根据一个实施例,缓存映射103还展现如下管理操作00651立即驱除过期元素00662清洗所有缓存条目到持久存储器00673在开始操作之前引导/初始化缓存00684关闭缓存的本地实例。
23、,由此从内存清除元素到持久存储器00695强制关闭缓存的所有实例。该操作的效果与本地缓存的规则关闭相同。对于分布式缓存,这还关闭该缓存的远程实例。00706在给定缓存中锁定/解锁键的能力。如果该缓存是分布式的,锁定缓存中的键将给予跨分区的缓存条目排他的访问。锁操作将采用超时参数,该超时参数指定时间期以等待实现锁定。00717注册和注销事件监听器的能力0072根据一个实施例,缓存管理器101是缓存的工厂FACTORY和注册表。缓存管理器101还可以支持下面的缓存管理操作00731查找给定缓存名称,返回缓存。00742列表获取所有创建的缓存的列表。00753启动利用配置文件创建缓存。00764关闭。
24、关闭本地JVM中的所有缓存。00775强制关闭强制关闭本地JVM中的所有缓存实例。而且还关闭其他JVM上的实例。00786缓存生命周期监听器附加缓存创建和关闭监听器。00797缓存时间监听器向所有注册了且尚未创建的缓存附加监听器。0080根据一个实施例,缓存管理器实例被创建且对于比如WEBLOGICSERVERWLS的被管理环境可用。然而,在用于不被管理的环境的另一实施例中,利用缓存管理器工厂创建缓存管理器。该工厂是用于创建缓存管理器的无状态JVM单例SINGLETON。00810082清单4CACHEMANAGER创建0083根据一个实施例,客户实现EVENTLISTENER接口以获得缓存变。
25、化通知。注意,事件监听器需要与缓存并置。缓存事件监听器可以不远程注册。0084根据本发明的一个实施例,当底层缓存变化时生成变化事件。事件监听器可应用于下列事件。说明书CN104123240A6/28页900851输入00862更新00873删除00884将条目调页到临时存储器00895从后备存储器载入键00906向后备存储器存储条目0091根据一个实施例,该事件返回已经改变的一组缓存值。该组中的每个元素可包含以下信息00921对缓存的引用00932键00943改变的时间00954更新的类型0096根据一个实施例,在变化事件中可以不返回缓存值。可以这样做以改善性能且保留数据传输带宽。009700。
26、98清单5监听器注册0099根据一个实施例,针对需要异步处理事件监听器的某些系统实现异步事件监听器。针对这种情况提供称为异步监听器的工具类。这种事件监听器可以是用于包装任意客户端事件监听器的装饰器DECORATOR。0100缓存载入器102是在启动或缓存缺失故障中可用于填充缓存的外部信息源。0101根据一个实施例,缓存载入器102是实现CACHELOADER接口的用户定义的类。如果配置,缓存载入器102被调用以在有缓存缺失时载入缓存条目。在一个示例中,缓存载入器102可仅在缓存创建时被配置。0102根据一个实施例,缓存载入器102不做出关于调用线程的任何假设。它可以从用户线程调用或者可以异步调。
27、用。缓存载入器102实现下面的方法01031给定一个键的情况下载入值01042给定键的集合的情况下载入多个值0105根据一个实施例,存在很多方法在自加载缓存中调用缓存载入器01061直读READTHROUGH在直读自加载缓存时,当做出用于键的第一请求时调用载入器。在载入器试图从后备存储器获得条目时,该请求阻断。同时,如果其他线程做出对于相同键的请求,它们也可以被阻断。01072后读READBEHIND如果键不在后读缓存中存在,对于MAPGET的调用立说明书CN104123240A7/28页10即返回空。在单独的线程中,缓存载入器被调用且它试图载入值。同时,如果其他线程试图对相同的键调用MAPG。
28、ET,则它们也可以获得空值。然而,在这种情况下,不产生新的缓存加载线程。这通过维持载入的键的内部列表完成。可以利用缓存映射的监控API查询该列表。0108根据一个实施例,缓存存储是实现CACHESTORE接口的用户定义的类。在一个示例中,缓存存储仅在创建时配置。用户定义的类用于使改变持续,只要缓存值更新。在一个实例中,缓存存储不做出哪个线程征调用它的任何假设。它可以从用户线程调用或者可以异步调用。缓存存储实现下面的方法01091存储键值对。01102存储键值对的映射。01113从存储去除键。01124从存储去除键的集合。0113根据一个实施例,定义写策略。有三种不同的方法可以向后备存储器写入脏。
29、条目。01141直写直写策略表示同步向后备存储器写入条目。01152后写在后写方案中,更新条目异步地写入到后备存储器。01163回写使用回写的写入策略,脏条目不在后备存储器中更新,直到它从缓存被驱除。0117根据一个实施例,当使用缓存会话时,向后备存储器的写操作被批处理。0118另一方面,驱除测策略处理三种问题01191何时从缓存驱除条目01202哪些条目被驱除01213驱除到哪里0122何时驱除条目可以由缓存的大小决定。客户设置缓存中内存中条目的数目限制。一旦到达该限制,发生驱除。用户可以设置两种限制01231内存中条目的数目的限制01242内存中条目以及永久保存在磁盘上的条目的总数的限制0。
30、125要驱除的条目可以基于以下算法之一01261最久未使用LRU01272最不常用LFU01283先入先出FIFO01294最近未使用NRU01305随机驱除策略01316定制驱除算法在一个示例中,可被暴露以用于定制驱除的接口。客户可以实现下面的方法01321给定映射,返回键的有序列表。该顺序支配驱除的顺序。0133驱除到何处可以通过两个策略其中之一决定01341丢弃它驱除的条目被丢弃。01352调页到次级缓存。0136根据一个实施例,用户可以保持对于一个或多个缓存条目的锁定。缓存映射103说明书CN104123240A108/28页11可以具有规定来获得对其执行锁定和解锁操作的锁管理器106。
31、。在分布式缓存的情况中,锁可以是集群范围的。所有锁与超时值一起获得。如果提供所有者,在不同的线程中获取和释放锁。锁管理器106提供对于共享和排他锁定的支持。在一个示例中,锁管理器106允许对所有者从排他锁定降级到共享锁定。0137根据一个实施例,在复制缓存的情况下锁所有者是事务且在本地缓存的情况下它可以是当前线程。另外,如果映射被复制,锁所有者是可序列化的对象。锁定缓存映射中不存在的键可以为客户保留该键。这防止其他客户使用相同的键创建条目。客户可以锁定整个映射以用于排他访问。这阻止其他客户执行关于该映射的任何操作。而且,客户可以在给定配置的时间期内保持锁定。锁可以通过锁管理器106强制解锁且一。
32、旦保持时间消逝,其被交付给其他等待者。0138表1描述了当获取和请求不同类型的锁时的各种情景。01390140表10141根据一个实施例,提供的两个主要操作是01421TRYLOCKS设置键、对象所有者、RWLOCKMODE模式、长超时以所提供的所有者和模式共享或排他以及超时,获取对于给定一组键的锁定。01432RELEASELOCKS设置键、对象所有者、RWLOCKMODE模式以所提供的所有者和模式共享或排他释放对于给定一组键的锁定。0144根据一个实施例,锁管理器106支持其他方便的操作01451TRYEXCLUSIVELOCKS设置键获取对该组键的排他锁定,无超时,以当前线程作为所有者0。
33、1462TRYSHAREDLOCKS设置键获取对该组键的共享锁定,无超时,以当前线程作为所有者01473RELEASEEXCLUSIVELOCKS设置键释放对该组键的排他锁定,以当前线程作为所有者01484RELEASESHAREDLOCKS设置键释放对该组键的共享锁定,以当前线程作为所有者0149清单6示出了怎样锁定缓存条目的示例0150说明书CN104123240A119/28页1201510152清单6锁定条目0153根据一个实施例,会话104是基于映射的接口以用于在缓存上批处理操作。会话既可以用在事务设置又可以用在非事务设置中。在非事务设置中使用会话的主要优点可以是在涉及后备存储时批处。
34、理更新操作。这在减小复制/分区缓存中的网络流量方面也可以是有用的。0154说明书CN104123240A1210/28页130155清单7缓存会话用法0156根据一个实施例,支持不同类型的调页01571调页到永久存储,诸如永久存储本地磁盘的快速存取01582文件存储0159根据本发明的一个实施例,对于上述两种临时存储其中每一个,形成可用的适配器缓存映射作为工具类。0160根据本发明的一个实施例,销住PINNING键是重载驱除策略的一种方式且为应用程序员提供更好的控制。在缓存映射接口上可需要下面的API从而为应用程序员提供更好的控制。01611销住键01622销住键集合01633拔去键01644。
35、拔去键集合0165分层缓存0166图2是根据本发明的一个实施例的分层缓存的示例性说明。分层缓存是将两个或更多代表性缓存联系在一起且使得它们用作一个缓存的工具类。0167在如图2所示的双层示例中,L1映射201比L2映射202更小且更快,且因而在L2202之前查询L1201。两个缓存使用一致性同步策略同步。在该示例中,存在用于一致同性步策略的两个部分。L2映射202可以经由前向策略203相对于L1201中的变化被更新。前向策略203的示例包括说明书CN104123240A1311/28页1401681只读禁止对更新的任何尝试。01692直写对L1201的每次更新立即被应用于L2202。01703。
36、调页对L1201的每次更新仅在L1201驱除一些条目时被应用于L2202。01714后写对L1201的每次更新异步地应用于L2202。0172另一方面,在相同的示例中,可以使用监听方案204相对于L2缓存202中的变化而更新L1映射201。监听方案204的选项是01731不监听01742监听全部01753选择性监听0176根据一个实施例,支持缓存服务的计算机实现的方法包含更新或查询第一缓存201;以及经由前向策略203或监听方案204,相对于第一缓存201的更新或查询,更新或查询第二缓存202。例如,前向策略203可以包括以下至少之一禁止任何更新尝试;立即向第二缓存应用第一缓存的每个更新;仅当。
37、第一缓存驱除条目时向第二缓存应用第一缓存的更新;以及异步地向第二缓存应用第一缓存的每个更新。监听方案204可以包括以下至少之一不监听;监听全部;以及选择性监听。根据本发明的一个实施例,第一缓存201可以比第二缓存202更小且更快。0177根据一个实施例,该计算机实现的方法可以包括保持对一个或多个缓存条目上锁的进一步的步骤。可以存在将一组缓存对象分组以实现复杂事件处理的另一进一步的步骤,其中对该组缓存对象中的相关对象自动执行缓存动作。可以存在仅在会话结束时更新缓存对象的另一进一步的步骤。可以存在从缓存管理器101创建第一缓存和第二缓存的另一进一步的步骤。0178根据一个实施例,第一缓存201和第。
38、二缓存202可以是能够自加载的。而且,可以利用分层映射实现调页构造,其中以客户缓存作为L1缓存201且以一个缓存映射作为L2缓存221。可以利用调页一致性策略同步这两个缓存。0179分布式缓存0180图3是根据本发明的一个实施例的分布式缓存的示例性框架的说明。0181根据本发明的一个实施例,缓存可以分类为以下广义的类别01821本地缓存整个缓存可以托管在一个服务器实例中。01832全复制缓存每个集群成员可以托管整个缓存内容的拷贝。这有利于大多数都是读取的用途的情况。01843分区缓存缓存数据可以分割在多个缓存分区上,每个分区具有缓存的一部分。每个分区可以具有一个或多个备份以支持故障转移。018。
39、5另外,全复制缓存还基于缓存拷贝之间的数据一致性被划分为两个大类0186弱一致性缓存拷贝中的信息是陈旧的。弱一致性复制缓存可以使用异步机制来向其他集群成员传播缓存改变。组消息基础设施多播或单播可用于完成异步通信。0187强一致性缓存信息在集群的所有成员之间都一致。可以通过对缓存条目在集群范围上锁且然后在锁定情况下向其他集群成员进行复制来实现强一致性。强一致性依赖于集群首领的存在,该集群首领进而使用租赁基础。0188在一些情况中,缓存类型的选择是管理选项,而不是开发者选项。换句话说,应用说明书CN104123240A1412/28页15代码以完全的位置透明性继续工作。0189根据一个实施例,支持。
40、分布式缓存服务的计算机实现的系统可以包含跨越一个或多个虚拟机VM实例的一个或多个分布式缓存212A、212B和212C;以及可插拔消息传送器211。对于一个或多个分布式缓存212A、212B和212C其中的每一个分布式缓存,可以存在单独的缓存载入器213A、213B或213C、容量控制器214A、214B或214C以及子系统管理器215A、215B或215C。另外,该计算机实现的系统还可以包含一个或多个本地缓存210。0190根据一个实施例,该计算机实现的系统中的一个或多个分布式缓存212A、212B和212C可以是全复制缓存,其中一个或多个分布式缓存的每个集群成员托管整个缓存内容的拷贝。01。
41、91在一个示例中,一个或多个分布式缓存212A、212B和212C是使用异步通信机制来向其他集群成员传播缓存变化的弱一致性全复制缓存。在另一示例中,一个或多个分布式缓存212A、212B和212C是对缓存条目使用集群范围的锁定且然后在锁定条件下复制到其他集群成员的强一致性全复制缓存。0192根据一个实施例,一个或多个分布式缓存212A、212B和212C是分区缓存,其中分区缓存可以将缓存条目分割到多个分区中且在一个或多个VM实例中托管该多个分区。在一个示例中,通过利用CACHEFACTORY程序地创建分区缓存。在另一示例中,分区缓存是动态分区的缓存。在另一示例中,每个分区是一组键的排他所有者。。
42、在另一示例中,用于分区缓存的分区映射使用JAVA命名和目录接口JNDI查找,其使用分区映射的JNDI名称,其中JNDI查找返回智能代理,该智能代理保存分区路由表的拷贝且能够将缓存操作路由到正确分区。在另一示例中,分区配置成在托管在其他集群成员上的一个或多个复本上备份其数据。0193根据一个实施例,一种支持分布式缓存服务的计算机实现的方法包含以下步骤在跨越一个或多个虚拟机VM实例的一个或多个分布式缓存212A、212B和212C中存储一个或多个缓存对象;以及使用可插拔消息传送器211维持该一个或多个分布式缓存212A、212B和212C。根据本发明的一个实施例,该计算机实现的方法还可以包括在一个。
43、或多个本地缓存210上存储一个或多个缓存对象的另一步骤。0194根据一个实施例,实现弱一致性复制缓存。缓存映射的弱一致性复本存在于所有集群节点上。当该映射更新时,该映射使用不可靠传输比如多播来更新复本。当任意复本检测到映射陈旧时,它通过可靠传输与另一节点同步。对于大多数只读操作,异步地应用这种映射尺度与映射更新。当副本检测到陈旧时,它们倾向于不急切地同步。复本可以维持一致性;但是程度较弱。0195用户可以配置多于一个的弱一致性分布式映射,每个映射由唯一名称在系统中识别。用户可以使用CACHEFACTORY接口查找或创建这种映射,如下0196说明书CN104123240A1513/28页1601。
44、97清单8弱一致性映射创建0198弱一致性复制缓存呈现下面的功能性行为01991初始化02002缓存更新02013用于同步的HTTP02024监听器02035陈旧检测02046从关闭节点更新传播0205根据一个实施例,所有集群节点通过多播监听缓存事件。集群节点初始化用于处理通过HTTP对等通信的特定小服务程序SERVLET。这是当缓存检测到陈旧时使用的备份同步通信。0206当集群节点首先接收关于特定缓存的通信时,它初始化空缓存且在接收消息时更新该空缓存。该缓存还被标记为陈旧的。0207图4是根据本发明的一个实施例用于弱一致性复制缓存的缓存更新操作的示例性说明。0208在图3中示出的示例中,对于。
45、一个节点301上的对缓存的更新300输入、去除或清除操作触发对所有节点302、303和309的消息广播310。0209当节点302、303和309接收消息时,如果如预期一样版本升级,它们,302、303和309更新其本地拷贝有效性。否则该条目被标记为陈旧的。0210循环计时器事件可以周期性触发在可靠传输上同步陈旧的缓存条目。0211在另一示例中,通过多播会话诸如具有用于大于多播数据报大小的消息的恢复和分段的内置功能的多播会话提供消息排序和更新的可靠性。0212根据一个实施例,在陈旧的情况下,缓存通过HTTP同步自身。选择HTTP的决定基于这一事实当空闲时HTTP连接超时,且这防止N乘N连接网格。
46、。0213根据一个实施例,弱一致性映射的实现作为监控映射变化监听器提供,该监听器仅通过在监听器内包装任何映射而使得该映射是弱一致性的。0214图5是根据本发明的一个实施例用于弱一致性复制缓存的陈旧缓存条目的同步的示例性说明。0215根据一个实施例,缓存条目的每一次改变使用版本ID标记。当应用更新时缓存保持跟踪版本变化。如果缓存发现它们具有最新版本,更新被丢弃。如果缓存发现它们具有应用更新的较早版本,该条目被标记为陈旧的且准备通过触发器400被同步。0216图6是根据本发明的一个实施例用于弱一致性复制缓存的对关闭节点的缓存更新的示例性说明。说明书CN104123240A1614/28页17021。
47、7在图5中示出的示例中,当节点被关闭510时,缓存更新500通过可靠传输510发送到另一健康的集群节点502,且目标节点502然后代表关闭节点501广播511变化。0218根据本发明的一个实施例,用于弱一致性复制缓存的本地缓存配置选项的行为包括02191驱除策略驱除策略局部地应用于每一个节点。由于驱除导致的对于底层缓存的任何改变可以传播到所有节点。02202缓存更新监听器用户在任意成员上注册更新监听器且获得对复制映射做出的更新。02213缓存统计是本地的可以不复制关于缓存条目的统计信息。0222另外,还可以对弱一致性复制缓存实现延迟的一致性和冲突解决方案。0223根据一个实施例,在同步周期之间。
48、节点具有不一致的数据。与其他节点的及时节点同步可以解析陈旧数据。提供配置参数以配置同步间隔。0224对于多个节点上相同键的并发更新可以导致在不同节点上具有不同值的键。集群中的节点基于服务器名称、服务器身份和一些其他恒定参数被给予优先权。在所有节点上服务器的优先顺序与基于常量计算的顺序相同。在一个示例中,当节点接收用于具有相同版本的相同键的多个更新时,来自最高优先级服务器的更新获胜。最终,在所有节点中实现一致性。0225根据一个实施例,如下所示,通过利用CACHEFACTORY程序地创建强一致性复制缓存02260227清单9强一致性映射创建0228在一个示例中,使用下面的片段创建一致的复制映射的。
49、服务器形成一个组且保持缓存条目同步。这意味着集群中的每个服务器使用相同的名称创建一致的复制缓存类型来连接该组。未局部创建缓存的集群成员能够获得更新。0229强一致的复制缓存显示出下面的功能性行为02301利用CACHEFACTORYAPI局部地创建缓存的服务器可以招收具有相同类型和名称的缓存的其他集群成员。02312服务器可以竞争以变成复制缓存的主服务器。02323一个服务器变成主服务器且其他组成员用作从服务器。02334利用LEASINGAPI完成主服务器选择。02345在当前主服务器死掉时选择另一主服务器。0235图7是根据本发明的一个实施例用于强一致的复制缓存的变异操作序列的示例性说明。说明书CN104123240A1715/28页180236在如图6所示的示例中,组成员602对其本地映射的变异操作导致对主服务器601做出远程调用。主服务器601执行下面的操作02371获得对于映射条目的锁定02382在锁定条件下将变化复制到所有组成员60302393响应请求变化的组成员6020240在一个示例中,当主服务器602出现故障时,可以使用定义好的异常防止对映射的变异操作。0241图8是根据本发明的一个实施例用于强一致的复制缓存的附属操作序列的示例性说明。0242在图8所示的示例中,组成员702对其本地映射的附属操作导致对主服务器701做出远。