当前位置: 首页 > news >正文

文件系统中元数据的隐患——缓存

        热点文件(尤其是大文件)在查询或下载过程中,涉及大量的元信息访问。如果元信息较大且访问 QPS 较大时,就会导致实例网卡打满、CPU爆表,造成缓存失效(缓存击穿);流量直接打到 DB 上,造成大量读请求超时、连接打满、机器挂掉(服务雪崩)。直接对服务可用性造成打击,一般都是重大事故。

        造成这种结果的本质原因是缓存设计和使用不合理。直接原因是缓存对象指向的文件是热门资源。一般文件系统很少关心文件或者文件对象指向的内容,所以在这类热点发生时往往很被动。需要告警阈值提醒,人工及时介入处理和止损(封禁、扩容)。

        理想的方式是对文件粒度的读访问限流,但是很少这么做,就像普通用户 Windows 系统装防火墙一样...代价大价值很难凸显。比较常用的方法是对缓存下手,业务侵入小,普适性高。

        前提是需要梳理业务逻辑,对目标对象的缓存本身进行分析,哪些情况QPS 达到多少就会有隐患。然后再分析一下可用的方案,一般有三种处理方式:

本地缓存

        在合适的业务节点实例上,申请一定大小的空间用于本地缓存。将需要被缓存的一定大小以上的元数据作为缓存对象。需要自行实现淘汰算法,支持过期时间,支持内容校验。由于流量的负载均衡和随机性,需要埋点查看缓存命中率,估计效果。

        这种方式可以解决集中热点问题,但是无法根治。命中率随着流量随机性的降低而升高,这取决于流量分发层策略和设计。

缓存数据压缩

        一般压缩率可观,但是遇到超大文件仍然无法根本解决问题。

大 key 拆解

        这种需要对缓存数据中的作用和业务需求有全面的分析,分类讨论。抽象出基本信息,多 key信息存储。直接影响是原来获取一次,现在需要获取多次,极端情况下,有长尾请求的 bad case,可以根据具体情况优化逻辑,全局考虑下一般可接受。由于大 key 拆分,需要先改校验规则,再上线新逻辑。

        综上,正对业务使用的大 key缓存需求,本质要求设计者和编程者懂业务,对缓存目标有一定的认知,了解缓存的利弊,使用时根据情况取舍粒度,全面思考和逻辑闭环。      

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • prompt面试三道题
  • mysql的主从复制和读写分离
  • Java二十三种设计模式-代理模式模式(8/23)
  • 正点原子imx6ull-mini移植文件系统
  • 视频加密软件哪个好?怎么进行视频文件加密?
  • pyenv-win | python版本管理,无需卸载当前版本
  • 上传文件传参 pc端vue的formData
  • Jenkins集成JDK、git、gitee、maven逐步实现自动拉取,自动部署,自动启动
  • 重塑生态体系 深挖应用场景 萤石诠释AI时代智慧生活新图景
  • 前端练习<HtmlCSS>——照片墙(附完整代码及实现效果)
  • 嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议数据可视化:智能物流管理系统设计思路流程(附代码示例)
  • hamcrest 断言框架使用示例和优势分析
  • 与Bug较量:Codigger之软件项目体检Software Project HealthCheck来帮忙
  • 【ffmpeg命令入门】视频的旋转与翻转
  • 搭建本地私有知识问答系统:MaxKB + Ollama + Llama3 (wsl网络代理配置、MaxKB-API访问配置)
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • css系列之关于字体的事
  • echarts的各种常用效果展示
  • httpie使用详解
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • javascript 哈希表
  • JavaScript设计模式之工厂模式
  • Linux快速复制或删除大量小文件
  • Magento 1.x 中文订单打印乱码
  • React的组件模式
  • 三栏布局总结
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 移动端高清、多屏适配方案
  • 正则表达式-基础知识Review
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (a /b)*c的值
  • (function(){})()的分步解析
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (笔试题)分解质因式
  • (第一天)包装对象、作用域、创建对象
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .net core使用ef 6
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 指南:抽象化实现的基类
  • .NET 中的轻量级线程安全
  • .Net实现SCrypt Hash加密
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • /*在DataTable中更新、删除数据*/
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [Android Studio] 开发Java 程序
  • [C++基础]-初识模板