`

从liferay看分布式cache的实现

阅读更多

cache是优化性能的必须选择,cache也是一个中大型系统必须选择的技术。Cache是专门针对有状态数据的系统做的一种优化措施。在J2EE中,通常我们有很多功能会在WEB层实现,比如Web Service,但是这些网络功能是非常耗时的,如果每个request都进行网络通讯,无疑性能是很低的。

因此, 我们需要将一些经常反复使用的状态数据一直保存在内存中,在有效期内供客户端不断反复访问。

使用HashMap保存对象是实现的最基本思路,很多开源软件都有自己的cache机制,如Jive的cache机制主要实现了单机系统的缓冲机制,如果多台服务器运行,jive 2.1以前的cache机制是无法 实现的,这迫使它在jive 2.5以后采取第三方非开源的分布式Cache系统。

那么有没有一种简单的分布式cache实现机制呢?

最新门户portal开源软件Liferay向我们展现了利用EJB实现分布式cache简单实用的实现。

Cache机制是利用内存中的对象来代替远程对象,因此它是一种Proxy模式,我们来看看几个关键的类:

1.Cache类

核心类是com.liferay.cache.model.cache,通过构造一个new cache(Object obj),将需要cache的对象
赋值进去,就能达到cache的目的,以后通过cache.getObject()可以得到这个对象。

为了达到分布式cache目的,多态Server能共享同样的Cache,liferay使用了数据库来持久化这些cache:

Cache
CacheEJB
CacheHome

这三个类是一个实体bean, 对应一个叫cache的数据库,使用集中式的数据库可以让多态服务器来共享这些被cache的 对象。Cache中有两个字段:ID和String型的text, 后者是将对象序列化以String方式保存在数据库中。

Modeler 是将实体Bean的Cache 逆向序列化成Cache。CachePool是实体Bean Cache的缓冲池。

通过CacheManager操作上述的CachePool Modeler和Cache,可以实现所有的有关Cache的生成 管理操作。

实际上,这个Cache是供WEB层使用的,因此,通过CacheManagerUtil这个总的接口向WEB层提供Cache功能,在WEB层,WebCachePool以单态的形式为所有WebCachable的对象提供cache。

可见,整个Cache机制有三层,第一层WebCachePool是离应用请求最近的;当超过更新期间后,第一层将从第二层CachePool获取,如果第二层没有,将从数据库中获取,如果数据库没有或过期,则启动这个被Cache的对象的某个方法,让其从远程通过网络获取新值。。

2.Cachable对象

上面我们已经提到被Cache的对象,这个对象能够被Cache,需要具备一定的条件,它要实现WebCacheable,而WebCacheable是个综合接口,它必须具备两个属性Cacheable, Converter。

Cachable的接口只有getRefreshTime()方法,意味着只要指定了自己的更新时间就能Cacheable,同时还要再具备Converter,Converter代表的意思是,如果Cacheable规定的更新时间失效后应该做的事情:到真正数据源再获取一次数据,由此可见,Cache的好处就是,不必每次需要这个数据时,都要执行一次Converter。

举例:

天气预报,我们可能会在我们首页上放置天气预报,这个天气预报的信息我们是通过Web Service到某个专业站点获取的,那很显然,不可能我们的首页在每次被访问时,都要通过Web Service这样的网络连接去获取天气数据,这时,我们就需要对天气数据Weather进行Cache。

//根据邮编构成一个WeatherConverter对象
WebCacheable wc = new WeatherConverter(zip);

//通过缓冲池再获得这个对象,Cache实际是一种Proxy模式
Cache cache = WebCachePool.get("weather." + zip, wc);

//从cache中再返回该对象。
return (Weather)cache.getObject();

从上可见,当客户端我们的首页后,我们不是直接返回wc.convert(zip),这个方法就是通过Web service到远程获取天气数据,而是中间强行插入一个proxy"网关",使用cache.getObject()来返回天气数据,这样,就起到Cache缓冲的效果。

liferay是个非常不错的门户软件,尤其是它的portlet概念,整合了普通门户网站的所有功能,非常类似IBM的Portal软件,但它是开源免费的。而且它的很多设计思想可以借鉴实现在我们自己的应用中。

分享到:
评论

相关推荐

    Liferay的CAS SSO实现

    在Liferay中实现SSO(Single Sign-On)单点登录功能,可以让用户在一个系统登录后,无需再次输入凭证就能访问其他关联系统,极大地提高了用户体验。其中,CAS(Central Authentication Service)是一个广泛应用的...

    Liferay集成CAS实现单点登录与应用系统集成

    【Liferay 门户集成CAS实现单点登录与应用系统集成】是将开源门户平台Liferay与中央认证服务(CAS)相结合,以实现用户在多个应用系统间的统一登录体验。Liferay是一个基于Java的企业级门户解决方案,它具备强大的...

    Liferay微信登录自动登录

    在本文中,我们将深入探讨如何实现Liferay门户与微信的集成,从而实现微信登录的自动登录功能。Liferay是一款开源的企业级门户平台,它提供了丰富的定制化选项,包括自定义登录方式。微信作为中国最流行的社交应用之...

    基于Liferay+Portal技术的校园信息门户研究与实现

    ### 基于Liferay+Portal技术的校园信息门户研究与实现 #### 一、引言 随着信息科技与通信技术的迅猛发展,数字化校园已成为高等教育机构信息化建设的重要组成部分。数字化校园不仅为师生提供了海量信息资源和服务...

    liferay+cas实现单点登录步骤

    【Liferay + CAS 实现单点登录步骤】 在IT领域,单点登录(Single Sign-On,简称SSO)是一种方便用户管理和身份验证的技术,它允许用户通过一次登录就能访问多个相互关联的应用系统,无需多次输入凭证。Liferay是一...

    Liferay Portal 内容管理

    在Liferay Portal中,文档管理主要通过【Document Library】Portlet实现。用户可以方便地上传文档,如在文件夹内点击【Add Document】,选择本地文件上传。值得注意的是,上传的文档大小通常有3000KB的限制。文档...

    liferay扩展环境 liferay ext

    1. **扩展框架**:Liferay Ext基于Maven构建,它提供了一个框架,开发者可以在其中添加自定义的类加载器,使得新的类和配置可以优先于默认的Liferay类加载,实现对核心功能的扩展。 2. **portlet开发**:通过...

    liferay详细讲解 liferay项目完全讲解

    JBPM是一个开源的工作流和业务规则管理系统,Liferay可以通过它来实现复杂的业务流程自动化。通过这个文档,我们可以学习到Liferay如何存储和管理JBPM中的工作流实例、任务和相关数据,这对于理解Liferay中的工作流...

    Liferay Portal Liferay IDE

    Liferay Portal Liferay IDE

    liferay document_llibrary上传下载实现跟踪

    以下将详细介绍Liferay文档库上传下载实现的流程及原理。 1. **文件上传流程**: - **DLFILEENTRY表**:当上传一个文件时,系统首先会在DLFILEENTRY表中创建一条新记录,代表新添加的文档。这条记录包含了文件的...

    liferay快速入门quickstart

    - **主题更换:**通过Liferay的外观管理功能,用户能够自定义网站的主题和布局,实现个性化设计。 - **内容管理系统:**Liferay内置的CMS允许用户编辑和发布网页内容,支持文档管理、版本控制等特性,简化了网站内容...

    Liferay集群负载均衡配置

    这可以通过配置Liferay的会话复制机制实现,如使用Memcached或 Hazelcast作为分布式缓存,将会话信息实时复制到其他节点。 4. **负载均衡器的选择与配置**: - **硬件负载均衡器**:例如F5 Big-IP或Cisco CSS,...

    Liferay开发指南(中文)和liferay详细介绍(英文)

    2. **微服务架构**:Liferay的微服务架构介绍,如何设计和部署分布式服务以支持大型企业级系统。 3. **大数据集成**:如果涉及,可能会涵盖如何利用Liferay与大数据平台(如Hadoop或Spark)集成,实现数据分析和...

    liferay环境的搭建

    - 如果需要,可以在Liferay source location处选择Liferay的源码路径,这样有助于调试和理解内部实现。 - 点击 `Finish` 完成配置。 3. **启动Liferay服务器**: - 在Liferay IDE下方的 `Servers` 面板中,可以...

    liferay-developer-guide-6.0_liferay_

    这本书详细介绍了如何利用Liferay的API、服务和插件进行开发,涵盖了从基础到高级的各种主题。 在Liferay开发中,首先需要理解Liferay Portal的核心概念。Liferay Portal是一款开源的企业级门户平台,它提供了丰富...

    Liferay 6 入门教程

    Struts2是一个流行的MVC框架,"plugins开发指南12-liferay6中struts2开发.pdf"将介绍如何在Liferay 6中集成Struts2,实现更高效的应用程序开发。同时,"plugins开发指南4-2简单的MVC分层结构的portlet-核心代码开发....

    liferay经典书籍8本

    本书详细阐述了Liferay在集群环境下的配置和优化,包括数据同步、负载均衡以及故障转移策略,帮助读者实现Liferay系统的稳定运行。 4. 《Liferay Portal 7.x Theming》 对于希望自定义Liferay外观的设计师或开发者...

    liferay架构

    这些技术的应用,使得Liferay能够支持跨域的数据交互和功能调用,进一步增强了其在分布式环境下的应用灵活性。 ### 六、应用服务器 Liferay可以部署在多种应用服务器之上,包括Tomcat等标准servlet容器。这种设计...

    liferay 超级学习文档

    Liferay 是一个开源的企业级门户平台,它提供了一个强大的框架,用于构建和管理Web应用程序、内容和工作流程。本超学习文档将深入探讨Liferay的核心特性、开发环境、Java技术的应用以及Hibernate在Liferay中的整合。...

    Liferay技术文档

    对于 Web 服务,Liferay 使用 Axis Servlet 实现。同时,它为 J2ME、J2SE 和 J2EE 提供了隧道 Servlet 支持。这种架构使得 Liferay 具有高度的可扩展性和互操作性。 2. **核心技术** - **业务层**:Liferay 采用了...

Global site tag (gtag.js) - Google Analytics