本章提供一般连贯性的概念和功能的快速概览。它概括产品的功能,使用的可能性,怎么会去实现特定的功能,并提供一个简要概述。在本章中讨论的项目在本指南详述。
1.1基本概念
本节中的主题介绍了基本概念,都与coherence,并讨论了使用群集数据的连贯性,相关的几个重要特征。
集群数据管理
在一致性的核心是集群数据管理的概念。这意味着以下目标:
一个完全一致的,单一系统映像(SSI)
可扩展性进行读取和写入访问
快速,透明的故障切换和故障恢复
线性可扩展性的存储和处理
无单点故障(SPOFS)
群集范围锁定和交易
建立在此基础之上Coherence提供的各种服务,包括数据库高速缓存,HTTP会话管理,网格代理调用和分布式查询。进入有关这些功能的细节之前,一些基本的连贯性方面应该进行讨论。
一个单一的逻辑层的API,XML配置的物理层
Coherence支持很多拓扑集群数据管理。这些拓扑结构有一个权衡性能和容错方面。通过使用一个单一的API,拓扑结构的选择可延至部署,如果需要的话。这使开发人员能够用一个连贯一致的逻辑视图,同时提供了灵活性,在调整或应用需求的改变。
缓存策略
Coherence提供多个缓存实现:
本地缓存本地缓存堆非集群的缓存。
复制缓存非常小,读重缓存。
分布式缓存读取和写入访问真正的线性可扩展性。数据是自动,动态和透明的跨节点分区。分配算法最大限度地减少网络流量,并避免通过逐步转移数据服务将暂停。
近缓存提供本地高速缓存的性能与可扩展性的分布式缓存。几个不同的近缓存策略,并提供一个折衷性能和同步担保之间。
在过程高速缓存提供了最高水平的原始性能,因为对象是本地JVM内部管理。这样做的好处是最直接实现本地复制,乐观和近缓存实现。
进程(客户端/服务器)缓存使用专用的缓存服务器提供了一个选项。当你想分区工作负载(避免强调应用服务器),这可以帮助。这是通过使用分区的缓存实现,只是在客户端节点上禁用本地存储,通过一个单一的命令行选项或一个单行条目在XML配置。
分层缓存(使用近缓存功能),使您能够夫妇较大,分区的缓存服务器上缓存在应用服务器上的本地缓存,结合本地缓存分区缓存的可扩展性的原始性能。这是非常有用的两个专用缓存服务器和缓存(高速缓存分区存储在应用程序服务器的JVM)合署办公。
见第三部分“使用高速缓存”缓存配置和使用的详细信息。
数据存储选项
虽然大多数客户使用堆存储加上专用的高速缓存服务器,Coherence数据存储有几个选项:
On-heap—堆最快的选项,尽管它可以影响JVM的垃圾收集时间。
NIO RAM—NIO内存垃圾收集没有影响,但它确实需要序列化/反序列化。
NIO Disk—相似NIO磁盘NIO的内存,但使用内存映射文件。
File-based—基于文件的,采用了特殊的优化磁盘的存储系统,以优化速度和减少I / O
连贯性存储是短暂的:基于磁盘的存储选项只用于管理高速缓存的数据。连贯性持久性存储,再加上一个缓存加载/缓存存储提供支持地图。
请参见第13章,“实现存储和备份的地图”的详细信息。
序列化选项
由于序列化集群数据管理往往是最昂贵的部分,Coherence数据序列化/反序列化提供了以下选项:
com.tangosol.io.pof.PofSerializer - 便携式对象格式(也可简称为POF)是一种语言无关的二进制格式。 POF的设计是令人难以置信的高效率,在空间和时间的连贯性是推荐的序列化选项。请参见第19章,“使用可移植对象格式”。
java.io.Serializable接口 - 简单,但最慢的选择。
java.io.Externalizable - 这就要求开发人员手动实现序列化,但可以提供显着的性能优势。了java.io.Serializable相比,这可以减少序列化数据的大小由两个或两个以上(分布式缓存特别有用的一个因素,因为他们一般高速缓存数据以序列化的形式)。最重要的是,CPU占用率大大降低。
com.tangosol.io.ExternalizableLite - 这是非常相似java.io.Externalizable的的,但提供了更好的性能和更低的内存使用情况,通过使用更高效的IO流实现。
com.tangosol.run.xml.XmlBean - 的默认实现ExternalizableLite。
可配置和可扩展性
连贯性的API提供了访问所有的连贯性功能。最常用的子集,该API是通过简单的XML选项露出典型使用情况,以尽量减少努力。混合XML配置更容易通过API直接配置有没有处罚。
连贯性被设计为允许根据需要更换模块。例如,本地的“backing maps”(每个节点上提供实际的物理数据存储)可以很容易地根据需要更换。绝大多数的时间,这不是必需的,但它确实存在的情况下,需要它。一般原则是,80%的任务很容易,而余下的20%的任务(特殊情况)需要多一点的努力,但肯定可以做到无重大困难。
命名空间层次
连贯性组织一套服务。在根群集服务。集群被定义为一组连贯实例(每个JVM的一个实例,一个或多个在每台计算机上的JVM)。集群被定义的组播地址和端口的组合。甲网络数据包的TTL(生存时间到,网络跃点的数量)的设置可以限制群集到一台计算机,或计算机连接到单个交换机。
在群集服务的各种服务,包括相干API。这些措施包括不同的缓存服务(复制,分发等)和调用服务(代理部署到各个节点集群)。每个服务实例的命名,是一个典型的默认服务为每种类型的实例。
缓存服务包含名为的缓存(com.tangosol.net.NamedCache),这是类似于数据库表是,它们通常包含了一组相关的对象。
群集服务,以及基于其他群集提供服务的连贯性的更多信息,请参阅第6章,“简介到相干集群,”。
本节提供了一个概述的NamedCache API,它是主要的应用程序接口,用于获取和交互缓存实例。本节还包括一些洞察的NamedCache API使用。
import com.tangosol.net.*;
...
NamedCache cache = CacheFactory.getCache("MyCache");
连贯性扫描的缓存配置XML文件名称映射mycache的。这是一个web容器的web.xml文件中的名称映射到Servlet类似。连贯性的缓存配置文件包含(在最简单的情况下)一组映射(从缓存名称缓存方案)和一组缓存计划。
默认情况下,Coherence 使用coherence-cache-config.xml文件在根coherence.jar发现。这可以在JVM命令行与-Dtangosol.coherence.cacheconfig=file.xml覆盖。这个参数可以参考的文件系统路径,或一个Java资源路径。
com.tangosol.net.NamedCache接口扩展其他几个接口:
The com.tangosol.net.NamedCache interface extends several other interfaces:
java.util.Map—basic Map methods such as get(), put(), remove().
com.tangosol.util.ObservableMap—methods for listening to cache events. (See Chapter 21, "Using Cache Events".
com.tangosol.net.cache.CacheMap方法,获得在缓存中的keys(as a Map)的集合,把缓 存中的对象。还支持添加届满值时,高速缓存中的条目。
com.tangosol.util.QueryMap查询缓存的方法。 (见“查询缓存”Oracle Coherence的开发 者指南)
com.tangosol.util.ConcurrentMap并发访问,如lock() and unlock().
com.tangosol.util.InvocableMap服务器端缓存中的数据处理方法。
1.2.2缓存对象的要求
的缓存键和值必须是可序列化的(例如,java.io.Serializable接口)。此外,缓存键必须提供一个实现的hashCode()和equals()方法,这些方法必须群集节点间返回一致的结果。这意味着,执行的hashCode()和等于()必须被基于对象的序列化状态(即是,该对象的非transient的领域);大部分内置的Java类型,如字符串,整数和日期,满足仅这一要求。一些缓存实现(特别是分区的高速缓存)使用的关键对象的序列化形式平等的测试,这意味着键的equals()返回true必须序列是完全相同的;多数内建的Java类型以及满足这一要求。
1.2.3 NamedCache的使用模式
一般有两种方法使用NamedCache:
作为一个集群执行的java.util.Map的几个新增的功能(查询,并发),但没有持久性的支持(“方”高速缓存)。
作为一种手段去耦访问外部数据源(“内联”高速缓存)。在这种情况下,应用程序使用界面NamedCache,NamedCache护理管理的基础数据库(或其他资源)。
通常情况下,内联高速缓存用于缓存数据:
a database—数据库的最直观的使用的简单缓存缓存数据库表(以Java对象的形式)。
a service—服务的主机,网络服务,服务局的任何服务,代表一种昂贵的资源的访问(无论是由于成本或实际上网费用计算)。
calculations— 计算,金融计算,聚合,数据转换。使用内嵌缓存,使得它很容易,以避免重复计算。如果计算完成后,结果只是被从缓存中取出。由于任何可序列化的对象可以被用来作为一个缓存键,它是一件简单的事,使用对象,其中包含计算参数作为缓存键。
参见第14章,“更多信息内嵌缓存缓存的数据源”。
回写式选项:
写通过确保外部数据源总是包含最新信息。二手数据时必须立即保留,或与其他应用程序共享数据源时。
后写提供更好的性能缓存写入到外部数据源。不仅可以写入缓冲,甚至在数据源上的负载,但是可以结合多个写入的,进一步降低了I / O。权衡的是,数据是不是立刻保存到磁盘,但是,它立即分布在整个集群中,这样的数据服务器生存的损失。此外,如果整个数据集的缓存,这个选项意味着应用程序可以暂时度过一个完整的数据源失败既是缓存读取和写入不需要同步访问数据源。
要实现一个只读的内嵌的缓存,你只需实现两个方法上com.tangosol.net.cache.CacheLoader接口,一个单量读取,批量读取。 Coherence提供一个抽象类com.tangosol.net.cache.AbstractCacheLoader的,它提供了一个默认实现批量的方法,这意味着你只需要实现一个方法:公共对象负载(对象OKEY)。此方法接受一个任意的缓存键和返回适当的值对象。
如果你想实现读/写缓存,必须继承com.tangosol.net.cache.AbstractCacheStore的(或实现接口com.tangosol.net.cache.CacheStore),这增加了以下方法:
public void erase(Object oKey);
public void eraseAll(Collection colKeys);
public void store(Object oKey, Object oValue);
public void storeAll(Map mapEntries);
从外部数据源的方法erase() 应该删除指定的键。store()的方法应该更新数据源中指定的项目,如果它存在,或插入它,如果它目前并不存在。
的CacheLoader /缓存存储实现后,它可以通过连接的coherence-cache-config.xml文件
1.3查询缓存
Coherence提供查询缓存的数据的能力。分区的高速缓存,查询索引和并行,这意味着,将服务器添加到一个分区的高速缓存不仅增加了总的吞吐量(每秒查询),但也降低了延迟,查询花费较少的用户时间。要查询针对NamedCache的,所有的对象应该实现一个共同的接口(或基类)。在任何字段中的对象可以被查询,索引是可选的,用于提高性能。复制缓存,查询本地执行,不使用索引。请参见第22章,“查询缓存中的数据”的详细信息。
要添加一个索引到NamedCache,你首先需要一个值提取(接受输入一个值对象,并返回该对象的属性)。盲目添加索引可以(重复指标被忽略)。索引可以添加在任何时间,之前或之后插入到缓存中的数据。
应该指出的是查询只适用于高速缓存的数据。出于这个原因,查询应该不会被使用,除非整个数据集已经被加载到高速缓存中,除非有特别的支持被添加到管理部分加载的集。
开发者可以选择执行额外的自定义过滤器的查询,从而利用查询的并行行为。特别是性能敏感的查询,开发人员可以实现感知索引的过滤器,它可以访问相干的内部索引结构。
连贯性包括一个内置的优化,适用的最佳顺序的索引。由于集中查询性质,优化是有效和高效。不需要维护。
1.4交易
Coherence提供各种交易方案。这些选项包括:基本数据并发使用ConcurrentMap接口EntryProcessor的API完整的XA支持使用相干资源适配器使用交易框架API和原子事务,原子事务。 ,“执行交易”的详细说明,请参见第27章。
1.5 HTTP会话管理
Coherence* Web是一个HTTP会话管理模块支持广泛的应用服务器。请参阅Oracle Coherence的用户指南的Oracle Coherence* Web的更多信息的连贯*网站。
不需要使用连贯性会话管理应用程序的任何更改。相干*网络使用的NearCache技术提供完全容错的高速缓存,具有几乎无限的可扩展性(几百群集节点没有问题)。
1.6调用服务
Coherence调用服务可以部署计算代理集群内的各个节点。这些代理可以是执行式(部署和异步听)或查询式(部署和同步听)。 ,“处理在高速缓存中的数据,”使用的调用服务的更多信息,请参见第24章。
访问调用服务通过的com.tangosol.net.InvocationService的接口,并包括以下两种方法:
例1-1方法在InvocationService API
public void execute(Invocable task, Set setMembers, InvocationObserver observer);
public Map query(Invocable task, Set setMembers);
可以检索从com.tangosol.net.CacheFactory类的一个实例服务。
连贯性实现的WorkManager API任务为中心的处理。
1.7活动
所有的NamedCache实例Coherence实施com.tangosol.util.ObservableMap的接口,它允许附加缓存监听器实现的选项(的com.tangosol.util.MapListener)。应当指出的是,应用程序可以观察到作为逻辑概念的事件,而不管导致该事件的计算机。可定制的基于服务器的过滤器和轻量级的事件,可以最大限度地减少网络流量和处理。缓存听众遵循JavaBean的范式,并可以区分系统的缓存事件(例如,驱逐)和应用程序缓存的事件(例如,获取/把操作)。
连续查询功能提供的能力,保持客户端的“物化视图”。同样,任何服务可以观看的成员加入和离开,包括群集服务和高速缓存和调用服务。
请参见第21章,“使用高速缓存活动”,使用事件的更详细的信息。
1.8对象 - 关系映射集成
大多数ORM产品支持“L2”缓存插件的连贯性。这些解决方案缓存内的实体数据的连贯性,允许在多台服务器上的应用程序共享缓存的数据。请参阅Oracle Coherence的集成指南Oracle Coherence的更多信息。
1.9 C + + /。NET集成
Coherence提供支持跨平台的客户端(通过TCP / IP)。所有客户端使用相同的线协议(服务器不区分客户端平台)。另外,还要注意有没有在任何这些客户的第三方组件(如嵌入式的JVM语言桥梁)。线协议支持事件饲料和相干过程中的缓存为所有的客户端平台。请参阅Oracle Coherence的客户端的完整说明,使用相干指南*扩展支持远程C + +和NET客户端。
1.10管理和监视
连贯性提供了使用Java管理扩展(JMX)的管理和监控设施。使用JMX与连贯性的详细信息,请参阅Oracle Coherence的管理指南。