《大型高并发高负载web应用系统架构-缓存架构策略.doc》由会员分享,可在线阅读,更多相关《大型高并发高负载web应用系统架构-缓存架构策略.doc(2页珍藏版)》请在文库网上搜索。
1、大型高并发高负载 web 应用系统架构-缓存架构策略目前在网站的架构构成中普遍使用到缓存来提供 WEB 应用的性能,由于网站规模的不同,分别存在如下几种类型的缓存架构。(1)单机缓存(2)简单分布式缓存(3)使用复制方式的缓存集群(4)使用散列方式的缓存集群(5)高性能高、可靠的缓存集群下面对于上述几种缓存策略的实际应用的适用情况以及优缺点进行详细分析,当然并没有一个缓存的教条存在,有的只是参考案例,对于具体的应用来讲要具体分析。(1)单机缓存单机缓存也就是 WEB 应用和缓存是同一个应用,也就是最简单的缓存策略,大家在程序中使用的 static 的 HashMap、List 这些都可以算作缓
2、存的范畴。比较有代表性的单机缓存有 OSCache、Ehcache。OSCache 是个一个广泛采用的高性能的 J2EE 缓存框架,OSCache 能用于任何 Java 应用程序的普通的缓存解决方案。OSCache 有以下特点:缓存任何对象,你可以不受限制的缓存部分 jsp 页面或 HTTP 请求,任何 java 对象都可以缓存。Ehcache 来源于 Hibernate,是一个纯 java 的在进程中的缓存,它具有以下特性:快速,简单,为 Hibernate2.1 充当可插入的缓存,最小的依赖性,全面的文档和测试。对于 WEB 应用程序采用单机缓存策略可以大大提高系统的吞吐量。笔者曾经在一个
3、电信的 WEB 应用程序中使用 OSCache 来缓存数据,将主页面以及菜单对应的页面级别的数据缓存起来,以及在不是通过“more”方式查询出来的数据也就是说在页面中可以直接访问的数据都缓存起来,定时进行更新,对于系统的性能大大提升,对于数据库的访问量大大的减少了,主页面可以达到 1000 个并发。单机缓存的读写访问在所有的缓存策略中的性能最高,代价最小,在数据量不大并且在并发性能要求不是很高的情况下是非常合适的。单机缓存存在的问题是,可以缓存的数据量受到限制,并且它和应用部署到同一个服务器上彼此竞争消耗系统资源,无法扩展,并且在WEB 访问量上涨,WEB 需要集群部署的时候在所有的集群中都需
4、要保存同样规模的缓存数据,不能彼此共享。(2)简单分布式缓存简单的分布式缓存有两种代表性的部署方式。1、单实例的 memcached 部署方式在讲到缓存的时候,memcached 可能就无人不知啦,可以考虑单独部署一台 memcached 服务器,作为中央缓存服务器,多个应用以都分别以客户端的方式通过 memcached 服务器存取缓存数据,这样就避免了单机缓存方案中同样的数据需要在多个应用服务器中重复缓存的弊端。2、OSCache 和 Enhence 的分布式缓存OSCache 和 Enhence 可以使用 JGroups 进行缓存数据的广播,实现自动同步多个应用的缓存数据,在一个应用更新缓
5、存之后该应用自动广播该缓存信息到其它应用的缓存,其它应用不需要再次访问数据库来再次加载数据更型缓存。上述两种简单的分布式缓存策略相对于单机缓存来讲存在较大进行,尤其是使用 memcached 的方式,由于 memcached 缓存的性能非常高,分离了应用和缓存服务器,可以在集群部署 WEB 应用的时候大大提高系统的吞吐量。至于 OSCache 和 Enhence 方式实现的分布式缓存则还是基于单机缓存的方式,只不过是优化了缓存数据的存放性能,基本限制没有得到改变。(3)使用复制方式的缓存集群在满足如下几个条件的时候可以使用复制方式的缓存集群策略:1、需要缓存的数据量不是特别大,没有超过单机的限制2、需要极高的读取缓存的性能3、缓存中的数据变更的频率不是特别大对于满足上述 3 点要求的 WEB 应用,我们可以采用复制方式的缓存集群来提高系统的性能。通常的方式为使用虚拟 IP 的方式将多个缓存实例作为一个集群,该集群对于客户端应用来说是透明的,在一个缓存服务器宕机的时候,对于客户端来说没有影响。当一个应用更新了缓存的时候,该缓存实例通知集群中的其他缓存服务器,由缓存集群自动完成各个缓存服务器中缓存数据的同步。(4)使用散列方式的缓存集群在满足如下几个条件的时候可以使用散列方式的缓存集群策略:1、需要缓存的数据量特别巨大2、需要极高的读取缓存的性能3、允许单点故障