`
eddie
  • 浏览: 92024 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

jbosscache1.4 invalidation模式的疑问

阅读更多

项目中需要用jbosscache解决分布式cache问题。我们想实现如下cache模式:

假设集群有2个节点,分别是node1和node2,我们要缓存的对象叫test.table1,

1、node1 检索test.table1的id为“id1”的值, 这时,由于缓存中没有相应数据,它会先访问数据库,然后缓存在本地,即调用类似treecache.put("/test/table1","id1" "value1")的语法保存在缓存中;这时其他节点的cache不受影响;下次node1再次访问该值,就会从缓存中取到该值。

2、同样,node2访问test.table1的id为“id1”的值,这时缓存中也没有该值,同样访问数据库,然后放到缓存中。

3、node1修改了test.table1的id为“id1”的值,这时,应该调用treecache的remove方法,将改对象清除出缓存,并向node2发送invalidation通知,使node2也清除相应的对象。

我们在考察了jbosscache支持的4种同布方法(REPL_ASYNC,REPL_SYNC,INVALIDATION_ASYNC,INVALIDATION_SYNC)后,觉得INVALIDATION_SYNC这种方式满足我们的需求。即各个节点都单独保留自己的cache数据,在查询数据库后,保存在本地的缓存中,这时不同步数据到其他节点。但当某个节点修改了缓存中的数据,这时需要发送

invalidation消息到其他节点,使得其他节点删除相应的缓存。

 

在通过1个下午的测试后,结果和我们设想的有很大出入,以下就是测试结果:

1.node1 加入新的数据 /test1,正常,node2相应的缓存没有变化;

2.node2加入新的数据/test1,奇怪的事情发生了,node1的 /test1节点不见了,我看日志,确认它受到了Eviction消息,即数据失效消息;

3、同样,我们再次在node1加入数据/test1,结果,node2的/test1数据不见了,同样是收到了相应的数据失效消息。

 

以上现象,会导致node1到数据库取数据,更新缓存,node2的缓存中相应数据会因此失效,下次node2取同样的数据时,由于数据失效,还要去数据库取,再次更新node2缓存后,此时,node1将收到缓存失效消息。这样循环往复,实际上缓存一点也没有起到分布式的作用。

实际上,应该是node1和node2分别保存自己的缓存,只有在我们更新的数据或删除了数据时,这时才能发送invalidation消息,其他节点清除相应缓存数据。

 

有没有朋友用过INVALIDATION模式,帮我解答下这个问题,谢谢!

 

 

分享到:
评论
5 楼 cavvie 2007-02-22  
首先简化node1为1,node2为2:

1、这样的cache方式肯定也是有用的,因为访问的序列不可能是 1-2-1-2-1-2-1-2 ....这样的方式, 应该是1-1-1-2-2-1-1-2-2-2-2-1等随机序列方式,那样jboss缓存是能发挥作用的。

2、就算完全是1-2-1-2-1这种规律间隔模式,如果是使用Hibernate,那么有基于session的一级缓存,很有可能数据是从一级缓存中读取的,还是节省了访问数据库的时间;再次之,数据库本身也有缓存,提取还是很快的。(基于这种方式,在jboss缓存之下还有一层缓存是一个较好的方法)

3、纯属个人猜测:每次put都更新远程缓存,能够避免更新数据后因为忘记remove treecache中的相应条目,而导致的cache不一致问题。
(其实我觉得put的时候不更新远程cache,remove treecache时再更新远程cache是没有问题,不知道jboss team最终为什么没使用这样的设计?)

4 楼 eddie 2007-02-05  
找到了一些线索,搜索jbosscache的论坛,
http://jboss.org/index.html?module=bb&op=viewtopic&t=98149
======================================================
Hi,

Sorry for the slow response.

For your use case where you need to maintain state across all servers, INVALIDATION will not work. You do need to use replication.

Just to brush up on the concepts, invalidation will *remove* state on remote nodes if one node updates this state while replication will *update* this state on all remote nodes.

Invalidation only makes sense if you use a *physical* cache loader (such as a database, file system or far cache) rather than the clustered cache loader, which relies on this state being available on remote cache nodes.

Regarding your multicast issues, I'd recommend troubleshooting your network/JGroups stack first - Here's some literature that may help.

Cheers,
Manik

_________________
Manik Surtani
Project Lead, JBoss Cache
JBoss, a division of Red Hat
=========================================================

他说INVALIDATION模式总是在本节点更新的时候,废除其他节点的信息。
但,还是没有解决我的问题。:-(
3 楼 eddie 2007-02-05  
有没有朋友用过INVALIDATION模式呢?难道有其他配置参数吗?项目急需解决该问题,谢谢啦!
2 楼 eddie 2007-02-03  
codeutil 写道
没用过 jbosscache ,

前几天在测试oscache的demo,oscache使用 jgroups就是你所描述的cache模式的.

jbosscache内部也用的jgroups,但这种模式我总觉得不合理,我理解应该remove的时候才发invalidation消息,put的时候只是本地的,不发同步消息。
不知道你们是怎么用的,能否解释下?
1 楼 codeutil 2007-02-03  
没用过 jbosscache ,

前几天在测试oscache的demo,oscache使用 jgroups就是你所描述的cache模式的.

相关推荐

    jbosscache 1.2.4 src

    4. Replication模块:这部分源代码展示了如何在集群间复制和同步数据,包括异步和同步两种模式。 三、Sample应用 在JBossCache-1.2.4的sample目录下,包含了一些示例程序,用于演示如何在实际项目中集成和使用...

    jbosscache

    JBossCache的配置可以通过XML文件进行,允许用户自定义缓存模式、大小、过期策略、缓存加载策略等。这些设置对于优化性能和满足特定应用需求至关重要。 **6. 缓存生命周期管理** 缓存对象有其生命周期,包括创建、...

    JbossCache中文文档.CHM

    JbossCache中文文档由邱奎宁翻译,本人制作。

    JBossCache用户向导笔记

    在集群环境中,JBossCache支持多种缓存复制模式,包括本地模式和复制的缓存模式。它提供了丰富的集群特性,如失效处理、状态传递等。 #### 缓存加载器 缓存加载器负责从数据源加载数据到缓存中,提供了接口和生命...

    jbosscache-core-3.2.7.GA.jar

    jbosscache-core-3.2.7.GA.jar

    jbosscache-core-3.2.5.GA-all.zip

    - 缓存模式:支持主-从、无中心和分区等模式,以适应不同场景的需求。 - 并发控制:使用乐观锁或悲观锁策略来管理并发访问,防止数据冲突。 使用这些库,开发者可以构建高性能的应用,利用缓存提升响应速度,并在...

    jbosscache-1.4.1.jar

    jbosscache-1.4.1.jar

    jbosscache manual

    ### jbosscache manual #### 1. 引言 JBoss Cache 是一款高性能、可扩展的内存数据存储系统,支持事务处理与复制功能。它主要用于缓存 Plain Old Java Objects (POJOs),使得开发人员能够透明地操作这些对象而无需...

    jbosscache-core-3.1.0.jar

    jbosscache-core-3.1.0.jar

    JBossCache_讲解说明

    同样,根据通知方式的不同,分为同步(INVALIDATION_SYNC)和异步(INVALIDATION_ASYNC)。 #### 六、JBoss Cache的关键机制 1. **缓存加载器**:缓存加载器是JBoss Cache的重要组成部分,它允许将缓存的数据节点持久...

    JBoss cache3.2.1.GA源代码及class文件

    其中jbosscache-core-sources.jar为源代码jar包;jbosscache-core.jar含jbosscache的核心代码; lib中含有jbosscache-core.jar中所用到得class文件; etc中含有一些配置文件的样例

    JBossCache核心指南中文版

    红帽公司jboss的内部资料,版本 2.2.0 Poblano版,需要的可以下载!

    benchmark-jbosscache

    【标题】"benchmark-jbosscache" 是一个与性能基准测试相关的项目,主要关注的是JBoss Cache的性能评估。在Java开发中,缓存技术是提高应用性能的关键工具,而JBoss Cache是JBOSS组织提供的一种分布式内存缓存解决...

    分布式多级缓存技术在选课系统中的应用.pdf

    构建分布式多级缓存时,需要配置JBossCache3.0服务端,创建如TreeCache.xml的配置文件,其中定义了集群名称、缓存复制模式和JGroup通信配置等关键参数。通过配置这些参数,服务层缓存可以建立起集群的树形结构,并...

    jboss-cache

    NULL 博文链接:https://j2ee2009.iteye.com/blog/773519

    Hibernate 2nd-level cache: JBoss Caching 配置与注意事项

    <jbosscache xmlns="urn:jboss:jbosscache-core:config:3.0"> <l1-lifespan>0 </jbosscache> ``` 这个配置文件设置了乐观锁模式、分布式同步集群、LFU(Least Frequently Used)淘汰...

    Jboss技术文档

    JBoss,作为一款在J2EE应用服务器领域中迅速崛起的开源解决方案,因其商业友好的LGPL授权和社区驱动的开发模式,深受开发者喜爱。该技术的核心特性包括基于JMX微内核的服务总线,面向服务的架构(SOA),以及统一的...

Global site tag (gtag.js) - Google Analytics