【整理】Coherence 分布式集群缓存简介 - hs_admin_jsjd的日志 - 网易博客
Wednesday, January 11, 2017
12:39 PM
【整理】Coherence 分布式集群缓存简介
2010-06-26 14:04:30| 分类: Cache |举报 |字号 订阅 .
用微信 “扫一扫”
将文章分享到朋友圈。
用易信 “扫一扫”
将文章分享到朋友圈。
下载LOFTER 我的照片书 |
摘要:Oracle Coherence是一个企业级的分布式集群缓存框架。具有自管理,自恢复,高可用性,高扩展性等优良特点,在电信BOSS等项目中有很大的应用价值。本 文对它的特点,架构,基本使用方法,JMX管理,调优等进行简要但快捷的介绍,并对于Hibernate的集成过程进行说明,为BOSS,CMP等移动项 目提供一个的参考。
关键词:分布式缓存 Coherence
网上除了官方用户指南,关于Coherence的介绍文章资料很少,因此总结出此文,从原理到快速指南和基本最佳实践,希望对需要的人提供一个参考。
1 Coherence 概述
1.1 Coherence是什么
Oracle官方网站的描述是:Coherence 在可靠的、高度可伸缩的对等集群协议之上提供了复制的、分布式的(分区的)数据管理和缓存服务。Coherence 不存在单点故障,当某台服务器无法操作或从网络断开时,它可以自动且透明地进行故障切换并重新分布它的集群化数据管理服务。当新服务器加入或故障服务器重 启时,它会自动加入集群,Coherence 会将服务切回到该服务器,透明地重新分布集群负载。Coherence 包含网络级的容错特性和透明的软重启功能,以支持服务器自我修复。
——来自Oracle Coherence 专区
http://www.oracle.com/technology/global/cn/products/coherence/index.html
一个典型的Hibernate应用 + Coherence集群如下图所示:
1.2 Coherence的特点
1.2.1 分布式集群缓存
Coherence是一个分布式的缓存方案,并且通过集群为应用提供强大的缓存后备支持。Coherence主要是内存缓存,即存储区域主要在内存当中。
与一般的分布式缓存方案如JBossCache, Memcache 等相同,分布式缓存的价值基于网络IO性能高于DB查询的磁盘IO性能这样一个特点。
Coherence所有的设计都是基于多个(可以是非常多)的JVM,很多Coherence的测试都是使用几十甚至上百个节点来进行的。
下图展示了一个典型的WAS项目架构:WAS集群 + Near型Coherence集群架构。对于大型Web2.0网站(PHP或其他),集成Coherence也是类似的。
1.2.2自管理
Coherence使用的网络协议是TCMP ,是对UDP,TCP/IP的组合使用。Coherence能将启动的实例节点(Node)自动组成为集群(Cluster)。在一个局域网环境中,通过 多播(Multicast)机制,第1个启动的Node能自动发现后启动的Node,第1,2个Node同样能发现之后启动的其他Node,依次类推,自 动组成集群; 并且也能自动检测到死亡节点。集群各节点间通过单播(Unicast)机制进行数据复制,同步及发送通知消息。
Coherence集群以统一的逻辑试图对外提供缓存的读写接口,看起来使用Coherence Client就像在使用一个缓存一样。
1.2.3 自动容错和恢复
基于自管理的特点,一个Node挂掉后,集群能自动监测到,并做好死亡节点的数据恢复机制,客户端依然能正确的读出在死亡节点上存储的数据,容错和恢复对 客户端来说是透明的。
1.2.4 分区缓存(Partitioned Cache)
这是Coherence与众不同的地方。一般集群如:JBossCache, Websphere 集群等,每个Node都有数据的完整拷贝,Node间通过复制来实现数据同步和一致性,一般来说采用全复制模式,即一份数据在各节点上都有一份拷贝。这种 模式下,节点要存储了较多的数据,同步复制时比较消耗网络带宽。
而Coherence的分区缓存只将一个Node上的数据在另一节点上做1个备份,有效降低复制的消耗好时间,并节省内存总需求,只需复制模式的 1/N (N为缓存节点个数)。
1.2.5 线性扩展
假如你的Coherence集群已经有4个Node,当系统数据量过大引起Cache容量满员,导致缓存性能下降时,可以通过启动新的Node来扩容,改 善集群的性能。
这一点也是源自分区缓存技术,集群有N个Node,每个Node只存放1/N的数据,这种设计让Coherence能够处理非常多的数据,只需要 通过增加节点的数量,就可以处理更多的数据。
下图为例,当两台机器,4个存储Node不够用时,通过新增机器,新增Node实例即可自动加入集群,提升Coherence缓存性能。
线性扩展更重要体现在性能上,下图展示了,Coherence集群通过增加机器,增加Node实例使得交易耗时大幅降低,而且随着集群规模呈线性 下降。
1.2.6易用性
虽然上述特点看起来似乎很复杂,但那都是Coherence自己内部的事儿。对于客户端来说,与最简单的Map 操作一样,仅仅是 put(key,value), get(key) 等。
Java 代码
- NamedCache cache = CacheFactory.getCache(“dist-cache”);
- cache.put(key, value);
- Object value = cache.get(key);
正是基于以上技术和特点,Coherence成为一个高可用性,高扩展性,高性能但使用非常简单的网格型(Data Grid)分布式缓存框架。
Coherence企业级缓存(二) QuickStart和编程
Coherence企业级缓存(三) 四种缓存类型
Coherence企业级缓存(四) 数据管理模式
Coherence企业级缓存(五)与Hibernate集成(1)
Coherence企业级缓存(五)与Hibernate集成(2)
Coherence企业级缓存(六) JMX 管理和监控
Coherence企业级缓存(七) 性能调优
FROM:http://raymondhekk.javaeye.com/blog/256831
Coherence是什么
Coherence是Oracle为了建立一种高可靠 和高扩展集群计算的一个关键部件,集群指的是多于一个应用服务器参与到运算里。 Coherence的主要用途是共享一个应用的对象(主要是java对象,比如Web应用的一个会话java对象)和数据(比如数据库数据,通过OR- MAPPING后成为Java对象)。
简单来说,就是当一个应用把它的对象或数据托管给Coherence管理的时候,该对象或数据就能够在整个集群环境(多个应用服务器节点)共享,应用程序可以非常简单地调用get方法取得该对象,并且由于Coherence本身的冗余机 制使得任何一个应用服务器节点的失败都不会影响到该对象的丢失。其实如果不使用coherence,对于一个会话在多个应用服务器节点的共享一般是通过应 用服务器本身的集群技术,而Coherence的创造者则认为基于某种应用服务器技术的集群技术来共享会话变量的技术并不完整,而专门开发出 Coherence这个产品(原来称为tangosol)并且最后被Oracle收购,这个产品既有 原来各种应用服务器集群所具有的各种技术特点,而且又增加了原来各种应用服务器集群技术所没有的各种特性。
要学习这个产品,需要记住并注意的一点是:Coherence所有的设计都是基于多个(可以是非常多)的JVM,很多Coherence的测试都是使用几十甚至上百个节点来进行的。
Coherence的一些技术特点
Coherence产品首先是被设计用于高扩展性:
所谓高扩展性就是当一个应用服务器能够处理2000笔交易,则10个应用服务器应该能够处理20000笔交易。
一般而言,整个应用架构的扩展性由架构里的最不能扩展的部位(称之为瓶颈)决定,这个瓶颈一般而言都是数据源的处理,Coherence针对这 种理解提供了应用层的数据共享缓冲,任何一个时候如果应用能够从这个数据缓冲里满足要求,则不会将请求发给数据源,从而极大地增强一般的瓶颈(数据)的扩 展性。
为了加强数据的写处理性能,Coherence还设计了延迟写的功能,就是应用的写会先缓存在Coherence的缓冲区,然后延迟写到数据库 里,为了减轻数据源的写压力,Coherence只把最近的更改写到数据源,比如一条数据被更改了多遍,则只有最后的更改会被提交到数据源。而且,如果可 能,多个SQL语句会被变成一个SQL语句批,一次提交给数据源,这样又极大地降低了对数据源的压力。
熟悉于数据库应用程序,参加过性能测试的有经验的朋友应该知道这 非常多的场合,上述Coherence的特点刚好是对应了非常多的经常遇到的应用出现问题的场景。
一个典型的使用Coherence的架构图是:
即Coherence被放在应用服务器和数据库服务器之间,从而解决通常应用架构里的瓶颈(数据瓶颈)来提高整个应用架构的可扩展性。
Coherence的第二个非常重要的特地是支持数据的分区处理,就是如果有N个处理节点,则每个节点只管理1/N的数据,当一个节点失效时, 该节点的数据会在剩下的节点均分,每个节点将管理1/(N-1)的数据。同样的,当一个节点增加进来时,则每一个节点都会分配一部分数据给新的节点,则最 终每个节点只管理1/(N+1)的数据。大家知道,一般应用服务器的集群都有只能缓冲共享2G java对象的缺点,而Coherence这种设计让Coherence能够处理非常多的数据,只需要通过增加节点的数量,就可以处理更多的数据。
如果安装了Coherence,则应用服务器不需要配置专有的服务器集群技术,因为Coherenceweb模块提供了可用于处理http会 话信息在Coherence集群内共享的功能,当一个节点需要读取HTTP会话信息而发现自己没有该会话信息的时候,它会把请求同时发给所有的节点 (multicast),而当一个节点需要写HTTP会话信息的同时,它也会把写请求发给所有的节点,所以2个节点的处理和100个节点的处理都是一样 的。
*Coherence的使用场景
Coherence可以用于下面图示的一些技术场景:
1. Caching:正如Coherence的别名是Data Grid,Coherence在这种场景主要是被用于缓存数据源的数据,当应用需要数据时,直接从Coherence里面取得而不是从后台数据源取得。比 如用于缓存用户的个人设置信息。这种使用方式可以极大降低对后台数据源的压力,并且甚至当后台数据源不可用的时候也不影响系统的可用性。
2. Analytics:用于查询,从简单查询到复杂查询,比如用于查询金融交易系统的投资者持仓信息(非常密集的查询)。这种使用方式还可以使用多个节点的 并发查询。
3. Transactions:在Coherence直接处理交易,可以在Coherence直接提交交易,从而得到极快的响应速度和高可扩展性。
4. Events:Coherence里可以使用事件驱动的架构,能够对事件做出实时的处理。比如在线游戏使用EDA架构处理“武器”,“装备”的买卖交易。
阅读(607)| 评论(0)
用微信 “扫一扫”
将文章分享到朋友圈。
用易信 “扫一扫”
将文章分享到朋友圈。
喜欢 推荐 转载
.
已使用 OneNote 创建。