【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)

简介: 【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)

多级缓存设计案例

从用户发出请求到最底层的数据库,实际上会经过多个节点。因此,在整个链路上都可以设置缓存。根据缓存最近原则,将缓存放置在离用户最近的位置可以最大限度地提高系统响应效率,并明显提升系统的吞吐量,从而大大降低对后端的压力。

在整个链路流程中,可以添加缓存的地方包括:发起请求时的浏览器/客户端缓存、边缘缓存/CDN、反向代理(如Nginx)缓存、远程缓存、进程内缓存以及数据库缓存。



上面图中是一种常用的服务端多级缓存设计技术方案:

  • 浏览器/客户端缓存:可以通过设置HTTP缓存头来控制客户端的缓存行为,减少发送重复请求的次数。
  • 边缘缓存/CDN:利用内容分发网络(CDN),将静态资源缓存在全球各个边缘节点上,提供更快速的访问速度。
  • 反向代理缓存:配置反向代理服务器(如Nginx)来缓存静态和动态内容,减少请求的转发到后端服务器的次数。
  • 远程缓存:使用分布式缓存系统(如Redis、Memcached等)作为后端服务的缓存层,提高数据访问速度。
  • 进程内缓存:在应用程序内部使用缓存来存储频繁访问的数据,减少对数据库的访问次数。
  • 数据库缓存:使用数据库自身的缓存机制(如MySQL查询缓存、Redis作为数据库缓存)来加速查询结果的返回。

通过合理地设计和配置多级缓存,可以提升系统性能和吞吐量,实现更高效的请求处理和数据访问。

多级缓存处理流程

多级缓存模式的处理主要流程以及整体的缓存设计如下:



  1. 请求首先到达Nginx,Nginx首先检查本地缓存,如果存在缓存数据则直接返回。为了实现负载均衡和分布式路由策略,我们采用轮询方式来分布访问压力,或者可以考虑在流量达到一定阈值时切换到一致性哈希策略,以提高缓存命中率。需要注意的是,一致性哈希策略可能会导致单点压力过大的问题。
  2. 如果Nginx缓存未命中,则查询分布式缓存。为了实现高可用性和提高系统吞吐量,我们通常采用主从结构的远程分布式缓存。在这一步中,我们将读取从缓存服务集群中的数据,并在命中缓存时返回数据。
  3. 如果分布式缓存未命中,则查询应用本地缓存(堆内或堆外缓存)。同样,我们可以使用轮询或一致性哈希作为路由策略。如果命中了本地缓存,则返回数据,并将数据写回Nginx缓存中。为了避免由于缓存服务故障而导致数据库过载,我们可以尝试读取主缓存服务。
  4. 如果所有缓存均未命中,则查询数据库并返回数据,并异步将数据写回主缓存和应用本地缓存。主缓存通过主从同步机制将数据同步到从缓存服务集群中。在这一步中,需要注意多个应用实例异步写入主缓存时可能会导致数据乱序的问题。

针对以上多级缓存设计,可以通过引入热点发现系统来发现非预期的热点数据,利用flume订阅Nginx日志,然后通过消息进行消费,最后通过storm等实时计算框架进行热点数据的统计,当监控发现到热点数据,将其推送到各个缓存节点上

缓存意义及总结

为了追求高性能,开发者经常使用缓存作为解决系统性能问题的方法。然而,如果缓存使用不当,它可能会适得其反,成为系统的毒药,增加了维护成本和复杂度。缓存并非一刀切的解决方案,但在高并发情况下,通过缓存可以快速响应请求,提升系统吞吐量和支撑更高的并发用户数。在现实生活中,使用缓存来优化系统性能的例子很多。

即使没有机会挑战高并发互联网架构和大量访问流量的情况,我们也应该深入分析通用的技术方案。尤其在缓存使用中,高并发带来的数据一致性问题有许多意想不到的情况,这些分析是开发者建立方法论和培养思路的重要训练途径。学习每种技术组件时,通用解决方案是经过历史经验积累的智慧,需要我们细心品味和应用。

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
1天前
|
分布式计算 Hadoop 网络安全
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
8 1
|
1天前
|
存储 机器学习/深度学习 缓存
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
7 1
|
19天前
|
网络协议 安全 Java
分布式(基础)-RMI的原理
分布式(基础)-RMI的原理
|
2月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
85 2
基于Redis的高可用分布式锁——RedLock
|
2月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
3月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
23小时前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
11 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
|
1天前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
13 4
|
1天前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
13 3
|
3天前
|
存储 NoSQL 关系型数据库
【redis】认识redis和分布式系统
【redis】认识redis和分布式系统
13 1