Ehcache
Terracotta是一款由美国Terracotta公司开发的著名开源Java集群平台。它在JVM与Java应用之间实现了一个专门处理集群功能的抽象层,以其特有的增量检测、智能定向传送、 分布式协作、服务器镜像、分片等技术,允许用户在不改变现有系统代码的情况下实现单机Java应用向集群话应用的无缝迁移。使得用户可以专注于商业逻辑的开发, 由Terracotta负责实现高性能、高可用性、高稳定性的企业级Java集群 . Terracotta在2009年收购了Ehcache,Terracotta致力于继续维护Ehcache社区,并接计划保留Ehcache继续做为一个基于Apache 2许可证的开源产品. 也因此Ehcache从一个缓存框架摇身一变为一套解决方案. Terracotta也同时发布了需要付费的Ehcache企业版本,比如针对Big Memory问题,而出现的GC 停顿时间长的问题.比如Big Memory Go 和Big Moemory Max.
EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认的 CacheProvider。
下图是 EhCache 在应用程序中的位置:
EhCache 的主要特性有:
快速;
简单;
多种缓存策略;
缓存数据有两级:内存和磁盘,因此无需担心容量问题;
缓存数据会在虚拟机重启的过程中写入磁盘;
可以通过 RMI、可插入 API 等方式进行分布式缓存;
具有缓存和缓存管理器的侦听接口;
支持多缓存管理器实例,以及一个实例的多个缓存区域;
提供 Hibernate 的缓存实现;
EhCache 从 1.7 版本开始支持集群, 在此之前 EhCache 是进程中的缓存系统,一旦将应用部署在集群环境中,每一个节点维护各自的缓存数据,当某个节点对缓存数据进行更新,这些更新的数据无法在其它节点中共享, 这不仅会降低节点运行的效率,而且会导致数据不同步的情况发生。例如某个网站采用 A、B 两个节点作为集群部署,当 A 节点的缓存更新后,而 B 节点缓存尚未更新就可能出现用户在浏览页面的时候,一会是更新后的数据,一会是尚未更新的数据,尽管我们也可以通过 Session Sticky 技术来将用户锁定在某个节点上,但对于一些交互性比较强或者是非 Web 方式的系统来说,Session Sticky 显然不太适合。所以就需要用到 EhCache 的集群解决方案。目前EhCache支持五种集群方案,分别是:
Terracotta
RMI
JMS
JGroups
EhCache Server
Terracotta
分布式Terracotta由运行中的Ehcache和一系列的Terracotta Server(TSA)组成. 分布式Terracotta从逻辑上分为两层L1和L2, L1指使用Ehcache的App Server. L2充当L1的replication数据, 存放L1上Ehcache上数据的完全备份. L1存放经常使用的数据, 万一L1中一个App Server Crash后, 重启动后,可以从L2 TSA pull之前缓存的数据. 从而保证它的High Available.
在实际应用中,每一个App Server需要引用Ehcache的library,并配置相应TSA的IP和端口. 每个Ehcache基于在一个JVM上,并负责维持和远程TSA的通信. 从某种角度,我们理解TSA相当于Ehcache的一个远程镜像.
分布式Terracotta采分层的内存管理模型.
L1: 支持Heap Store和BigMemory(off-heap,内存直接存储).
L2:支持Heap Store, BigMemory and Local Disk Store.
这里主要介绍Terracotta , 其它的四种方式,大家如果感兴趣, 推荐另一篇blog: http://www.ibm.com/developerworks/cn/java/j-lo-ehcache/
[Reference]:
http://www.oschina.net/p/ehcache
http://ehcache.org/documentation/2.4/terracotta/architecture
http://forums.terracotta.org/forums/posts/list/2413.page
Big Memory : http://ehcache.org/documentation/bigmemory/index
来源:oschina
链接:https://my.oschina.net/u/1050156/blog/186478