深入探讨在集群环境中使用+EhCache+缓存系统.docx
- 文档编号:17874630
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:11
- 大小:182.42KB
深入探讨在集群环境中使用+EhCache+缓存系统.docx
《深入探讨在集群环境中使用+EhCache+缓存系统.docx》由会员分享,可在线阅读,更多相关《深入探讨在集群环境中使用+EhCache+缓存系统.docx(11页珍藏版)》请在冰点文库上搜索。
深入探讨在集群环境中使用+EhCache+缓存系统
深入探讨在集群环境中使用EhCache缓存系统
Date:
9/20/2018
TypeofSubmission:
Title:
深入探讨在集群环境中使用EhCache缓存系统
Subtitle:
Keywords:
EhCache缓存集群
Prefix:
无需填写
Given:
刘柄成
Middle:
Family:
Suffix:
无需填写
JobTitle:
Email:
javayou@
Bio:
刘柄成,开源中国社区()站长,DLOG4J作者,十年的Java开发经验,热衷于开源软件的开发和应用。
Company:
Photofilename:
Abstract:
EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
本文充分的介绍了EhCache缓存系统对集群环境的支持以及使用方法。
EhCache缓存系统简介
EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
下图是EhCache在应用程序中的位置:
EhCache的主要特性有:
1.快速.
2.简单.
3.多种缓存策略
4.缓存数据有两级:
内存和磁盘,因此无需担心容量问题
5.缓存数据会在虚拟机重启的过程中写入磁盘
6.可以通过RMI、可插入API等方式进行分布式缓存
7.具有缓存和缓存管理器的侦听接口
8.支持多缓存管理器实例,以及一个实例的多个缓存区域
9.提供Hibernate的缓存实现
10.等等
由于EhCache是进程中的缓存系统,一旦将应用部署在集群环境中,每一个节点维护各自的缓存数据,当某个节点对缓存数据进行更新,这些更新的数据无法在其他节点中共享,这不仅会降低节点运行的效率,而且会导致数据不同步的情况发生。
例如某个网站采用A、B两个节点作为集群部署,当A节点的缓存更新后,而B节点缓存尚未更新就可能出现用户在浏览页面的时候,一会是更新后的数据,一会是尚未更新的数据,尽管我们也可以通过SessionSticky技术来将用户锁定在某个节点上,但对于一些交互性比较强或者是非Web方式的系统来说,SessionSticky显然不太适合。
所以就需要用到EhCache的集群解决方案。
EhCache从1.7版本开始,支持五种集群方案,分别是:
1.Terracotta
2.RMI
3.JMS
4.JGroups
5.EhCacheServer
本文主要介绍其中的三种最为常用集群方式,分别是RMI、JGroups以及EhCacheServer。
RMI集群模式
RMI是Java的一种远程方法调用技术,是一种点对点的基于Java对象的通讯方式。
EhCache从1.2版本开始就支持RMI方式的缓存集群。
在集群环境中EhCache所有缓存对象的键和值都必须是可序列化的,也就是必须实现java.io.Serializable接口,这点在其他集群方式下也是需要遵守的。
下图是RMI集群模式的结构图:
采用RMI集群模式时,集群中的每个节点都是对等关系,并不存在主节点或者从节点的概念,因此节点间必须有一个机制能够互相认识对方,必须知道其他节点的信息,包括主机地址、端口号等。
EhCache提供两种节点的发现方式:
手工配置和自动发现。
手工配置方式要求在每个节点中配置其他所有节点的连接信息,一旦集群中的节点发生变化时,需要对缓存进行重新配置。
由于RMI是Java中内置支持的技术,因此使用RMI集群模式时,无需引入其他的jar包,EhCache本身就带有支持RMI集群的功能。
使用RMI集群模式需要在ehcache.xml配置文件中定义cacheManagerPeerProviderFactory节点。
假设集群中有两个节点,分别对应的RMI绑定信息是:
节点1
192.168.0.11
4567
/oschina_cache
节点2
192.168.0.12
4567
/oschina_cache
节点3
192.168.0.13
4567
/oschina_cache
那么对应的手工配置信息如下:
节点1配置:
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="hostName=localhost, port=4567, socketTimeoutMillis=2000, peerDiscovery=manual, rmiUrls=//192.168.0.12: 4567/oschina_cache|//192.168.0.13: 4567/oschina_cache" /> 其他节点配置类似,只需把rmiUrls中的两个IP地址换成另外两个节点对应的IP地址即可。 接下来在需要进行缓存数据复制的区域(Region)上配置如下即可: maxElementsInMemory="10" eternal="false" timeToIdleSeconds="100" timeToLiveSeconds="100" overflowToDisk="false"> class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" properties="replicateAsynchronously=true,replicatePuts=true,replicateUpdates=true, replicateUpdatesViaCopy=false,replicateRemovals=true"/> 具体每个参数代表的意义请参考EhCache的手册,此处不再详细说明。 EhCache的RMI集群模式还有另外一种节点发现方式,就是通过多播(multicast)来维护集群中的所有有效节点。 这也是最为简单而且灵活的方式,与手工模式不同的是,每个节点上的配置信息都相同,大大方便了节点的部署,避免人为的错漏出现。 在上述三个节点的例子中,配置如下: class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="peerDiscovery=automatic,multicastGroupAddress=230.0.0.1, multicastGroupPort=4446,timeToLive=32" /> 其中需要指定节点发现模式peerDiscovery值为automatic自动;同时组播地址可以指定D类IP地址空间,范围从224.0.1.0到238.255.255.255中的任何一个地址。 JGroups集群模式 EhCache从1.5.版本开始增加了JGroups的分布式集群模式。 与RMI方式相比较,JGroups提供了一个非常灵活的协议栈、可靠的单播和多播消息传输,主要的缺点是配置复杂以及一些协议栈对第三方包的依赖。 JGroups也提供了基于TCP的单播(Unicast)和基于UDP的多播(Multicast),对应RMI的手工配置和自动发现。 使用单播方式需要指定其他节点的主机地址和端口,下面是一个两个节点,使用了单播方式的配置: class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory" properties="connect=TCP(start_port=7800): TCPPING(initial_hosts=host1[7800],host2[7800];port_range=10;timeout=3000; num_initial_members=3;up_thread=true;down_thread=true): VERIFY_SUSPECT(timeout=1500;down_thread=false;up_thread=false): pbcast.NAKACK(down_thread=true;up_thread=true;gc_lag=100;retransmit_timeout=3000): pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false; print_local_addr=false;down_thread=true;up_thread=true)" propertySeparator=": : "/> 使用多播方式配置如下: class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory" properties="connect=UDP(mcast_addr=231.12.21.132;mcast_port=45566;): PING: MERGE2: FD_SOCK: VERIFY_SUSPECT: pbcast.NAKACK: UNICAST: pbcast.STABLE: FRAG: pbcast.GMS" propertySeparator=": : " /> 从上面的配置来看,JGroups的配置要比RMI复杂得多,但也提供更多的微调参数,有助于提升缓存数据复制的性能。 详细的JGroups配置参数的具体意义可参考JGroups的配置手册。 JGroups方式对应缓存节点的配置信息如下: maxElementsInMemory="10" eternal="false" timeToIdleSeconds="100" timeToLiveSeconds="100" overflowToDisk="false"> class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory" properties="replicateAsynchronously=true,replicatePuts=true, replicateUpdates=true,replicateUpdatesViaCopy=false,replicateRemovals=true"/> 使用组播方式的注意事项 使用JGroups需要引入JGroups的jar包以及EhCache对JGroups的封装包ehcache-jgroupsreplication-xxx.jar。 在一些启用了IPv6的电脑中,经常启动的时候报如下错误信息: java.lang.RuntimeException: thetypeofthestack(IPv6)andtheusersuppliedaddresses(IPv4)don'tmatch: /231.12.21.132. 解决的办法是增加JVM参数: -D.preferIPv4Stack=true。 如果是Tomcat服务器,可在catalina.bat或者catalina.sh中增加如下环境变量即可: SETCATALINA_OPTS=-D.preferIPv4Stack=true 经过实际测试发现,集群方式下的缓存数据都可以在1秒钟之内完成到其他节点的复制。 EhCacheServer 与前面介绍的两种集群方案不同的是,EhCacheServer是一个独立的缓存服务器,其内部使用EhCache做为缓存系统,可利用前面提到的两种方式进行内部集群。 对外提供编程语言无关的基于HTTP的RESTful或者是SOAP的数据缓存操作接口。 项目是EhCacheServer提供的对缓存数据进行操作的方法: OPTIONS/{cache}} 获取某个缓存的可用操作的信息 HEAD/{cache}/{element} 获取缓存中某个元素的HTTP头信息,例如: curl--headhttp: //localhost: 8080/ehcache/rest/sampleCache2/2 EhCacheServer返回的信息如下: HTTP/1.1200OK X-Powered-By: Servlet/2.5 Server: GlassFish/v3 Last-Modified: Sun,27Jul200808: 08: 49GMT ETag: "1217146129490" Content-Type: text/plain;charset=iso-8859-1 Content-Length: 157 Date: Sun,27Jul200808: 17: 09GMT GET/{cache}/{element} 读取缓存中某个数据的值 PUT/{cache}/{element} 写缓存 由于这些操作都是基于HTTP协议的,因此你可以在任何一种编程语言中使用它,例如Perl、PHP和Ruby等等。 下图是EhCacheServer在应用中的架构: EhCacheServer同时也提供强大的安全机制、监控功能。 在数据存储方面,最大的Ehcache单实例在内存中可以缓存20GB。 最大的磁盘可以缓存100GB。 通过将节点整合在一起,这样缓存数据就可以跨越节点,以此获得更大的容量。 将缓存20GB的50个节点整合在一起就是1TB了。 总结 以上我们介绍了三种EhCache的集群方案,除了第三种跨编程语言的方案外,EhCache的集群对应用程序的代码编写都是透明的,程序人员无需考虑缓存数据是如何复制到其他节点上。 既保持了代码的轻量级,同时又支持庞大的数据集群。 EhCache可谓是深入人心。 2009年年中,Terracotta宣布收购EhCache产品。 Terracotta公司的产品Terracotta是一个JVM级的开源群集框架,提供HTTPSession复制,分布式缓存,POJO群集,跨越群集的JVM来实现分布式应用程序协调。 最近EhCache主要改进都集中在跟Terracotta框架的集成上,这是一个真正意义上的企业级缓存解决方案。 参考资源 ∙下载EhCache集群的测试例子源码 ∙查看EhCache更详细信息: ∙查看JGroups更详细信息: ∙更多开源项目的介绍来自开源中国社区:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 深入 探讨 集群 环境 使用 EhCache 缓存 系统