多级缓存实例

一个使用了Redis集群和其他多种缓存技术的应用系统架构。

 

 

首先用户的请求被负载均衡服务器分发到Nginx上,此处常见的负载均衡算法有轮询和一致性哈希,轮训可以使服务器的请求更加均衡,而一致性哈希可以提高Nginx应用的缓存命中率。

 

接着,Nginx服务器读取本地缓存,实现本地缓存的方式可以是lua shared dict,或者面向磁盘或内存的Nginx proxy cache ,以及本地的Redis实现,如果本地缓存命中则直接返回。Nginx服务器使用本地缓存可以提升整体的吞吐量,降低后端的压力,尤其应对热点数据的反复读取非常有效。

 

如果Nginx的本地缓存没有命中,就会进一步读取相应的分布式缓存——Redis分布式缓存的集群,可以考虑使用主从架构来提升性能和吞吐量,如果分布式缓存命中则直接返回相应数据,并回写到Nginx服务器的本地缓存中。

 

如果Redis分布式缓存也没有命中,则会回源到Tomcat集群,在回源到Tomcat集群时也可以使用轮询和一致性哈希作为负载均衡算法。当然Redis缓存没有命中Nginx服务器还可以再一次尝试读主Redis缓存集群,目的是防止从Redis集群有问题时可能发生的流量冲击。

 

在Tomcat集群应用中,首先读取本地平台级缓存,平台级缓存包括:Ehcache、Cacheonix、Voldemort等,如果平台级缓存命中则直接返回,并会同步写到主Redis集群中,然后在同步到从Redis集群,此处可能存在多个Tomcat实例同时写主Redis集群的情况,可能会造成数据错乱,需要注意缓存的更新机制和原子操作。

 

如果所有缓存都没有命中,系统就只能查询数据库或者其他相关服务获取相关数据并返回,当然数据库也是有缓存的。

 

整体来看这是一个使用了多级缓存的系统,Nginx服务器的本地缓存解决了热点数据的缓存问题,Redis分布式缓存集群解决了访问回源率的问题,Tomcat集群使用的平台级缓存防止了相关缓存失效崩溃之后的冲击,数据库缓存提升数据库查询时的效率。

 

                                                                                                                   ——出自《深入分布式缓存从原理到实践》

 

 

 

展开阅读全文
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值