Oracle Coherence中文教程十一:高速缓存简介

时间:2020-12-08 07:40:54

高速缓存简介


本章提供了一个概述和比较连贯性提供基本的缓存类型。本章包括以下几个部分:

    分布式缓存

    复制缓存

    乐观缓存

    近缓存

    本地缓存

    远程缓存

    缓存类型摘要

11.1分布式缓存

分布式或分区,缓存是一个集群,容错缓存的,具有线性的可扩展性。数据分区的所有计算机之间的集群。对于容错,分区的高速缓存可以配置一个或多个独特的计算机集群内,以保持每一块数据。分布式缓存是最常用的缓存一致性问题。

coherence定义了一个分布式缓存分发(或跨任意数量的群集节点集群中的一个节点,每一块缓存中的数据,责任是负责分发(或分区)的数据作为一个集合,负载均衡)在群集节点之间。

考虑分布式缓存有几个关键点:

    分区:一个分布式的缓存中的数据是分散在所有的服务器在这样一种方式,没有两个服务器缓存的数据在同一块负责。高速缓存的大小与高速缓存的管理和处理能力,可以在群集的大小呈线性增长。此外,它表示对在高速缓存中的数据的操作可以完成与“single hop” ,换句话说,涉及至多一个其他服务器。

    负载平衡:由于数据是均匀地散开了服务器,用于管理数据的责任是自动负载平衡群集。

    位置透明性:虽然数据群集节点间传播,使用完全相同的API来访问数据,和相同的行为所提供的API方法。这被称为位置透明性,这意味着开发人员不具有高速缓存的拓扑结构的代码的基础上,因为API ,而且其行为是相同的本地的JCache ,一个复制的高速缓存,或者一个分布式的缓存。

    故障转移:所有的连贯性服务提供故障转移和故障恢复,不会丢失任何数据,包括分布式缓存服务。分布式缓存服务允许备份的数量进行配置,如果备份的数量是一个或更高,任何群集节点失败,无数据丢失。

访问到分布式缓存往往都要通过网络到另一个群集节点。所有其他的东西等于,如果有n群集节点( N - 1 ) / N在网络上:

11-1中的操作分区的高速缓存环境

Oracle Coherence中文教程十一:高速缓存简介


由于每个数据块被管理的只有一个群集节点上,通过网络访问和只有一个单跳的操作。这种类型的访问是非常可伸缩的,因为它可以使用点对点通信,从而交换网络的​​最佳优势。

同样,缓存更新操作可以使用相同的单跳点至点的方法,它解决的一个已知限制复制的缓存,缓存更新的要求推到所有群集节点。

11-2沽操作分区的高速缓存环境

Oracle Coherence中文教程十一:高速缓存简介


在上面的图中,数据被发送到主群集节点和备份群集节点。这是用于故障转移的目的,对应到一个备份的计数为一。 (默认备份计数设定为一个。)如果缓存中的数据不是关键的,这是说,它可以被重新从磁盘加载,备份计数可以被设置为零,这将允许分布式缓存的某些部分数据丢失,如果一个集群节点失败。如果高速缓存是非常关键的,有较高的备份数,例如两个,也可以使用。备份计数只会影响的性能,如通过添加,改变或删除高速缓存条目的高速缓存的修改。

对缓存的修改是不完整的,直到所有的备份都承认收到修改。有一个轻微的性能损失缓存的修改时,使用分布式缓存备份,但是它保证如果一个群集节点出现意外故障时,保持数据一致性,数据也不会丢失。

故障转移的分布式缓存涉及促进主存储的备份数据。当一个群集节点出现故障时,其余群集节点,确定哪些数据分别持有备份失败的群集节点主要负责当它死了。这些数据成为任何群集节点的数据备份的责任:

11-3故障切换分区的高速缓存环境

Oracle Coherence中文教程十一:高速缓存简介


如果有多个级别的备份,在第一个备份成为负责的数据,第二个备份成为新的第一个备份,等等。正如复制缓存服务,锁定信息还保留了服务器故障时,唯一的例外是失败的群集节点会自动释放锁。

分布式缓存服务也允许某些群集节点进行配置,以存储数据,和其他人进行配置,以不存储数据。此设置的名称是本地存储功能的。集群节点配置本地存储功能的选项提供了缓存的存储和备份存储的分布式缓存。不管此设置,所有群集节点都完全相同的数据视图,由于位置透明。

11-4本地存储分区的高速缓存环境Oracle Coherence中文教程十一:高速缓存简介


本地存储功能的选项有几个好处:

    在不影响Java堆大小的群集节点已关闭启用本地存储在缓存中的数据量,因为数据是在其他群集节点上缓存。应用服务器进程在运行大型Java堆,老版本的JVM版本,这是特别有用的,因为这些流程经常遭受垃圾收集暂停成倍增长堆的大小。

    coherence让每个群集节点上运行任何支持的版本的JVM。这意味着,启用具有本地存储的群集节点可以运行一个新的JVM版本,支持更大的堆大小,或连贯性的离堆贮存,使用Java NIO功能开启。

    本地存储功能的选项允许一些群集节点只是用于存储缓存中的数据,这样的群集节点被称为coherence缓存服务器。缓存服务器是一种常用的扩展连贯性的分布式查询功能。

11.2复制缓存

复制缓存是一个集群,容错高速缓存中的数据完全复制到集群中的每一个成员。这个缓存写入读取,但可扩展性差(如写入集群中的每个成员必须处理)提供最快的读取性能与线性性能扩展性。由于数据被复制到所有的服务器,将服务器添加不会增加总缓存容量。

在其处理能力的数据复制,并发控制和故障转移集群中的复制缓存擅长,同时还能够提供内存中的数据的访问速度。集群复制缓存正是它说,它是:其数据复制到所有群集节点的缓存。

有几个挑战,建立一个可靠的复制缓存。首先是如何得到它的规模和良好表现。缓存的更新被发送到所有群集节点,所有群集节点都使用相同的数据,即使在同一块数据的多个更新发生在同一时间。此外,如果一个群集节点请求一个锁,它不应该得到所有群集节点上了锁同意,否则尺度极其糟糕,但与群集节点的故障,所有的数据和锁定信息必须保持安全。coherence透明地处理所有这些情况,并提供了最具扩展性和高可用性复制可用于Java应用程序的缓存实现。

复制缓存的最好的部分是它的存取速度。由于数据复制到每个群集节点上,它是可使用无需任何等待。这是被称为零延迟存取,和在其中一个应用程序需要尽可能高的速度在其数据访问的情况下,是完美的。每个群集节点(JVM)访问其自己的内存中的数据:

11-5复制缓存环境中的操作

Oracle Coherence中文教程十一:高速缓存简介

相比之下,更新复制的缓存需要推新版本的数据,对于所有其他群集节点:

11-6 put操作复制缓存环境

Oracle Coherence中文教程十一:高速缓存简介


coherence实现了这样一种方式,所有的只读操作的局部地区发生的复制缓存服务,所有的并发控制操作涉及至多一个其他群集节点,只有更新操作都需要沟通与所有其他群集节点。其结果是优秀的可扩展性能,并与所有的连贯性服务,透明和完整的复制缓存服务提供故障转移和故障恢复。

复制缓存服务的局限性也应慎重考虑。第一,不过多的数据被复制的缓存服务管理是每个群集节点已经加入了服务。这意味着,内存利用率(Java堆大小)增加为每个群集节点,这可能会影响性能。其次,复制缓存具有高更新率不线性扩展集群的发展,换句话说,集群受到收益递减为群集节点添加。

11.3乐观缓存

乐观的缓存是一个集群的缓存实现类似于复制缓存实现,但没有任何并发控制。此实现提供更高的写入吞吐量比复制缓存。它还允许替代底层存储缓存的数据(例如,一个的MRU / MFU基于缓存) 。但是,如果两个集群成员是独立修剪或清除相关当地的商店,店里的每名成员所持的内容可能会有所不同。

11.4 near缓存

附近的高速缓存是一种混合型的缓存,它通常各条战线的分布式缓存或远程缓存本地缓存。近缓存失效前的缓存条目,使用配置的失效策略,并提供优异的性能和同步。近缓存备份一个分区的高速缓存提供零毫秒的本地访问为重复数据访问,同时使并发性和确保一致性和故障切换,有效地复制和分区的高速缓存结合的最佳属性。

近缓存的目标是提供最好的两个世界之间复制缓存和极高的性能,高度的可伸缩性提供分布式缓存最近使用(MRU ) ,最常用的( MFU)数据的快速读取。因此,近缓存是一个实施,包装两个缓存: 前台缓存回缓存,自动和透明地相互沟通通过使用read-through/write-through方法的。

前台缓存提供本地缓存访问。它被假定为是廉价的,因为它是快速的,在规模上是有限的。 回缓存可以是集中式或多层缓存,它可以加载在本地缓存的情况下按需失误。 回缓存被假定为是完整和正确的,因为它具有更高的容量,但存取速度方面较为昂贵。近缓存的使用并不局限于相干*延长,它也适用于TCMP 

这种设计允许近缓存配置缓存的一致性,从最基础的基于失效的高速缓存和无效的缓存,先进的高速缓存版本的数据,并提供一致性保证。其结果是一个可调谐的本地内存资源保护之间的平衡,真正的本地高速缓存的性能优势。

典型的部署使用前台缓存的本地缓存。本地缓存是一个合理的选择,因为它是线程安全的,高并发,大小限制,自动届满,以对象的形式存储的数据。对于回缓存” ,一个偏远的,分区的高速缓存使用。

下图说明了一个近缓存中的数据流。如果客户端写入到电网物,对象将被放置在本地高速缓存内的本地JVM在分区的高速缓存备份(包括一个备份副本) 。如果客户端请求的对象,它可以无延迟的地方,或者前的缓存” ,以对象的形式获得。

11-7将在近缓存环境

Oracle Coherence中文教程十一:高速缓存简介


如果客户端请求的对象已经从前台缓存过期或无效,那么相干自动检索分区的高速缓存中的对象。 前台缓存存储对象,该对象之前交付到客户端。

11-8取得业务在近缓存环境

Oracle Coherence中文教程十一:高速缓存简介

11.5本地缓存

虽然它不是一个群集服务,经常使用本地缓存的连贯实施,结合各种coherence集群缓存服务。本地缓存相干就是: (完全包含在)一个特定的群集节点的本地高速缓存。有几个属性是特别有趣的本地缓存:

    本地缓存实现了同一标准的集合接口,集群缓存的实现,这意味着使用本地或一个集群的缓存的区别,没有任何编程。就像群集的高速缓存中,本地高速缓存中被跟踪到的JCache API,它本身是基于本地高速缓存中是根据相同的标准集合API 

    本地缓存大小是受限的。本地缓存可以限制它缓存的条目数,自动驱逐条目,当缓存已满。此外,这两个条目的大小和可定制的驱逐政策。例如,可以将缓存大小限制的基础上使用的内存缓存条目。使用默认的驱逐策略相结合的最常用(MFU)和最近使用( MRU )信息,缩放的对数曲线,以确定哪些缓存项驱逐。该算法是最好的通用驱逐算法,因为它运作良好,持续时间短,持续时间长的缓存,它平衡的频率与刚刚签署不久,以避免缓存抖动。的纯LRU和纯LFU算法也支持,并且能够插入自定义的驱逐政策。

    本地缓存支持自动过期缓存条目,这意味着每个高速缓存条目可以被分配一个时间住在缓存中。

    本地缓存是线程安全的高度并行,允许多个线程同时访问和更新在本地缓存中的条目。

    本地缓存支持缓存通知。这些通知增加(把客户端,或自动加载到缓存中的条目) ,修改(条目放在客户端或自动重新加载)和删除(由客户端被删除的条目,或提供自动过期,满脸通红,或驱逐。 )这些都是相同的缓存支持集群缓存的事件。

    本地缓存保持碰运气统计。这些运行时间统计可以准确预测的缓存的有效性,并调整其大小限制和自动过期设置相应的缓存时运行。

重要的是有几个原因,包括作为相干的近缓存技术的一部分,并与的模块化后盾地图架构的集群缓存服务的本地缓存。

11.6远程缓存

远程缓存描述过程高速缓存相干*扩展客户访问任何超出。所有的缓存请求被发送到一个连贯性的代理,这样他们都委托给一个缓存(复制,乐观,分区) 。使用远程缓存的更多信息,请参阅Oracle Coherence的客户端指南。
缓存类型的11.7概要

数值条款:

    的JVM =数量的JVM

    数据大小=总规模缓存的数据(无冗余)

    冗余的数据副本保持数

    LocalCache =本地高速缓存的大小(近缓存)

11-1总结缓存类型及特点

Oracle Coherence中文教程十一:高速缓存简介

附注:

    作为一个粗略的估计,与100MB以太网,网络读取通常需要〜20ms的一个100KB的对象。千兆以太网,网络读取1KB对象是典型的亚毫秒。

    需要UDP组播或几个UDP单播业务,取决于JVM计数。

    需要几个UDP单播业务,取决于冗余级别。

    分区的高速缓存可配置多达随意级别的备份,或零,如果需要的话。大多数安装使用的一个备份副本(一式两份总)

    有限的由本地CPU ​​/内存性能,可以忽略不计的加工要求(通常为亚毫秒级的表现)。

    监听基于近缓存是一致的,基于到期的近缓存部分相干非事务读取和连贯的事务访问。