JBoss 系列二十六:JBoss Data Grid(Infinispan)简介

JBoss Data Grid是Red Hat中间件产品(http://www.redhat.com/products/jbossenterprisemiddleware/data-grid/),JBoss Data Grid是基于开源社区产品Infinispan(http://infinispan.org/)。 企业版的JBoss Data Grid与社区版的Infinispan代码完全一样,所以本部分基于Infinispan对JBoss Data Grid做一简单的介绍。

什么是Infinispan
Infinispan是一个分布式内存数据网格,它提供了以下功能:

无固定的数据模型的key-value存储 - Infinispan提供了一个NoSQL数据库,没有一个固定的数据模型,可以灵活性,方便的以存储不同的对象
基于网格的数据存储 - Infinispan的设计很容易地复制数据在多个节点
弹性伸缩 - 添加和删除节点实现简单,非破坏性的
多址接入协议 - 可以使用REST,Memcached,Hot Rod,或简单的映射API很容易访问Infinispan
Infinispan的使用模式
Infinispan的提供两种使用模式:

远程客户端-服务器模式
本地库模式
远程客户端-服务器模式
远程客户端-服务器模式提供了一个可管理,分布式和集群化的数据网格服务器。应用程序可以通过Hot Rod,Memcached或REST客户端API远程访问Infinispan的服务。在远程客户端-服务器模式下,数据网格的操作是非事务性的,这样如果使用远程客户端-服务器模式,Infinispan的很多特性不能够被执行。远程客户端-服务器模式的优点包括:更容易对数据网格平台进行扩展;更容易对数据网格平台进行升级而不影响客户端应用。

本地库模式
本地库模式提供建立和部署一个自定义运行环境时所需要的所有二进制文件文件(jar文件)。本地库模式下应用拥有集群网格中的一个节点,允许本地访问分布式集群中的其他节点。这种使用模式提供了应用程序访问Infinispan的功能。我们可以在常见的容器,如Tomcat7和JBossApplication Server 7中使用本地库模式。本地库模式的主要特性包括:可靠事务性,可监听性,可提示性。

Infinispan的优点
高性能性 - 访问本地内存中数据的速度要远远快于访问远程数据库中的数据。Infinispan提供了有效的方法将远程数据存储与本地内存,这样大大提高了数据访问的性能。Infinispan对集群和非集群缓存提供相关优化措施这使性能进一步加强。
一致性 - 将数据存储与缓存有固有的风险,当访问缓存中的数据时,数据可能过期或,为了解决这些风险,Infinispan提供了缓存的机制和过期机制,确保缓存中的数据的有效性。另外,Infinispan支持JTA,分布式二象限提交,数据版本控制API等保证缓存中数据的一致性。
大量的堆内存和高可用性 - 在Infinispan中,应用程序不再需要委托大部分数据查询过程到一个大的单一的数据库服务器,这很有性能方面的优势。 Infinispan使用自己的特有技术,包括复制及分布式,这完全消除了目前大多数企业应用程序存在的数据查取的性能瓶颈。举例说明如下图所示:


如图,我们假设有16台物理机器构成16个节点的数据网格,每个节点上有2GB大小的空间供Infinispan使用,存储缓存信息,在这个实例中,我们使用Infinispan网格的分布式模式,假设每份数据值需要一份备份,这样16节点的数据网格数据存储能力为16GB,这些数据可在数据网格中的任何一个节点快速的访问,如果某一节点发生异常,没有备份的数据会自动产生一份新的备份在其他节点上。

可扩展性 - 分布式网格与复制模式的数据网格相比一个巨大的优点是可扩展性,我们可以添加新的节点来增加网格的吞吐量和整体容量,Infinispan使用一个连续性的哈希算法,网格中的节点增加和移除只影响网格中局部的部分,整个网格不会有影响。由于Infinispan分布式的数据存储,数据网格节点多少的限制是网络上的群组通信。网络的群组通信是小耗资源的,主要的限制是发现新的节点。节点允许所有数据访问模式,通过对等连接进行直接访问,有利于进一步提高可扩展性。 Infinispan的集群,可以按实时删除或增加节点,而不需要重新启动的基础设施。这种实时通信的特点是Infinispan具有非常好的扩展性。
数据分发 - Infinispan的使用一致性哈希算法来确定key的位置。它所带来的优点包括:低成本,高速度,确定的key位置降低了对元数据或网络流量的要求。数据分发确保有足够的副本在集群中,提供耐用性和容错性,而不是仅仅保留一个副本,这将减少对环境的可扩展性。
持久化 - Infinispan公开了一个CacheStore接口,这个接口有多种多种高性能实现,包括JDBC缓存存储和基于文件系统的缓存存储。CacheStore可以用来衍生新的缓存,这样确保了数据的安全性,防止数据被破坏。 如果一个应用遇到内存不足的问题时,CacheStore提供刷新数据到到磁盘的功能。
语言绑定 - Infinispan的支持流行的memcached协议,为当前流行的大多数编程语言提供客户端接口,以及为优化的Infinispan协议,称为Hot Rod。作为结果,Infinispan可以用于任何主要的网站服务器端程序或者应用程序。
管理 - 在真实网格环境中会有几百个或更多的服务器,管理是一个重要的特征。Infinispan提供强大的管理功能。
远程数据网格 - Infinispan远程数据网格模式将数据网格与客户端应用分离,这样更容易对数据网格平台进行升级而不影响客户端应用。
Infinispan的架构
如下图


如图,Infinispan数据网格架构图中描绘Infinispan的各个元素和它们的相互作用。对于用户的理解,在高速缓存体系结构图被分离成两部分:

用户不可以直接交互(上图中黑色方块)的元素,其中包括高速缓存,高速缓存管理器,一级缓存,持久性存储接口和持久性存储
用户可以直接交互(上图中白色方块)的元素,其中包括高速缓存接口和应用程序
Infinispan架构中包含的所有元素:
Persistent Store - 保存缓存实例和实体
Persistent Store Interface - Infinispan的持久性存储提供了两个接口来访问持久性存储。Infinispan的持久性存储接口可以是:缓存加载器是一个只读接口,提供了一个持久性数据存储的连,缓存加载器可以查找和检索数据从高速缓存的实例,也可以从持久性存储;缓存存储扩展缓存加载器的功能,包括写入功能,通过公开的方法,使用缓存加载器来加载和存储缓存状态。
Level 1 Cache - 一级缓存(或L1高速缓存),缓存次被访问后,被访问的缓存条目存储于一级缓存,这样在每次使用相同的缓存条目时防止了不必要的远程读取操作。
Cache Manager - 高速缓存管理器是用于从Infinispan中检索缓存实例的主要机制,并可以用作使用高速缓存的一个起点。
Cache - Cache用来保存Cache Manager检索出来的缓存实例
Cache Interface - 高速缓存接口使用的协议Memcached,Hot Rod或REST的接口与高速缓存进行交互。Memcached是一个分布式的内存对象缓存系统,用于存储键值对信息在内存中。memcached的缓存系统定义了一个基于文本的客户端-服务器高速缓存协议叫做Memcached的协议;Hot Rod是一个二进制的TCP客户端-服务器协议,用于Infinispan。它被创造用来克服在其他客户机/服务器协议中存在的缺陷,如Memcached协议。Hot Rod能够智能路由客户的请求在Infinispan的服务器集群中;REST协议消除了需要紧密耦合的客户端库和绑定。 REST API引入了开销,并且需要一个REST客户端或REST调用自定义代码来使用缓存。
Application - 一个应用允许用户与高速缓存通过高速缓存接口*交互。浏览器是一个很好的例子,服务器端的程序保证用户可以通过浏览器访问服务。
Infinispan API
Infinispan的提供以下API:

Cache
Batching
Grouping
CacheStore
Externalizable
在Infinispan的远程客户端-服务器模式中,下面的API可用于与数据网格交互:

异步RemoteCache API(只能在远程客户端-服务器模式下与Hot Rod客户端结合使用)
REST接口
Memcached接口
Hot Rod接口
RemoteCache API

相关文章