oracle coherence 配置使用

Coherence下载地址:

http://www.oracle.com/technetwork/cn/middleware/coherence/downloads/index.html

Coherence安装:

Coherence是纯Java的框架,不需要额外的安装。首先在Oracle网站上下载开发包,最新为3.4版,只有13M,可以说是很小很强大。 
SDK解压即可,包含 bin, doc, example, lib 四个目录。Doc下包含了完整的user-guide,只是有点长,有350多页。
创建或切换到一个cache:Coherence集群是由Node构成的,每个Node既存储数据,又可以查询数据。 
运行 bin/coherence.sh命令就能启动一个Node实例。 
运行多次,就能启动多个实例,各Node能自动检测到网路内新启动的Node,并加入集群。 
第一个节点启动信息大致为:
MasterMemberSet(
  ThisMember=Member(Id=1, Timestamp=2014-09-01 00:25:33.724, Address=10.2.48.181:8088, MachineId=14517, Location=site:,process:2413, Role=CoherenceConsole)
  OldestMember=Member(Id=1, Timestamp=2014-09-01 00:25:33.724, Address=10.2.48.181:8088, MachineId=14517, Location=site:,process:2413, Role=CoherenceConsole)
  ActualMemberSet=MemberSet(Size=1
    Member(Id=1, Timestamp=2014-09-01 00:25:33.724, Address=10.2.48.181:8088, MachineId=14517, Location=site:,process:2413, Role=CoherenceConsole)
    )
  MemberId|ServiceVersion|ServiceJoined|MemberState
    1|3.7.1|2014-09-01 00:25:36.999|JOINED
  RecycleMillis=1200000
  RecycleSet=MemberSet(Size=0
    )
  )
最后会出现命令行提示符
                              
通过Coherence控制台命令就可以执行Cache的基本操作。

创建基本cluster和缓存实例

创建一个基本的Cluster

1)使用一个文本编辑器,打开Coherence_home/bin/cache-server脚本
2)修改java_opts变量,包含tangosol.coherence.cluster和tangosol.coherence.clusterport系统属性如下: 
set java_opts="-Xms%memory% -Xmx%memory% -Dtangosol.coherence.cluster=cluster_name -Dtangosol.coherence.clusterport=port"  替换cluster_name和端口号的值,对于cluster是唯一的。例如,使用你的名字来定义cluster的名和和你电话号码的最后四位作为端口 号
3)保存并关闭cache-server脚本
4)重复1到3的步骤来修改Coherence_Home/bin/coherence脚本
5)运行cache-server脚本。启动一个缓存服务器,输出信息提供了关于cluster成员的信息。
6)运行两个coherence脚本,每个实例启动后,输出信息提供了关于各自的集群成员的信息。每个实例返回了一个对于命令行工具的命令提示符。

创建缓存

在任意一个缓存工厂实例的命令提示符里,创建一个名为Cmcc的缓存。使用cache命令:
 
           cache Cmcc
    在命令提示符,使用put命令来存放一个简单的字符串进行的缓存,通过键入一个key/value值对(用空格分开):
 
           put key1 hello 
 
    这个命令返回显示null。put命令总是返回了一个给定键的以前的值。null值被返回,因为这是这个键的第一个值。
    切换到另一个缓存工厂实例,从命令提示符创建一个Cmcc缓存,使用cache命令:
 
           cache Test
    从命令提示符,检索缓存中的字符串,使用get命令,输入键名
 
           get key1 
 
这个命令返回显示hello。任何一个缓存功能进程能够添加和移除缓存条目,因为进程是同一个集群的一部分,并且Cmcc缓存是被所有集群成员所知道的。此外,既然缓存服务器存储了缓存数据的备份,每个缓存工厂进程都能够被关闭,缓存数据仍然存在。
Coherence默认的形式是用多播来寻找cluster。Coherence能够被配置为使用单播,如果网络中不允许使用多播。

Coherence配置

默认的配置文件说明

tangosol-coherence.xml-这个文件提供了operational 和run-time设置,被用来创建和配置cluster,通讯和数据管理服务。这个文件代表性的被称为operational deployment descriptor.这个文件的架构是coherence-operational-config.xsd文件。
 
tangosol-coherence-override-dev.xml 当Coherence启动在开发模式时,这个文件覆盖了tangosol-coherence.xml文件的operational 设置。默认的,Coherence启动与developer 模式,这个文件中的设置会被使用。这个文件中的设置适合开发环境。这个覆盖文件的架构文件和operational deployment descriptor的架构文件是一样的。
 
tangosol-coherence-override-eval.xml 当Coherence启动与evaluation模式时候,这个文件覆盖了在tangosol-coherence.xml文件的operational 设置。这个文件中的设置适合evaluating Coherence.这个覆盖文件的架构文件和operational deployment descriptor的架构文件是一样的。
tangosol-coherence-override-prod.xml当Coherence启动与 evaluation模式时候,这个文件覆盖了在tangosol-coherence.xml文件的operational 设置。这个文件中的设置适合production Coherence.这个覆盖文件的架构文件和operational deployment descriptor的架构文件是一样的。
 
coherence-cache-config.xml 这个文件用来指定在cluster中使用的各种各样的缓存类型。这个文件被代表性的称为configuration deployment descriptor.这个文件的架构是coherence-cache-config.xsd文件。
 
coherence-pof-config.xml 当使用Portable Object Format(POF)来序列化对象时,这个文件用来指定自定义的数据类型。这个文件被代表性的称为POF configuration deployment descriptor.这个文件的架构是coherence-pof-config.xsd文件。
 
Management configuration files 一个用来配置coherence management reports的文件集合。这些文件在coherence.jar库的/reports目录里。文件包含了一组配置文件的报告(report-group.xml。默认的),参考了许多的报告定义文件。每个报告定义文件的结果是创建一个报告文件,该文件显示管理信息基于特定的一组度量。 这些文件的架构分别是coherence-report-config.xsd 和 coherence-report-group-config.xsd file.

 

Coherence常用命令

Coherence常用命令:

创建或切换到一个cache:Map (?): cache cmcc
Put一个数据:Map (ccc1): put key1 value1
Get一个数据: Map (ccc1): get key1
查看有哪些cache:Map (?): maps
查看一个cache下的所有key:Map (ccc1): list
你不必关心数据存在哪里,可以在Node1 put一个数据,在Node2get出来。 
默认启动Node使用的是 Coherence.jar中的缓存配置文件 coherence-cache-config.xml ,使用的是DistributedCache 分区缓存

Coherence在编程中使用

Coherence在编程中使用API1-------基础:

使用Coherence进行数据管理的应用程序中的API调用非常简单,无论集群有多少个物理机器,多少个节点实例,客户端只逻辑上面对集群
    NamedCache cache = CacheFactory.getCache( cacheName );  
        cache.put(key, value);  
        Object value = cache.get(key);  
必须引入coherence.jar, tangosol.jar 等必要的类库文件

Coherence在编程中使用API2--------查询:

添加索引可以是查询更有效:
      // ValueExtractor : 提取内容
      // Ordered 是否排序
      // 排序比较器
    cache.addIndex(ValueExtractor, Ordered, comparator)
内容提取器类型:
ReflectionExtractor        反射提取器
比如:new ReflectionExtractor("getAge")
KeyExtractor                                         关键字提取器
new KeyExtractor(new ReflectionExtractor("getName"))
ChainedExtractor           链接提取器
new ChainedExtractor("getAddress.getCity")
entrySet 查询集合:
entrySet(Filter)方法内部是一个过滤器类型
过滤器类型:
EqualsFilter                     提取值等于参数字符串的对象
new EqualsFilter("getName", "JS")
NotEqualsFilter               Equal过滤器相反
new EqualsFilter("getName", "JS")
AndFilter                         链接两个过滤器
new AndFilter(
         new EqualsFilter("getName", "JS1"),
         new EqualsFilter("getName", "JS2"))
LikeFilter 和数据库的like 相似
new LikeFilter("getName","J%")
GreaterFilter 大于判断
new GreaterFilter("getAge", 20)
 
coherence 集合查询:
//得到大于20岁的个数
cache.aggregate(new GreaterFilter("getAge", 20), new Count())
//得到最小年龄
cache.aggregate(AlwaysFilter.INSTANCE,new LongMin("getAge"))
//得到最大年龄
cache.aggregate(AlwaysFilter.INSTANCE,new LongMax("getAge"))
//得到平均年龄
cache.aggregate(AlwaysFilter.INSTANCE,new DoubleAverage("getAge"))

Coherence缓存机制

1 复制缓存(ReplicatedCache)

数据在集群成员中进行全复制,每个节点都有一个完整的数据拷贝。这种集群下,read性能最高( cache.get(key) 操作),容错性好,但cache.put(key,value) 操作性能较低。如果Node很多,每次put操作都要在所有成员上执行一次
这是一种传统的集群技术,不是Coherence的亮点。

2 乐观缓存 (OptimisticCache)  

它类似于复制缓存,但不提供并发控制(Concurrency Control)。这种集群数据吞吐量最高,各节点容易出现数据不一致的情况。

3 分区缓存(Distributed (Partitioned) Cache)

Coherence 的亮点。默认情况下,一份数据A只在两个节点上有拷贝,第二份作为备份数据(Backup),用于容错。
从整体上看,假设应用需要的Cache总内存为 M,该模式将数据分散到N个节点上,每个JVM只占用 M/N  的内存消耗,与复制缓存每节点消耗 M量的内存形成对比,它可以极大节省内存资源。

4  Near缓存 (NearCache)  

分区缓存的改进版。分区缓存将数据全部存到Cache Node上,而Near缓存将缓存数据中使用频率最高的数据(热点数据Hotspot)放到应用的本地缓存(Local Cache)区域。由于本地内存访问的高效性,它可以有效提升分区缓存的read性能

5  四种缓存类型的基本特点对比  

几个重要因素:
JVM数量(N): 即启动的Node数量,每个节点为一个JVM进程;
数据大小(M):要缓存的数据总量的占用空间大小,如10M,120M等;
冗余度(R) :缓存的secondary备份个数。分区缓存默认为1,可以配置2,3,…
本地缓存大小(L):(仅对Near缓存而言)应用所在的本地缓存的空间大小字节数。
几种类型的对比:
 

Coherence数据管理模式

Coherence4种数据管理模式:

Read-Through,
Write-Through,
Refresh-Ahead
Write-Behind
数据管理模式体现在CacheStore 接口的功能上。
CacheStore负责直接和数据源交互,进行增删改查操作;并也负责和Coherence Cache交互,向其中写数据(put),读数据(get)和删除数据(remove)。CacheStore相当于 数据源和Cache间的桥梁。
对于不同的应用,由于数据源不同,如:DB,WebService ,FileSystem等, CacheStore有不同的实现。它一般作为应用的一部分。Coherence也为 Hibernate,Toplink等实现了一个CacheStore。

1 Read-Through:

Read-Through 的基本特点是同步读取。步骤为:
1)应用调用 CacheStore 查询数据X;
2)CacheStore 去Cache中查询,未发现数据时,向数据库执行查询操作,并将查询结果放到 Cache中, 并将结果返回给应用;
3)如果发现Cache中有数据,则直接从Cache读取,并返回给应用。
其特点体现在第二步,CacheStore调用 cache.get(X) 到 CacheStore 给应用返回数据,是同步操作。 也就是要在一个同步过程中先等待数据查询,Cache被填充,才能获得数据。 这种模式的性能比较低,不及 Refresh-Ahead。

2 Write-Through:

Write-Through 对应于数据修改操作,如 update,也具有同步的特点。
1)应用调用 CacheStore update数据X;
2)CacheStore 先update Cache中的数据,然后再向数据库执行update操作;
这种模式在一个同步过程中,先改Cache,再改数据库。因此性能也不是最理想的。

3 Refresh-Ahead:

与Read-Through相对,它是异步的。 
Coherence在Cache数据过期前,有CacheStore自动重新从数据库加载数据。而前台应用在查询数据时,CacheStore 仅调用Cache.get(X)。因此这种模式的效率明显高于read-through。 自动重载数据的时间可以设定。

l  4 Write-behind:

与write-through相对,它是异步的。
应用调用CacheStore进行update时,CacheStore不去操作数据库,直接返回结果。而Coherence集群自动对操作进行排队(queue),在间隔一段时间后(interval), CacheStore在执行队列中的 update 操作。 这样,减少的同步操作数据库的时间被节省,修改类功能的性能就能得到大幅提高。这也是Coherence的一大特色。

序列化选项

l  序列化选项:

因为序列化通常是集群数据管理中消费最大的,Coherence提供了下面的选项来序列化和反序列化数据:
1.       com.tangosol.io.pof.PofSerializer-Portal Object Format (也可以引用POF)是一种和语言无关的二进制格式。POF的设计是用来在控件和时间上提高效率,在Coherence中是最常用的序列化选项。
2.       java.io.Serializable 最简单的,但是最慢的选项。
3.       java.io.Externalizable-这要求开发人员手动实现序列化,但是能够提供重大的性能提升。与java.io.Serizlizable比较,这个能够用两种或者两种以上的因素截取序列化数据(在分布式缓存中特别有用,因为他们通常以序列化形式缓存数据)。最重要的,CPU使用率显著的降低。
4.       com.tangosol.io.ExternalizableLite-这和java.io.Externalizable十分相似,但是提供了更好的性能和更低的内存利用率,通过使用了一个更加高效的IO stream的实现。
5.       com.tangosol.run.xml.XmlBean-ExternalizableLite的默认实现

Invocation服务

l  Invocation服务

Coherence调用服务能够部署运算代理到各个cluster的节点。这些代理既可以是excute-style(部署和异步监听)有可以是query-style(部署和同步监听)。 
调用服务能够通过com.tangosol.net.InvocationService接口来访问,包含以下两个方法: 
public void execute(Invocable task, Set setMembers, InvocationObserver observer); 
public Map query(Invocable task, Set setMembers); 
服务的实例可以从com.tangosol.net.CacheFactory 类来检索。 
Coherence为以人物为中心的处理实现WorkManager API。 
 
  

你可能感兴趣的:(coherence)