浅浅的对分布式环境中的缓存整理
admin 发布于:2014-07-19 11:47:00
阅读:loading
昨天的昨天跟工程涛又聊到EhCache了,好久没研究它了,记得上次研究时最新版本还是2.7的呢,特地看了下目前最新的版本为ehcache-2.8.3-distribution.tar.gz ›,将个人与缓存之间的点点滴滴介绍一下,供大家参考。下面的描述一部分来自工作,一部分也来自互联网,网上学习别人,然后自己再总结吸收,最后再将掌握的东西以新手入门级的形式分享出来,对于一个实现来讲:如果有附带例子程序源代码掌握起来更好、有演示效果看当然也好、有基于myeclipse
的工程能直接拿来运行的,这几点都结合了,我觉得比较好。个人资历尚浅,如有不正之处,还望指出。
先扯点题外的,初次说道缓存时,记得是2011年初第一份工作离职,找第二份工作面试的那次当中,被问到缓存时,当时我真的说的很流弊,不过,呵呵,真没实现过,知道点理论。记得后来工作中有个Portal的项目,当要使用到缓存时,我的第一种实现是将$.ajax的cache参数给设置为false了,它的作用是客户端浏览器页面发送请求之后,进行缓存,也就是走的是客户端浏览器自身的缓存,但不足也很明显:1、需要每个用户都先加载一次主页面,2、当浏览器将设置成每次访问网页时(工具-常规-设置中)这种实现就不行了,3、等等。再后来各种google搜索,主要将方向放在EhCache上,因为网上查到的,项目中又有现成的jar包,还记得当时使用的时候,用的是web-filter的形式进行缓存的,此种方式它支持整页面缓存、部分页面缓存,但是由于当时项目首页使用了几处<iframe>吧,我感觉这种方式也不太好用。后来项目慢慢发展,项目经理封装了一套OSCache的缓存实现,这才是最后的实现。关于这个项目的分布式缓存稍后再议。也是值得借鉴的,后面再介绍分布式缓存集群的时候,再说吧(瞬间觉得当初的那个项目有很多地方还是挺高端的,那时候的小伙伴们你怎么看?)。
还是不扯远了,这里主要是为介绍一下分布式系统中的缓存实现,主要介绍3中实现方案(当然了,EhCache组件能够灰常强大的支持好几种呢),这3中方案,是我比较认可的。随后再附加上运行的程序代码以及,运行效果录像程序。
第一种:老Portal的分布式缓存实现:
记得当时的系统被设计为前后台两个poraladmin和potalb2c工程,部署情况是一台portaladmin和多台portalb2c,部署的每个应用中缓存的内容并非实时同步的那种,只是将portalb2c中一些需要同步的缓存给做一个接口,接口实现则是刷新本地的缓存,由portaladmin统一调用,具体实现为:当需要更新缓存时,portaladmin调用各个portalb2c的更新缓存接口(webservice
)去做到同步更新缓存,每个portalb2c都发送请求,个人觉得一般情况下,这种实现未尝不可啊。
第二种:基于EhCache Server的实现
缓存服务器这种实现与文件服务器的实现一致,在分布式系统中,我们上传文件总不可能每个web应用服务器上各个服务器上都放一份吧,例如最常见的是直接将文件上传至webapps/App/upload目录中,那么一旦做了集群之后(不考虑与IP想关的策略等),访问文件就会出现访问不到的问题,为解决这种问题,我们把所有关于文件上传的动作,专门上传到一个文件服务器,然后读取文件时再读取这个服务器的资源,所有的web应用介一致,就不会出现这种问题。那么缓存服务器的实现与此相类似吧,所有与缓存相关的动作(读取、添加、删除等)通过webservice接口调用的形式去做与此一一对应的动作。对于这种实现,我们可以在 http://sourceforge.net/projects/ehcache/files/ehcache-server/这里下载关于ehcache server版本的war程序,我实现的时候,下载的是ehcache-server-1.0.0版本,下载之后直接运行出现了几个jar包的错误问题,解决之后部署在tomcat下跑起来,这里主要呈现几个截图来表现一下吧,至于每个缓存支持restul的请求地址也可以访问一下试试,将会得到关于某个缓存的详细信息,详细截图如下:
关于cache server这种缓存方案,可以根据接口服务提供的函数来封装一套调用的函数,也可达到一次编写,到处运行的目的,呵呵。个人觉得这种解决方案可以重点考虑。
第三种:关于ehcache rmi方式集群的实现方案
昨天实现了一个缓存集群的例子,例子主要包括对ehcache api简单的调用封装(包括获取所有缓存key、根据缓存名称获取缓存对象、向某个缓存里面添加数据、移除缓存等等)、关于ehcache.xml文件集群的配置、JSP页面缓存信息的查询列表、添加、修改、删除等。总的来说,还是比较简单的(我是说我做的这点事情比较简单,比如ehcache那是别人成型的产品,我们要做的就是拿过来傻瓜式的应用即可,因为它存在的目的并不在于考验我们得智商,所以使用起来并不会太复杂)。
贴出相关实现的代码:
运行结果示例
已过期不可用
点赞