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

news/2024/12/11 14:49:11/

缓存的缘起

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

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

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

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

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

应用缓存的原理:

与处理器和存储器的处理时间不匹配类似.
处理请求和响应不匹配的本质仍然是处理时间不匹配。

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

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

缓存的分类

根据缓存所处的位置、担任的角色不同,缓存具有不同的分类方法。
根据缓存在应用中的位置,可以分为浏览器缓存、客户端缓存、服务器缓存、数据库缓存等。
根据缓存的放置方式,可以分为本地缓存、分布式缓存等。
根据缓存的生命周期,有不过期缓存和带过期时间缓存。

几点注意

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

数据不一致

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

热点问题

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

缓存雪崩、穿透、击穿

缓存雪崩,是指大量的缓存(不同缓存key)同时大面积失效,导致缓存无效从而导致后端数据库系统的压力过大而崩溃。
缓存穿透,是指请求到空数据,缓存和数据库中都不存在,每次都会落到数据库查询。
缓存击穿,大量请求命中不到缓存而查到数据库,而这些请求请求的是同一条数据。这一点与缓存雪崩有显著差别。

小结

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


http://www.ppmy.cn/news/1554242.html

相关文章

深入浅出特征的维度与个数【大白话版】

一、矩阵中的基本概念 在机器学习和深度学习中,数据通常以矩阵的形式表示: 行(Rows):代表 样本数量(data points),也就是点云中的点数列(Columns)&#xff…

dolphinScheduler 任务调度

#Using docker-compose to Start Server #下载:https://dlcdn.apache.org/dolphinscheduler/3.1.9/apache-dolphinscheduler-3.1.9-src.tar.gz $ DOLPHINSCHEDULER_VERSION3.1.9 $ tar -zxf apache-dolphinscheduler-"${DOLPHINSCHEDULER_VERSION}"-src.t…

驱动---1.DAC8552实现三角波输出

最近开始进行新项目的研发,考虑用DAC做一个前级输出,选择了DAC8552这个器件的一个模块,用了野火的指南者做主控,芯片是STM32F103VET6,主频是72MHz。 一、器件手册重要信息提取 1.DAC8552具有十六位的分辨率、双通道输…

猫与土豆:谨慎的饮食考量

在宠物饲养日益精细化的今天,猫主人常常会思考各种食物是否适合自家猫咪食用,土豆便是其中之一。 土豆本身富含碳水化合物、维生素 C、钾等营养成分。对于人类而言,土豆是常见且重要的食物来源。然而,猫作为严格的肉食动物&#…

【opencv入门教程】14. 矩阵乘除运算

文章选自: 一、函数multiply、divide //乘法 CV_EXPORTS_W void multiply(InputArray src1, InputArray src2,OutputArray dst, double scale 1, int dtype -1); brief 计算两个数组的每个元素的按比例缩放乘积 note 当输出数组的深度为 CV_32S 时,…

django项目部署 uwsgi的一些知识

前端请求 127.0.0.1:8000/api 是通过 HTTP 协议与后端通信的。在这种情况下,不能直接使用 Unix Socket 文件,因为浏览器或前端程序无法直接与 Unix Socket 文件通信,它们只能通过 HTTP 或 HTTPS 与后端进行通信。 为什么不能用 Unix Socket&…

【kafka】kafka安装(ubuntu+jdk+zookeeper)

前置安装 1.jdk安装与环境变量配置 安装 OpenJDK 21或者其他版本 sudo apt update sudo apt install openjdk-21-jdk使用 readlink 命令查找 java 的路径 readlink -f $(which java)复制 永久设置JAVA_HOME # 粘贴路径/usr/lib/jvm/java-21-openjdk-amd64 echo "e…

vue3-canvas实现在图片上框选标记(放大,缩小,移动,删除)

双图版本(模板对比) 业务描述:模板与图片对比,只操作模板框选的位置进行色差对比,传框选坐标位置给后端,返回对比结果显示 draw.js文件: 新增了 createUuid,和求取两个数组差集的方…