Portal性能优化

性能优化是Portal产品研发的一个重要课题。在jetspeed2.0中使用多线程异步处理,来提高性能。但由于Portal技术非常多的依赖于Web Service,而Web Service的网络开销是非常大的。如果每个request都进行网络通讯,无疑性能是很低的。Jetspeed2.0会花大量的时间为用户创建sessions。应当确保每次的点击不应是创建一个新的session。因此需要将一些经常反复使用的状态数据一直保存在内存中,在有效期内供客户端不断反复访问。cache是优化性能的必须选择,cache也是一个中大型系统必须选择的技术。cache是专门针对有状态数据的系统做的一种优化措施。
在jetspeed2.0中cache机制主要应用于文件操作上。因为jetspeed2.0使用门户结构标记语言(PSML)来定义在一个portal页面上如何将portlets进行整合、布局、装饰以及安全限制等。而这些定义是以xml形式存储在文件中的。如果每次都去读文件,性能将会很差。
主要的类有FileCache和FileCacheEntryImpl。FileCache中定义了一个HashMap来存储文档对象,以及扫描频率和存储的最大值(缺省是300秒和100)。FileCacheEntryImpl中保存的是需要被缓存的文档内容。HashMap以文件路径为key来对应相应的文档对象。更新机制是每隔一段时间(300秒)检查一次,如果文件比cache中的新就重新加载,如果cache中的个数大于存储的最大值(100个)就将最先的几个删除,保证cache中存储着100个最新的文档对象。
使用HashMap保存对象是实现cache的最基本思路,但是这只能实现单机系统的缓冲机制,一旦Portal的数据量级达到一定的程度就必须实现多台服务器的"集群"Caching机制。目前在jetspeed2.0中没有看到相关的文档介绍和具体实现方式。通过对另一个开源Portal产品liferay的研究,介绍一种利用EJB实现分布式cache简单实用的实现。
为了达到分布式 cache 目的,多态 Server 能共享同样的 cache liferay 使用了数据库来持久化这些 cache ,使用集中式的数据库可以让多态服务器来共享这些被 cache 对象。 Cache 中有两个字段: ID String 型的 text 后者是将对象序列化以 String 方式保存在数据库中。整个 Cache 机制有三层,第一层 WebCachePool 是离应用请求最近的;当超过更新期间后,第一层将从第二层 CachePool 获取,如果第二层没有,将从数据库中获取,如果数据库没有或过期,则启动这个被 Cache 的对象的某个方法,让其从远程通过网络获取新值。这种机制是利用内存中的对象来代替远程对象,因此它是一种 Proxy 模式。

你可能感兴趣的:(Portal)