【分布式缓存之JBoss Cache】

JBoss Cache’s goal is to provide enterprise-grade clustering solutions to Java-based frameworks, application servers or custom-designed Java SE applications.

Clustering for high availability

Since JBoss Cache is a replicated cache, state is always kept in sync with other servers in the cluster.  This makes any state stored in JBoss Cache resilient to server crashes or restarts, achieving high availability.

Clustered caching to remove bottlenecks

JBoss Cache still is, as it’s name suggests, a cache.  It is a product designed to cache frequently accessed Java objects in order to dramatically improve the performance of applications.  This makes it easy to remove data access bottlenecks - such as connecting to a database. 

And unlike non-cluster-aware caches which may go out of sync when there are concurrent updates, each JBoss Cache instance is aware of remote cache updates and can either invalidate or update it’s state.

集群高可用性

JBoss Cache将会自动复制缓存数据,并且在集群中的服务器之间进行缓存数据的同步,这样可以保证任何一台服务器重启了都不会影响缓存的可用性。

集群缓存可避免系统瓶颈

JBoss Cache顾名思义是利用缓存来提高系统扩展性的,当我们的WEB系统遇到大量的数据库读写时,系统的瓶颈将会出现在数据库端,JBoss Cache正好可以解决数据库的频繁读取问题,解决这个瓶颈。

另外,由于JBoss Cache的缓存是在集群中的每一个服务器间同步的,因此也不会因为一台缓存服务器遇到性能问题而影响整个系统。

JBoss Cache提供两种缓存方式:核心缓存(TreeCache)和POJO缓存(TreeCacheAOP)

核心缓存: 会直接把传递给它的数据存储在一个树型结构中。键/值对被存储在树的节点上,出于复制或持续性的需要它们都被序列化了 POJO 缓存: 则采用比较复杂的机制——利用字节码编织来内省(introspecting)用户类,并向用户类的域添加侦听器,一旦域值有任何变化,侦听器会立刻通知缓存。例如,如果要在POJO缓存中存储一个庞大、复杂的对象,会导致POJO缓存内省对象的字节码,最终只把该对象的原始域存储到树结构中。一旦域值有所变化,缓存只复制这个改变了的域值而不会去复制整个用户类,这是高效的细粒度复制。

TreeCache按功能分为三类:本地(Local)Cache、复制(Replication)Cache和失效(Invalidation)Cache。 分布式Cache(复制和失效Cache)又分为两种,同步(REPL_ASYNC)和异步(REPL_SYNC),同步

Cache是在一个Cache实例做修改时,等待变化应用到其它实例后才返回,而异步Cache是在一个Cache实例做修改时,即刻返回。

缓存模式

LOCAL - 本地,非集群缓存。本地缓存不参与集群,也不同集群里的其他缓存通信。 因此,他 们的内容也不用串行化。但是,我们推荐将他们串行化, 这样将来的某一天想要改变缓存模式 时允许一定的灵活性。

REPL_SYNC - 同步复制。复制缓存将所有的变化复制到集群中的其他缓存. 同步复制意味着,复制变化时,调用是阻塞的,直到收到复制确认。

REPL_ASYNC - 异步复制。与上面的 REPL_SYNC 类似, 复制缓存将所有的变化复制到集群中的 其他缓存。 因为异步,调用者不用阻塞直到收到复制确认。

INVALIDATION_SYNC - 如果缓存配置为失效而不是复制, 每次缓存里数据更新,集群里的其他 缓存将收到通知消息, 通知他们的数据已经陈旧了,应该从内存中驱逐。 这将减少复制的开 销,然而仍然能够使远程缓存中的陈旧数据失效。

INVALIDATION_ASYNC - 象上面一样,但是这个失效模式是用异步的方式广播失效消息的。

猜你喜欢

转载自gaojingsong.iteye.com/blog/2367712