web应用系统架构--缓存架构策略
个人对此文章总结: 大面的理解,见解一般性总结;缓存:以内存换取速度;缓存的数据一致性,数据的同步性,文章中提到通过复制共享的方式实现。
缓存的四个阶段: 单机应用级别的缓存、单节点中央缓存、缓存集群(各节点缓存数据一致,可保持数据完整性)、缓存集群(缓存数据分布式存储,提高读取性能);
第五点没有提及,个人猜测是对第四层缓存集群的升级,对每个节点增加备份机,解决当机问题;
摘要:http://hi.baidu.com/javabbs/blog/item/98be6f315cb8d214eac4af1c.html
大型高并发高负载web应用系统架构-缓存架构策略
存在如下几种类型的缓存架构。
(1)单机缓存
(2)简单分布式缓存
(3)使用复制方式的缓存集群
(4)使用散列方式的缓存集群
(5)高性能高、可靠的缓存集群
对于具体的应用来讲要具体分析。
(1)单机缓存
单机缓存也就是WEB应用和缓存是同一个应用,也就是最简单的缓存策略,大家在程序中使用的static的HashMap、List这些都可以算作缓存的范畴。比较有代表性的单机缓存有OSCache、Ehcache。
OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。
Ehcache来源于Hibernate,是一个纯java的在进程中的缓存。
单机缓存的读写访问在所有的缓存策略中的性能最高,代价最小,在数据量不大并且在并发性能要求不是很高的情况下是非常合适的。
单机缓存存在的问题是,可以缓存的数据量受到限制,并且它和应用部署到同一个服务器上彼此竞争消耗系统资源,无法扩展,并且在WEB访问量上涨,WEB需要集群部署的时候在所有的集群中都需要保存同样规模的缓存数据,不能彼此共享。
(2)简单分布式缓存
简单的分布式缓存有两种代表性的部署方式。
1、单实例的memcached部署方式
可以考虑单独部署一台memcached服务器,作为中央缓存服务器,多个应用以都分别以客户端的方式通过memcached服务器存取缓存数据。
2、OSCache和Enhence的分布式缓存
OSCache和Enhence可以使用JGroups进行缓存数据的广播,实现自动同步多个应用的缓存数据,在一个应用更新缓存之后该应用自动广播该缓存信息到其它应用的缓存,其它应用不需要再次访问数据库来再次加载数据更型缓存。
(3)使用复制方式的缓存集群
在满足如下几个条件的时候可以使用复制方式的缓存集群策略:
1、需要缓存的数据量不是特别大,没有超过单机的限制
2、需要极高的读取缓存的性能
3、缓存中的数据变更的频率不是特别大
通常的方式为使用虚拟IP的方式将多个缓存实例作为一个集群,该集群对于客户端应用来说是透明的,在一个缓存服务器宕机的时候,对于客户端来说没有影响。当一个应用更新了缓存的时候,该缓存实例通知集群中的其他缓存服务器,由缓存集群自动完成各个缓存服务器中缓存数据的同步。
(4)使用散列方式的缓存集群
在满足如下几个条件的时候可以使用散列方式的缓存集群策略:
1、需要缓存的数据量特别巨大
2、需要极高的读取缓存的性能
3、允许单点故障