早在2006年,Facebook就部署了超过400台Memcached服务器,超过 5TB的数据在Memcached中,而且除了业务数据外,还有页面缓存,文件缓存等所有可以缓存的东西。在互联网应用中,说Cache为王一点都不过分,任何一个成功的站点都有一套最合适自己的 Cache 设计规划重点策略。利用缓存,提升的整个系统的访问效率,提高了网站访问的吞吐量,特别在高并发的时候,系统依然非常强劲的运行。与互联网不同,企业系统很少在展现层做Cache设计规划,而且企业系统对业务数据的实时性和准确性都比较高,好像缓存没有用武之地了。
其实不然,缓存作为辅助成分依然发挥着巨大的作用,缓存利用的好,绝对能让企业系统的运行效率,业务处理提高一个档次。特别在OECP的分布式设计架构下,缓存发挥着巨大的作用。接下来将来讨论Cache设计规划的重点内容。
Cache设计规划重点一、在DAO层使用Hibernate的二级缓存,对变化相对较少的业务数据(权限、主数据等)进行全局的缓存配置,充分利用内存和磁盘缓存降低数据库的访问频率,将数据查询的压力前移,利用EJB容器强大的处理能力,提高整体的性能。
Cache设计规划重点二、 对和用户有关的相关统计信息,比如用户登陆日志、操作行为日志等信息结合Stateful的会话Bean和系统运行监视Cache进行相应的管理,在用户登出系统时,统一刷新用户缓存数据到数据库,通过这种统一的批量的数据处理,降低了数据库的频繁访问,减轻了数据库的压力,同时更高效的查看系统当前运行情况。
Cache设计规划重点三、客户端需要使用Cache进行相应的处理,来尽量减少对EJB组件的访问。EJB作为分布式的组件,常常架构在不同的物理服务器上,虽然在局域网的环境中,网络传输的速度是很快的,但是相对于本地访问来说,频繁访问远程服务带来的带宽资源的消耗依然是不能忽视的,利用客户端缓存可以尽量减少对远程EJB的访问。
Cache设计规划重点四、在统计和报表计算时,需要应用大量的缓存来提升计算的效率。以下是三种缓存策略:
A. 对统计结果实时性要求不高的(比如年报、月报),历史数据不允许随意修改的情况(财务中的账),可采用后台任务定时统计策略,集中一个时间内对数据库中的数据经过查询、计算,将统计结果放在缓存中。方便用户查看统计信息和生成相关报表。
B. 对于部分统计结果实时性要求很高的功能,可以在后台任务定时统计的基础上,加上增量数据,产生一个比较精确的统计结果。
C. 对于历史数据可以被修改的情况,可以在修改的时候更新缓存,使缓存和真实的数据保持同步。
既然,在OECP项目中,我们离不开缓存,我们就需要一种缓存组件来处理系统中的各种缓存。基于Java开源社区提供了大量的缓存组件,本着不重新发明轮子的思想,我们在平台上统一使用EHCache作为我们缓存处理的技术组件。建议各业务组件也采用EHCache作为缓存组件,默认使用Hibernate作为ORM,并结合EHCache来构建二级缓存。同时在处理普通的缓存上,我们也希望有一个统一的规范和标准去做,以便以后缓存的扩展和优化,并保持统一的风格。以下代码是基于EHCache封装的简单缓存处理的程序:详细代码请参考附件
本文探讨的关于Cache设计方面的内容可能有不足之处,希望大家可以在yongtree的博客中写下您宝贵的留言,一起深入学习Cache设计,谢谢!
《Cache在OECP系统中的设计规划》转载自百洋软件研究实验室。附有源码的文档请点击这里下载。
分享到:
相关推荐
OECP工具聚焦openEuler内核和基础包,保障二次发行版生态核心特性不丢失,关键配置不更改 结合社区选包策略及软件包等级策略,检查L1、L2软件包版本、打包方式、接口一致性,KABI白名单,架构特性(如鲲鹏/X86特性)使...
总结来说,观察者模式在OECP社区中的应用展示了其在事件驱动系统中的价值,通过分离关注点,实现了系统的可扩展性和灵活性。通过定义清晰的被观察者和观察者角色,以及事件的产生和通知机制,使得社区能够高效地响应...
在 OECP 系统中,无可避免的存在着大量的属性结构,最典型的就是组织结构,这些树形结构充斥在系统的各个角落,作为最常用的,也是非常通用的结构和实现方式,我们需要一个统一的规划和设计来处理,以便减少程序员...