JBoss 系列三十一:JBoss Data Grid(Infinispan)缓存模式

本文介绍了JBoss Data Grid(基于Infinispan)的缓存模式,包括本地模式和集群模式。本地模式提供高性能的单节点缓存,集群模式分为分布式、复制和失效模式,其中分布式模式通过连续性哈希算法实现线性可扩展性,复制模式适用于简单状态共享,失效模式用于优化读取频繁的系统。此外,文章还讨论了各种模式的配置和优缺点。
摘要由CSDN通过智能技术生成

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进行。

概述

Infinispan提供了两种模式:

  • 本地模式 - Infinispan提供的非集群的模式,在本地模式下,Infinispan可看作是一个单节点的,在内存中的数据缓存。与集群模式相比,因为我们不会考虑集群的可扩展性,容错能力,等,这使得Infinispan性能更高,使用更高效。
  • 集群模式 - 集群模式是多个Infinispan服务器(Infinispan实例)组成一个集群,集群中所有点构成一个数据网格。网格中某一节点的状态需要复制到其他所有节点,或节点的一个子集上。这个子集中节点数的多少确定了Infinispan数据网格的容错能力和可扩展性,子集节点数太大会阻碍Infinispan网格的可扩展性。集群模式中节点之间是通过JGroups来复制状态,我们在后面会做详细讨论。根据复制策略的不同,集群模式又可分为分布式模式,复制模式和无效模式

本地模式

尽管Infinispan主要特性体现在集群模式,Infinispan本地模式提供了需要实用高效的特性,Infinispan的Cache接口继承JDK的ConcurrentMap,和普通Map相比,Infinispan提供了如下特性:

  • 缓存条目可通过缓存存储器保存到第三方存储服务器(关系数据库,No-SQL,云),并且可通过同步,异步的模式通过缓存存储器操作第三方存储服务器
  • 缓存条目的逐出阻止Java虚拟机内存溢出
  • 缓存条目的过期确保长时间未被使用的条目被移除
  • JTA和XA支持使缓存操作有事务性的保证
  • 基于MVCC的并发读处理确保缓存实体可被告诉的非阻塞的读取

Infinispan服务器的缓存容器

Infinispan服务器相当与一个缓存容器,容器中可以有多个缓存实体,这些缓存可以是本地的,也可以是集群的。Infinispan服务器提供协议(HotRod,Rest,Memcached)供客户端应用连接到服务器,对容器中的缓存进行操作。Infinispan服务器配置文件中cache-container属性表示缓存容器,这个属性中包括多个缓存的配置,包括本地缓存和集群缓存。如下为缓存容器简单配置,我们从JDG/standalone/configuration/standalone.xml中摘出。

<subsystem xmlns="urn:infinispan:server:core:5.3" default-cache-container="local">
	<cache-container name="local" default-cache="default" start="EAGER">
	</cache-container>
</subsystem>

cache-container包括如下属性:

  • name 确定了缓存容器的名字
  • default-cache 确定了缓存容器默认使用的缓存实例
  • start 确定是否在Infinispan服务器启动时加载缓存容器,该属性有效值可为EAGER或LAZY,如果为EAGER则Infinispan服务器启动时加载缓存容器,LAZY则在请求时加载

本地模式的配置

在Infinispan服务器中如下配置添加了本地缓存到缓存容器,如下:

<cache-container name="local" default-cache="default" >
    <local-cache name="default" start="EAGER">
        <locking isolation="NONE" acquire-timeout="30000" concurrency-level="1000" striping="false" />
        <transaction mode="NONE" />
    </local-cache>
</cache-container>

如上通过配置文件创建的本地缓存类似通过Infinispan 接口 DefaultCacheManager创建默认缓存。 另外,本地缓存和集群缓存可以同时位于cache-container中,但如果缓存容器中有集群缓存,则cache-container必须要有<transport/> 属性。local-cache元素包括如下属性和子元素:

  • name 确定了本地缓存的名字
  • start 确定缓存容器是否默认启动缓存实例,该属性有效值可为EAGER或LAZY,如果为EAGER则缓存容器启动时启动缓存实例,LAZY则表示只有在请求时加载
  • batching 确定是否批处理操作本地缓存
  • indexing 确定本地缓存的索引属性,该属性有效值可为NONE,LOCAL和ALL
另外在本地缓存中,如果我们通过Infinispan API加载缓存,例如通过DefaultCacheManager构造方法传递Infinispan配置文件创建缓存,如下为一示例Infinispan配置文件:

<clustering mode="local" />

注意,如上为集群缓存配置模式指定local,在这种情况下,即使定义<transport/> 属性。

集群模式

根据状态复制策略的不同,集群模式又细分为:分布式模式,复制模式和无效模式,随后我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值