如何避免缓存击穿?超融合常驻缓存和多存储池方案对比
作者:SmartX 解决方案专家 钟锦锌
很多运维人员都知道,混合存储介质配置可能会带来“缓存击穿”的问题,尤其是大数据分析、数据仓库等需要频繁访问“冷数据”的应用场景,缓存击穿可能会更频繁地出现,影响业务运行。除了更换为全闪存储,目前一些主流厂商可通过“常驻缓存”和“多存储池”这两种技术方案来避免缓存击穿,帮助用户降低成本、提升业务连续性。这两种方案有什么区别?哪个方案更有优势?以下,我们将深入解读常驻缓存和多存储池如何避免缓存击穿,以及它们在成本、性能和管理方面的优劣势。如您有更多观点补充,欢迎在评论区留言。
重要结论
- 常驻缓存和多存储池方案对缓存击穿的应对思路不同,实际效果也会有些差异。
- 多存储池可确保全闪业务和混闪业务的充分隔离,在性能要求苛刻的业务场景可能更具优势,但这类场景在实际部署时更偏向采用性能相同但可用性更高的多集群(全闪集群+混闪集群)建设方案。
- 多存储池方案整体优势不明显,而常驻缓存方案在成本上有较明显的优势,且管理更加简单、通用性更强。
点击下方链接下载《超融合技术原理与特性解析合集》,通过三册电子书,了解更多超融合技术知识与产品性能。
SmartX 超融合技术原理与特性解析合集(一)虚拟化与存储https://mobile.smartx.com/p/7d3913
SmartX 超融合技术原理与特性解析合集(二)管理与运维https://mobile.smartx.com/p/8cb16
SmartX 超融合技术原理与特性解析合集(三)全栈能力https://mobile.smartx.com/p/73d10
为什么会出现缓存击穿?
在集中式存储、分布式存储或者超融合基础架构的使用场景中,很多用户都会配置混合存储介质。混合介质存储是指配置固态硬盘(SSD)作为缓存加速 I/O 读写、配置机械硬盘(HDD)作为容量空间,形成“层次存储”以降低存储的整体成本(相比全部使用 SSD 作为存储介质的全闪方案)。
其中,“层次存储”的最常见的数据分层策略是:新写入或经常访问的数据会优先存放在高性能介质(SSD)中,而存在时间较长或不经常访问的数据会被交换到低成本存储介质(HDD)中。
通常的情况下,新产生的数据短时间内被重复访问的概率也比较高,属于热数据;而生成时间比较长的数据通常被再次访问的几率比较低,属于冷数据。当业务系统运行一段时间后,企业中的冷数据会明显多于热数据。因此,这种情况下系统通过 SSD 缓存满足少量热数据的快速响应需求,并将大量冷数据存放在大容量、低成本的 HDD 的机制是有效的。但在一些特殊场景下,这样的缓存机制会受到挑战:
- 当系统缓存空间不足,可能导致数据被迫直接写入 HDD。
- 当冷数据从 SSD 交换到 HDD 后,系统再次请求读取或修改 HDD 上的数据。
上述两种情况都有可能引起”缓存击穿“ 的情况发生:由于数据需要直接读/写 HDD 才能完成 I/O 操作,对应的 I/O 延时将大幅度上升;当击穿的情况频繁发生,存储的整体性能也会出现较大程度的下降。
另外,现实中有部分业务场景并不遵循上述的冷、热数据访问规律,从而特别容易触发“缓存击穿”。如:
- 数据仓库系统:多个数据库服务器会定期将最新的数据同步至数据仓库,属于频繁覆盖写的场景;当中会存在大量“冷数据”需要被读取,并在修改后重新写入存储。
- 大数据分析系统:大数据分析业务场景经常需要遍历访问所有数据(不区分冷、热),甚至更偏重历史数据的访问,因而产生大量的“冷数据”的访问需求。
企业如果将大数据分析、数据仓库等业务数据存放在“层次存储”中,频繁的“缓存击穿”可能会造成业务系统响应变慢、处理能力急速下降等问题。很明显,通过单一的缓存机制是无法满足此类需求的(业务实际上需要全闪存储,才能保证访问所有数据都能保持一致的响应速度)。
不过,仅为少数几个业务系统而更换为全闪存储,对用户成本又会造成较大的挑战。能否既兼顾存储成本,又能满足个别业务系统的性能要求(不触发击穿)?答案是可以的,针对用户的需求,不同厂商提供的方案不尽相同,但大体可分为两个类别:在混合存储介质部署基础上增加常驻缓存(Pin SSD)或多存储池的支持。
常驻缓存 vs 多存储池:解决思路的区别
常驻缓存
常驻缓存功能是在保留原有的缓存机制不变的前提下,可动态地将部分缓存空间(SSD)划分给特定的业务系统作为容量层使用,从而使得处于常驻缓存中的数据不再被交换到低性能硬盘(HDD),并确保业务系统不会发生“缓存击穿”导致性能下降的情况发生。也可以理解为,常驻缓存功能可为特定业务提供全闪的存储空间;因此,除了避免缓存击穿,常驻缓存功能还可为关键业务提供稳定的高性能、低时延。
多存储池
多存储池是指在同一个集群内根据存储介质设备的类型、性能,将存储资源划分为多个池;每个存储池可以对应不同的存储介质。如:集群中选择一定数量的 SSD 组建全闪存储池,另外一部分 SSD 和 HDD 则组建混合存储池。多存储池功能使得同一个集群里面可同时存在全闪和混闪存储池,用户可以根据业务对存储的性能需求,决定业务数据放置到哪个存储池更合适。
常驻缓存 vs 多存储池:成本、性能与管理的对比分析
常驻缓存和多存储池两种方案都可以解决因特定业务产生的“缓存击穿”问题,但两者解决问题的思路是不同的,实际效果会有一定差异。下面我们将以超融合基础架构场景为例,对比常驻缓存与多存储池方案在成本、性能和管理方面的优劣势。
硬件成本对比
常驻缓存和多存储池方案共同的需求出发点就是降低存储成本,因此硬件成本是一个核心关注点。
硬件要求对比
多存储池:
- 构建多存储池通常需要以主机为单位,每个存储池至少包含 3 台主机,组建 2 个存储池则至少需要 6 台主机。对于小规模起步的用户有一定的成本压力。
- 多存储池要求全闪池的每个主机至少包含 2 块 SSD;而混闪池主机至少包含 2 块 SSD。
常驻缓存:
- 启用常驻缓存对最低主机数量没有特定要求,与普通集群要求一致(最小集群规模 3 台主机)。
- 启用常驻缓存功能,理论上不需要增加 SSD 的数量,只需要确保缓存空间足够(同时满足常驻缓存和常规缓存的空间需求)。
模拟配置对比
我们根据以下需求进行模拟配置:
- 数据仓库虚拟机(全闪)的容量需求为 20TB,其他普通业务虚拟机(混闪)的容量总需求为 120 TB 。
- 服务器参考规格:2U 机箱,前面板满配 12 个硬盘插槽。
多存储池模拟配置:
常驻缓存模拟配置(3 节点集群满足业务需求):
常驻缓存模拟配置(6 节点集群提供更多容量空间):
从模拟配置对比中可以看到:
- 多存储池的最小规模需要 6 台服务器,相比常驻缓存需要额外增加 3 台服务器硬件成本。
- 集群规模同样是 6 台服务器的情况下,常规缓存方案可提供更多的可用存储空间。
性能对比
多存储池:
- 多存储池方案中,全闪池的 SSD 与混闪池的缓存 SSD 是隔离的,性能上不会互相影响。
- 当全闪存储池的 SSD 数量足够多时,性能上限会比混闪池更高,但造价也会相应地增加。
常驻缓存:
- 常驻缓存与普通缓存共享一组 SSD,有一定几率发生资源争抢的情况。
从性能上对比,多存储池方案中不同的存储池之间是天然隔离的,可以确保全闪池的业务不会受到混闪池的影响,相对常驻缓存在一定优势;而常驻缓存存在缓存盘资源争抢的可能,但也可以通过存储 QoS* 和扩展缓存盘来消除资源争抢的风险。
*存储 QoS:指可以为虚拟机整机或者指定的虚拟卷设置存储 IOPS 或者带宽上限,避免单一应用占用过多性能资源,可一定程度上避免资源争抢的情况发生。
管理难度对比
多存储池:
由于全闪池与混闪池之间是完全隔离的,数据无法实现共享访问。多个存储池在超融合环境下会带来一些限制。
- 虚拟机存储位置:当集群存在多个存储池,用户需要设置一些策略去明确定义哪些业务或者虚拟机放置到哪一个存储池当中;当业务虚拟机的需求发生变化时(如最初在混闪池,后续业务规模、重要性提升,要求转移到全闪池运行),需要人工介入,执行存储迁移操作。
- 虚拟机在线迁移:在全闪存储池里面的虚拟机无法通过主机在线迁移的方式移动到混闪存储池所在的主机。如果要实现上述的迁移目标,需要同时执行存储数据和主机的迁移,迁移过程会涉及大量的数据复制,使得迁移时间变得很长,同时对网络带宽占用也比较高。
因此,相比普通集群,多存储池的管理复杂度更高。
常驻缓存:
- 启用常驻缓存后,统一存储池的属性没有改变,集群内虚拟机在任何情况下执行主机在线迁移操作,都不需要进行数据迁移,迁移速度快,不会大量占用网络带宽,并且支持并发迁移操作。
- 用户不需要刻意区分虚拟机的存储位置,甚至可以在虚拟机运行一段时间后再决定是否启用常驻缓存。
因此,常驻缓存相对多存储池有更大的灵活度,而且不会增加管理的难度。
小结
根据上述对比可以看出,多存储池可确保全闪业务和混闪业务的充分隔离,在对性能要求比较苛刻的业务场景下可能更具优势;但这种情况下多存储池的节点规模需要在 6 个或以上,同样的节点规模已经满足组建多集群(全闪集群+混闪集群)条件,此时多集群与多存储池在性能上是基本一致的,但多集群的可用性会更强。因此,多存储池的整体优势并不明显。而常驻缓存方案在成本上有较明显优势,且管理更加简单,通用性更强。
目前,SmartX 超融合 6.1 和分布式存储 5.6 都支持用户开启常驻缓存功能,避免缓存击穿的同时为关键业务系统提供稳定的高性能、低时延保障。SMTX ZBS 5.6 还采用了全新的分层模式,用户可以使用纠删码等依赖存储分层模式的功能,同时读写缓存分区比例可以动态进行调整,优化缓存空间利用率并避免缓存击穿的风险,灵活应对不同业务 I/O 的性能需求。
您还可下载《超融合技术原理与特性解析合集》系列电子书,了解更多超融合虚拟化、存储、管理、运维、网络与安全、容器管理等方面的技术解读!
SmartX 超融合技术原理与特性解析合集(一)虚拟化与存储https://mobile.smartx.com/p/7d3913
SmartX 超融合技术原理与特性解析合集(二)管理与运维https://mobile.smartx.com/p/8cb16
SmartX 超融合技术原理与特性解析合集(三)全栈能力https://mobile.smartx.com/p/73d10
相关文章:

如何避免缓存击穿?超融合常驻缓存和多存储池方案对比
作者:SmartX 解决方案专家 钟锦锌 很多运维人员都知道,混合存储介质配置可能会带来“缓存击穿”的问题,尤其是大数据分析、数据仓库等需要频繁访问“冷数据”的应用场景,缓存击穿可能会更频繁地出现,影响业务运行。除…...

口语笔记——祈使句用法
省略主语 (You give me) a cup of tea, please. 一杯茶(You wait for) another minute. 两等一分钟(You) keep quiet. 保持安静give me a break. 饶了我吧take your hand off. 把你的手拿开take this thing away 把这东西拿开never talk to strangers. 永远不要跟陌生人说话Do…...

SQL连续登录问题(详细案例分析)
如果要统计用户活跃度,那就涉及连续登录问题,接下来将举一个简单的例子来详细说明这个问题: 一、创建一些模拟数据 一些测试数据如下: deviceid1,2022-10-26,2022-10-26,2022-11-01 deviceid1,2022-10-26,2022-11-03,2022-11-0…...

Next.js 系统性教学:深入理解缓存与数据优化策略
更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 前言 1. 缓存的基本概念 1.1 缓存的作用 1.2 Next.js 中的缓存策略 2. Next.js 的缓存机制 2.1 请求记忆化(Request Memoization) 2.1.1 什…...

【PyTorch】(基础六)---- 搭建卷积神经网络
关于神经网络中激活函数、卷积层、池化层等底层原理,我不会在本文中详解,但是关于pytorch中如何使用对应的方法实现这些层的功能我会进行解释,如果你想要了解一些关于神经网络底层的知识,我十分推荐你去看一下吴恩达老师的深度学习…...

【JAVA项目】基于ssm的【美食推荐管理系统】
【JAVA项目】基于ssm的【美食推荐管理系统】 技术简介:采用JSP技术、B/S架构、SSM框架、MySQL技术等实现。 系统简介:美食推荐管理系统,在系统首页可以查看首页、热门美食、美食教程、美食店铺、美食社区、美食资讯、我的、跳转到后台等内容。…...

adb 常用命令笔记
adb connect <ip> #连接指定ip adb disconnect <ip> #断开连接指定ip adb devices #查看连接中的设备 adb install <flie> #安装apk adb uninstall <packageName> #卸载app adb -s install <flie> #指定设备安装 adb shell pm list package…...

[代码随想录Day32打卡] 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
理论基础 题型 动归基础(这一节就是基础题)背包问题打家劫舍股票问题子序列问题 动态规划五部曲 确定dp数组及其下标的含义确定递推公式dp数组如何初始化遍历顺序打印dp数组 509. 斐波那契数 简单~ dp数组及下标含义: dp[i]表示第i各斐…...

android NumberPicker隐藏分割线或修改颜色
在 Android 中,可以通过以下几种方法隐藏 NumberPicker 的分割线: 使用 XML 属性设置 在布局文件中的 NumberPicker 标签内添加 android:selectionDividerHeight"0dp" 属性,将分割线的高度设置为 0,从而达到隐藏分割线…...

7-2 二分查找
输入n值(1<n<1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。 输入格式: 输入共三行: 第一行是n值࿱…...

mid360使用cartorapher进行3d建图导航
1. 添加urdf配置文件: 添加IMU配置关节点和laser关节点 <!-- imu livox --> <joint name"livox_frame_joint" type"fixed"> <parent link"base_link" /> <child link"livox_frame" /> <o…...

Ubuntu安装grafana
需求背景:管理服务器,并在线预警,通知 需求目的: 及时获取服务器状态 技能要求: 1、ubuntu 2、grafana 3、prometheus 4、node 步骤: 一、grafana安装 1、准备系统环境,配置号网络 2、…...

Java版-图论-最短路-Floyd算法
实现描述 网络延迟时间示例 根据上面提示,可以计算出,最大有100个点,最大耗时为100*wi,即最大的耗时为10000,任何耗时计算出来超过这个值可以理解为不可达了;从而得出实现代码里面的: int maxTime 10005…...

可视化建模以及UML期末复习篇----UML图
这是一篇相对较长的文章,如你们所见,比较详细,全长两万字。我不建议你们一次性看完,直接跳目录找你需要的知识点即可。 --------欢迎各位来到我UML国! 一、UML图 总共有如下几种: 用例图(Use Ca…...

HTML常见标签列表,涵盖了多种用途的标签。
文档结构标签 <!DOCTYPE html>:声明文档类型,告诉浏览器使用HTML5标准。<html>:HTML文档的根元素。<head>:包含文档的元数据(meta-data),如标题、字符集、样式表链接、脚本等…...

FPGA 16 ,Verilog中的位宽:深入理解与应用
目录 前言 一. 位宽的基本概念 二. 位宽的定义方法 1. 使用向量变量定义位宽 ① 向量类型及位宽指定 ② 位宽范围及位索引含义 ③ 存储数据与字节数据 2. 使用常量参数定义位宽 3. 使用宏定义位宽 4. 使用[:][-:]操作符定义位宽 1. 详细解释 : 操作符 -: 操作符 …...

vue-生命周期
Vue 的生命周期是指 Vue 实例从创建到销毁期间经历的一系列阶段。每个阶段都有相应的钩子函数(Lifecycle Hooks),允许开发者在这些关键时刻执行自定义逻辑。 一、钩子函数 1. 创建阶段 beforeCreate 在实例初始化之后,数据观测 …...

浅谈Kubernetes(K8s)之RC控制器与RS控制器
1.RC控制器 1.1RC概述 Replication Controller 控制器会持续监控正在运行的Pod列表,并保证相应类型的Pod的数量与期望相符合,如果Pod数量过少,它会根据Pod模板创建新的副本,反之则会删除多余副本。通过RC可实现了应用服务的高可用…...

本题要求采用选择法排序,将给定的n个整数从大到小排序后输出。
#include <stdio.h> #define MAXN 10 int main() { int i, index, k, n, temp; int a[MAXN]; scanf("%d", &n); for (i 0; i < n; i) { scanf("%d", &a[i]); } // 外层循环控制排序轮数,一共需要n-1轮 for (k 0; k < n…...

Linux: glibc: 频繁调用new/delete会不会导致内存的碎片
最近同事问了一个问题:频繁调用new/delete会不会导致内存的碎片。 下面是我想到的一些回答, glibc的内存处理机制,是在释放的时候会自动将小块内存整合成大块内存,为接下来满足大块的需求的可能。而且程序也不是一直占着内存不释放(如果是一直不释放,要考虑是不是内存泄漏…...

量子变分算法---损失函数
引子 关于损失函数,我们知道在强化学习中,会有一个函数,用来表示模型每一次行为的分数,通过最大化得分,建立一个正反馈机制,若模型为最优则加分最多,若决策不佳则加很少分或者扣分。而在神经网络…...

计算机的性能评估
目录 计算机的性能评估 确定性能指标 考虑通讯因素 考虑机器过热因素 综合评估模型 动态评估与调整 计算机的性能评估 在分布式计算机系统中,综合考虑各种因素来评估性能是一个复杂但重要的问题。以下是一种可能的方法来综合考虑评估分布式计算机性能,动态地考虑实际情…...

大数据之国产数据库_OceanBase数据库002_在centos7.9上_安装部署OceanBase001_踩坑指南_亲测可用
部署前最好看一下,部署前的要求, 主要是系统 以及系统内核版本,还有比如清理一下缓存等,按照做一做. 这些都是前置条件. 清一下缓存. 也就是说官网给的前置的条件,都要根据说明去执行一遍,如果不执行可能后面安装会报错. 然后用户最好也去创建一个用户. 注意前置...

【ETCD】【源码阅读】深入解析 EtcdServer.run 函数
EtcdServer.run 是 etcd 的核心运行逻辑之一,负责管理 Raft 状态机的应用、事件调度以及集群的核心操作。本文将逐步从源码层面分析 run 函数的逻辑,帮助读者理解其内部机制和设计思想。 函数签名与关键职责 func (s *EtcdServer) run() {... }关键职责…...

springboot/ssm校内订餐系统Java代码web项目美食外卖点餐配送源码
springboot/ssm校内订餐系统Java代码web项目美食外卖点餐配送源码 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库ÿ…...

floodfill算法
目录 什么是floodfill算法 题目一——733. 图像渲染 - 力扣(LeetCode) 题目二——200. 岛屿数量 - 力扣(LeetCode) 题目三——695. 岛屿的最大面积 - 力扣(LeetCode) 题目四—— 130. 被围绕的区域 …...

【JAVA】六亮增加贴
James Gosling(詹姆斯.高斯林) Java 语言源于 1991 年 4 月,Sun 公司 James Gosling博士 领导的绿色计划(Green Project) 开始启动,此计划最初的目标是开发一种能够在各种消费性电子产品(如机顶盒、冰箱、收音机等)上运行的程序…...

git提交时出现merge branch main of xxx
git提交时出现merge branch main of xxx 原因: 1、同事commit了一个修改A,push到remote 2、我把这个修改直接pull了下来(pull是fetchmerge的操作,自动合并到本地workspace) 3、同事因为后续的commit有冲突,…...

lstm 输入数据的形状是怎么样的,他有两种输入方式,通过参数 batch_first来设置 默认是False
lstm 输入数据的形状是怎么样的,他有两种输入方式,通过参数 batch_first来设置 默认是False 当batch_firstFalse时,LSTM输入的数据形状通常是一个三维张量,其维度顺序为[sequence_length, batch_size, input_size]。下面是对这些维…...

Apache Doris 数据类型
Apache Doris 已支持的数据类型列表如下: 数值类型 类型名存储空间(字节)描述BOOLEAN1布尔值,0 代表 false,1 代表 true。TINYINT1有符号整数,范围 [-128, 127]。SMALLINT2有符号整数,范围 …...