【系统设计】高可用之缓存基础

缓存的缘起

使用缓存的主要原因包括提高系统性能、降低数据库负载、提升用户体验和保证系统可用性。‌

在计算机体系结构中,由于处理器和存储器的处理时间不匹配,在处理器和一个较大较慢的设备之间插入一个更小更快的存储设备(如高速缓存)成为现代设计和实现的一个普遍观念。下图是一个典型的存储器层次结构(来自《深入理解计算机系统·第三版》 ):

进入互联网时代后,基于网络的分布式系统逐步成为主流。互联网应用的用户多、访问量大,用户对系统响应时间感知很敏感,因此对系统提出来新的要求。

与CPU的时间相比,单个用户要求的响应时间很长,如果是人工操作,可能到百毫秒级即可;如果是服务调用,可能要求在毫秒级。数量庞大的请求量则对系统的处理能力提出了新的挑战,也产生了众多的解决方案。

在这些解决方案中,主流的方案之一是使用缓存。根据应用服务功能的特性,提供各种各样的缓存机制。

应用缓存的原理:

与处理器和存储器的处理时间不匹配类似.

处理请求和响应不匹配的本质仍然是处理时间不匹配。

造成响应时间长的典型原因有以下几种:

  • 业务逻辑的复杂性增加了响应的时间;
  • 物理资源的限制引起资源的竞争、排队,从而延长了响应时间;
  • 访问量的突发性,加剧了上述问题的发生概率;
  • 利用上述特性进行主动/恶意攻击,加剧了上述问题发生几率。

缓存的分类

根据缓存所处的位置、担任的角色不同,缓存具有不同的分类方法。

根据缓存在应用中的位置,可以分为浏览器缓存、客户端缓存、服务器缓存、数据库缓存等。

根据缓存的放置方式,可以分为本地缓存、分布式缓存等。

根据缓存的生命周期,有不过期缓存和带过期时间缓存。

几点注意

由于增加了缓存这一中间交互,不可避免的增加了复杂度,也就引出了一些相关的问题点需要注意。

数据不一致

最典型的,是缓存数据和数据库的数据不一致。

其次,如果是分布式缓存,如果存在节点异常,可能会存在多个节点的数据不一致,有脏数据。

热点问题

对于突发事件、重大热点、秒杀、抢票等类似问题,如果采用缓存,相应的数据就会变成热点(hotkey),需要避免热点问题带来的系统崩溃。

缓存雪崩、穿透、击穿

缓存雪崩,是指大量的缓存(不同缓存key)同时大面积失效,导致缓存无效从而导致后端数据库系统的压力过大而崩溃。

缓存穿透,是指请求到空数据,缓存和数据库中都不存在,每次都会落到数据库查询。

缓存击穿,大量请求命中不到缓存而查到数据库,而这些请求请求的是同一条数据。这一点与缓存雪崩有显著差别。

小结

本文根据缓存的来源,简要的介绍了缓存的来源、分类和注意事项,便于对缓存有个概念上的了解。在后续内容将会介绍具体实践内容,以便于更细致的了解。

相关推荐
Wx-bishekaifayuan10 小时前
springboot陨石鉴收系统96265-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·spring·课程设计
code_slave(码畜)10 小时前
微服务架构落地:基础服务 —— 报表服务(上篇:定位、边界与整体架构)
java·spring boot·spring cloud·微服务·架构
不灭的黄金瞳12310 小时前
Java实现简易图书管理系统
java·intellij-idea
重生之小比特10 小时前
【C++进阶】02 Linux基本指令
java·数据库·c++
Wang's Blog10 小时前
Java 项目实战: 外卖平台优化-Nginx常用命令与环境变量配置
java·网络·nginx
sp42a10 小时前
Java 加解密组件再设计
java
FYKJ_201010 小时前
springboot家政服务平台66766-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·spark·课程设计
caoerzhong10 小时前
开源 WMS 合规交付实务:JeeWMS 仓库管理系统在 GPL-3.0 下的源码台账与交付清单
java·开源
x-Achan11 小时前
Redis实现方案:更新策略、穿透、雪崩、击穿、工具封装
java·spring boot·redis·spring·bootstrap·mybatis
蜗牛互联网11 小时前
Java 17调用gpt-transcribe实现会议录音转写与术语提示
java·人工智能·后端