• Liferay的架构:缓存(第一部分)


        这次,我将要涉及到一个非常重要的概念:缓存。在当今的web应用中,如果没有设计一个比较好的缓存系统,在web中就不可能有一个良好的性能。所以我将要

    提到的缓存不仅仅能够更好地理解Liferay架构,而且还会比较好地帮助我们去写其他的Java Web应用,尤其是在他们比较大的时候。

        Liferay以提供了优良性能(可以参考这篇性能白皮书)著称,而它的缓存系统是实现优良性能的关键因素。它的缓存系统贯穿了Liferay的三层(前端,service层,持久化层)

    下图显示了每层主要的缓存组件:

    让我们一层一层地来看看cache的应用,先从最底层开始:

        在持久化层,Liferay依赖Hibernate去完成它访问数据库的大部分工作。Hibernate有两层缓存结构,分别是Level1(L1) 和Level2(L2).Level1被用作cache

    从当前数据库会话获取的对象,在这种情况下,数据库的的一个会话会与Liferay的 Service层的一个调用捆绑起来。所以,当前端(或者一个 Web Service)

    调用service,一个数据库的会话将被打开,而且会被重用一直到这个Service方法调用return。所有对DB的操作将会共享L1 cache, 所以获取同样的对象将只会

    查询一个DB.

       Hibernate的第二层cache, Level 2 可以用来扩张DB 会话和 存储数据库对象(Entity Cache)和查询的结果(Query Cache).举个例来说,如果属于一个组织

    (organization)的某一个用户调用了从DB获取对象的方法,那么这时这些被查询出来的对象就会被存在缓存中。不过值得注意的是,真正存在缓存里的是存在

    实体缓存(Entity Cache)对象们的引用列表。这样是为了确保在缓存中,同一个对象在缓存系统中只有一个。

        除了用Hibernate,Liferay也可以自定义SQL语句用来直接查询一些比较复杂的结果(通过重用DB的连接)。针对这些,Liferay也有自己的实体和查询缓存

    (Entity Cache and Query Cache,不过目前我好像如果通过自己写SQL查询的话,没有用到缓存?).实质上,在Liferay 6.2的版本中,由于Shuyang(Liferay创始人之一)

    的努力,这两种缓存已经被高效地实现了。Hibernate的L2 cache将会默认地被关闭,Liferay自己的查询缓存系统将会取代它。

        最后比较重要的一点是,以上的cache都是通过一种底层的缓存池来管理在内存中的对象的,Liferay默认用ehcache来实现这一点,但是这也可是改变的,

    我们可以通过修改portal.properties文件来改变它。这些配置已经被写在hibernate-clustered.xml中,在这个xml文件中定义了,定义和配置了几个缓存区域。

        这些配置文件对于一个高性能的网站来说是很重要的。但是不要根据你自己的猜测来随意改变它们。你应该总是在做一些性能测试的时候修改它,这样可以帮助你

    找到性能瓶颈和验证你所修改的。

    译自:http://www.liferay.com/zh/web/jorge.ferrer/blog/-/blogs/liferay-s-architecture-caching-part-1-




































  • 相关阅读:
    09-排序1 排序
    06-图3 六度空间
    06-图2 Saving James Bond
    06-图1 List Components
    04-树5 Complete Binary Search Tree
    03-树2 Tree Traversals Again
    PAT 05-树8 Huffman Codes
    Egret引擎的visible两次开关闭问题
    Egret的项目笔记(一)
    Egret屏幕适配【转】
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3167948.html
Copyright © 2020-2023  润新知