Coherence

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,则应用服务器不需要配置专有的服务器集群技术,因为Coherence*web模块提供了可用于处理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架构处理“武器”,“装备”的买卖交易

时间: 2024-08-22 11:32:41

Coherence的相关文章

Oracle Coherence应用部署到Jboss EAP 6.x 时 NoClassDefFoundError: sun/rmi/server/MarshalOutputStream 的解决办法

今天将一个web应用从weblogic 10.3迁移到jboss EAP 6.3上,该应用使用oracle coherence做为缓存,部署上去后,启动时一直报如下错误:       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_29]    at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0

甲骨文推出最新版分布式内存数据网格产品Oracle Coherence 3.7.1

甲骨文公司日前在旧金山举行的2011甲骨文全球大会上宣布,推出业界领先的最新版分布式内存数据网格产品Oracle Coherence 3.7.1. 在数据网格客户端语言方面,Oracle Coherence 3.7.1为客户提供了更大的灵活性,同时部署在Oracle Exalogic中间件http://www.aliyun.com/zixun/aggregation/13792.html">云服务器上时,Oracle Coherence 3.7.1还能降低网络通信延迟,并提高网络通信吞吐量

有关“双重检查锁定失效”的说明

原文地址 译者:丁一 双重检查锁定(以下称为DCL)已被广泛当做多线程环境下延迟初始化的一种高效手段. 遗憾的是,在Java中,如果没有额外的同步,它并不可靠.在其它语言中,如c++,实现DCL,需要依赖于处理器的内存模型.编译器实行的重排序以及编译器与同步库之间的交互.由于c++没有对这些做出明确规定,很难说DCL是否有效.可以在c++中使用显式的内存屏障来使DCL生效,但Java中并没有这些屏障. 来看下面的代码 01 // Single threaded version 02 class

Memory Barriers/Fences

原文地址:http://mechanical-sympathy.blogspot.com/2011/07/memory-barriersfences.html(因墙转载) In this article I'll discuss the most fundamental technique in concurrent programming known as memory barriers, or fences, that make the memory state within a proce

极端事务处理模式:Write-behind缓存

介绍 应用程序通常使用数据缓存来提高性能,尤其针对那些大量应用只读事务的应用程序更是如此.当数据发生变化时,这些应用程序会直接更新数据库.问题在于随着负载的增加,响应时间将随着更新的增长而延长.数据库并不擅于执行大量处理少量记录的并发事务.相对而言,处理批量事务才是数据库的强项. 实际上,随着额外负载的增加,响应时间急剧攀升,数据库就会耗用CPU或者磁盘.传统方式下,内存中缓存(in-memory caches)的存储会被限制,以满足JVM的空余内存空间.一旦我们需要缓存更多数量的数据,缓存就会

JVM性能优化,Java的伸缩性

很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题.我说过JVM的自身技术限制了Java企业级应用的伸缩性.首先我们先列举一些主导因素. l 主流的硬件服务器提供了大量的内存 l 分布式系统有大量内存的需求,而且该需求在持续增长 l 一个普通Java应用程序所持有的对空间大概在1GB~4GB,这远远低于一个硬件服务器的内存管理能力以及一个分布式应用程序的内存需求量.这被称之为Java内存墙,如下图所示(

Parallels Desktop融合模式介绍

  融合 (Coherence) 是一种能够让您在 Mac 上如同运行其原生应用程序一样运行 Windows 应用程序的查看模式. 注意:Parallels Desktop 虚拟机在第一次启动时会在融合 (Coherence) 查看模式中启动. 在融合 (Coherence) 模式中,您可以同时使用 Windows 和 Mac 应用程序,无需管理两个独立的桌面或重启.您甚至可以直接从 Mac Dock 或 Mac 桌面下载 Windows 应用程序.在该模式中,会隐藏所有的 Parallels

Parallels desktop怎么设置内容

  选择以下其中一种方法从融合(Coherence)模式切换为窗口模式:•点击菜单栏中的Parallels图标,然后选择退出融合(Coherence)模式. •如果ParallelsDesktop菜单出现在Mac菜单,请点击查看退出融合(Coherence)模式. 选择以下其中一种方法从全屏(FullScreen)模式切换为窗口模式: •按下Command-Control-F. •移动指针到屏幕顶部直到OSX菜单栏出现,并点击查看退出全屏(FullScreen). 如果您正使用MacOSXSno

Parallels虚拟机不能进入融合模式怎么办

  mac电脑Parallels虚拟机不能进入融合模式怎么办 无论如何设置操作系统都无法进入融合模式,显示出如下图的状态: 图1:无法进入融合模式 原因: 通常遇到这种情况是虚拟机操作系统内有程序阻止访问Parallels Desktop进程Coherence工具. 解决方法: (1)检查你的虚拟机操作系统之中是否安装了杀毒管理软件,通常这些软件会自动阻止某些程序的运行.不少用户习惯性在已安装好的Windows虚拟机中安装一些管理软件,这会对系统运行造成影响,卸载这些管理软件重新安装操作系统即可