
1.3.4 Oracle Coherence
和TimesTen、DBIM一样,Coherence也是Oracle的内存数据处理产品,不过前者属于内存数据库,而Coherence属于内存数据网格。Coherence最初属于Tangosol公司,于2007年3月被Oracle收购。在第三方研究机构Forrester于2015年第三季度发布的报告(3)中,Coherence位于所有内存网格产品的第一位。
Coherence是Oracle融合中间件的组成部分,是一个基于Java的,高度可伸缩和容错的分布式缓存引擎,提供数据缓存、数据复制、实时事件处理和分布式计算服务,从而确保可伸缩性、可用性、可靠性和性能。和内存数据库一样,Coherence将频繁访问的数据缓存到内存中,不仅提高了数据处理的速度,同时极大降低了后端数据源的压力。Coherence内存网格架构如图1-6所示。

图1-6 Coherence内存网格架构
和关系型数据库不同,Coherence中存放的是无模式数据,这点非常类似于NoSQL数据库。数据以键值对的形式分布式存放于Coherence节点中,所有节点形成一个大的集群,并通过节点间复制实现缓存的高可用性。Coherence作为内存数据网格,比内存数据库具有更高的可扩展性和并行处理能力,通过添加节点可以实现内存容量和处理能力的线性增长,当添加或删除Coherence节点时,数据会自动在所有节点间重新分布,以实现负载均衡。
Coherence分布式架构的另一个好处是可利用数据网格的并行处理功能,使应用程序可在整个数据网格中并行查询和分析数据。Coherence对数据搜索、聚合和排序提供现成的支持,包括对自定义分析函数的支持。
Coherence支持丰富的缓存拓扑架构,包括全复制缓存、分区缓存、混合缓存等。全复制缓存的特点是,每一个节点上的数据都被复制到内存网格中余下的所有节点,因此网格中的每一个节点都拥有完整的数据集,不过网格的数据容量也受限于网格中最小节点的内存。全复制缓存具有最佳的读取性能,但由于数据需要复制到所有节点,因此会带来一定的开销。分区缓存将数据分布于网格中的所有节点,每一个节点只有整个数据集合的部分数据,为保证高可用性,这些数据被复制到其他网格中的节点。分区缓存的读性能低于全复制缓存,如果数据在本节点不存在,只需要额外的一步即可命中数据,写性能需要引发额外的开销,具体开销取决于后端数据副本的数量。分区缓存的数据容量为所有节点容量之和,因此可以处理较大的数据集。混合缓存是多层次缓存,近端采用本地容量有限的缓存保证访问性能,后端使用分区缓存保持数据容量的线性扩展。
Coherence后端通常需要数据库作为支撑,以实现数据的持久化。Coherence中的对象可实时或异步持久化到数据库,数据库中的数据默认以异步方式刷新到Coherence中的对象,通过Oracle GoldenGate HotCache,数据库中的变化可以实时同步到Coherence中的对象,从而保证数据的时效性。
Coherence通过锁机制或特定的API来支持内存中的事务,保证数据一致性和完整性,直到这些事务被永久保存到外部数据源。
Coherence支持内存中流式数据处理,通过预先定义规则,结合内存的高效性,Coherence可以在海量的数据中快速过滤和发现关联事件,从而实现实时决策和事件驱动的处理。
Coherence可以支持在Java、C/C++和.NET上开发的应用程序,以及其他语言支持的RESTful API接口。此外,Coherence支持在以不同语言编写的应用程序之间共享数据。
作为Oracle产品家族中的一员,Coherence与Oracle的其他许多产品进行了紧密集成,包括WebLogic Server、ATG、PeopleSoft,以及通过Oracle Enterprise Manager进行统一管理。