liferay 集群 缓冲(实际项目的解决方案)

解决思路:   首先把缓冲问题剥离出来 在利用NFS  共享到另一台服务器,deploy也可以用同样的方法实现

这意味着缓存可以分布在多个Liferay 节点下同时运行。启用缓存可以显著提高性能。例如说两个用户在浏览留言板。第一次用户通过单击启动一个线程的命令来阅读。Liferay 必须从数据库查找该线程并且格式化在浏览器中显示的格式。

通过一个分布式的 Ehcache运行此线程时,可以从数据库中提取该线程存储在一个用于快速检索的高速缓存中,然后第二个用户要是想点击它读取同一论坛线程,这一次因为该线程是在本地的缓存中,无须去检索数据库数据,相比要快得多。
可以这样做的只是因为在每个节点上都分别运行缓存, 但分布式缓存的力量允许更多的功能. 第一个用户可以发送供他或她阅读的消息到线程,这时缓存将会被所有通过的节点更新,立即从本地缓存中设置新的内容。如果没有它,第二个用户需要等待一直到缓存在他或她连接到的节点上失效之前到的节点上失效之前,他或她才可以看到更新的论坛发布内容。

配置分布式缓存需要修改portal.properties 文件或者追加一个你想要特殊缓存的内容。第一件你要做的事情是:你要确定你想要将你的缓存配置文件存储到服务器的什么位置。

提取缓冲为单独位置

portal-ext.properties中添加下列代码

net.sf.ehcache.configurationResourceName=/myehcache/hibernate-clustered.xml

ehcache.single.vm.config.location=/myehcache/liferay-single-vm.xml
ehcache.multi.vm.config.location=/myehcache/liferay-multi-vm-clustered.xml

具体的xml来自于jar中解压出来

详细的步骤看下边:
这也许在liferay的class path的某些位置,也就需要您查找你在当前应用服务器上部署的liferay的路径。并在Liferay 的WEB-INF/classes文件夹中创建一个文件夹来存储文件。因为默认文件存储在.jar 文件内,所以您需要将它们解压缩到此处,然后告诉liferay它们在什么地方(通过修改portal.properties 文件)。
例如:在Tomcat下运行的Liferay 存储在<Tomcat Home>/ webapps/ROOT目录下。并且文件夹结构为WEB-INF\classes。
您可以在这里中创建一个名称为myehcache的新文件夹来存储自定义缓存配置文件。
将/ehcache 文件夹复制(在portal- impl.jar 文件内)到刚刚创建的myehcache 文件夹。
修改portal.propties文件中的
net.sf.ehcache.configurationResourceName=/myehcache/hibernate-clustered.xml部分。重新定向文件位置
现在,Liferay 已经指向您的自定义文件可以通过修改此文件来更改Hibernate的缓存配置。
通过修改portal.proptites文件中的Ehcache部分的属性,以便它们指向您的自定义文件夹中的文件。
例如:
ehcache.multi.vm.config.location=/myehcache/liferay-multi-vm.xml部分。
如果你想启用分布式集群取消对以下行注释并将它指向您的自定义文件:
ehcache.multi.vm.config.location=/myehcache/liferay-multi-vm-clustered.xml

现在,您可以看一下这些文件中设置,并优化以适合您的环境及应用程序。


如果还想多加优化在看下边,上边基本上解决所需要的


默认情况下,Hibernate(Liferay 的数据库持久性层) 被配置为使用 Ehcache 作为其缓存提供程序。这是推荐的设置。不过默认的配置所指向的一个文件,并没有启用集群。
若要使用群集的缓存,
可以修改portal.propties文件的hibernate部分,注释掉默认的文件(hibernate.xml),并取消注释文件中集群的部分。确认您所更改路径,以便它能指向您的自定义文件:
net.sf.ehcache.configurationResourceName=/myehcache/hibernate-clustered.xml
下一步,在文本编辑器中打开此文件。您会发现配置已设置为执行分布式缓存通过multi-cast 连接。可能是这样,但是,配置并没有为您特定的应用程序设置。您会注意默认情况下,唯一的缓存对象中,hibernate缓存是用户对象
(com.liferay.portal.model.impl.UserImpl)。这意味着,当一个用户登录在他或她的用户对象就会在缓存中,任何门户的操作要求都会访问它(例如,权限检查) 这样可以非常迅速地从缓存检索该对象。
您可能想将其他对象添加到缓存,例如您的应用程序的一大部分可能被使用文档库Portlet 的文档管理。在这种情况下您可能要缓存文档库对象DLFileEntryImpl来当用户访问文档时提高性能。可以将您要缓存的类添加到配置文件另一个块:
<cache
name="com.liferay.portlet.documentlibrary.model.impl.DLFileEntryImpl"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="600"
overflowToDisk="true"
>
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicatePuts=false,replicateUpdatesViaCopy=false"
propertySeparator=","
/>
<bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"
/>
</cache>
还有,您的网站可能会使用留言板的portlet 而且那些留言板可能会有太多的数据交互情况。若要缓存消息板上线程,可以配置MBMessageImpl 类到配置
文件中:
<cache
name="com.liferay.portlet.messageboards.model.impl.MBMessageImpl"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="600"
overflowToDisk="true"
>
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicatePuts=false,replicateUpdatesViaCopy=false"
propertySeparator=","
/>
<bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"
/>
</cache>
请注意如果您的开发人员有重写这些类的情况,将必须指定被重写的类而不是使用Liferay的类。
您可以很容易添加特定的数据进行缓存,但是要小心的是,太多的缓存会降低性能,而且会过于频繁启动垃圾回收导致JVM 运行的内存不足。可能需要将您JVM 上关于缓存设置的内存设置提高,您可以在Ehcache 的文档中找到有关这些设置的细节。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javafanwk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值