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

热点数据更新优化

热点数据更新优化

  • 热点数据更新带来的问题
  • 问题的方向判断
    • 用户线程被打挂
    • 据库cpu被打挂(优先考虑,80%可能性)
    • redis被打挂
  • 临时解决方案
  • 解决方案
    • 流量控制
    • 热点隔离
    • 数据分批次提交
    • 数据合并后更新
    • 重写MySQL的执行层

热点数据更新带来的问题

在这里插入图片描述

问题的方向判断

用户线程被打挂

  • 用活跃的线程数超过当前配置的最大值,新请求进来后,应用无法处理从而出现假死现象。

  • 基于k8s部署的应用通过请求探活接口,发现没响应后会不断重启应用,导致c端时不时出现系统异常。

据库cpu被打挂(优先考虑,80%可能性)

  • 数据库出现大量sql,而且业务请求量很大,导致大量线程阻塞,cpu很快升至100%。

  • 并发请求太高,超过了数据库承受的最大线程数(业务请求TPS:2w/s,数据库单节点TPS:2k/s),cpu快速
    升至100%。

redis被打挂

  • redis cpu打爆,接近100%。一般可能的原因是:redis 出现热key
  • redis内存满了,接近100%。一般可能的原因是:redis key短时间内增长很快超过内存最大值(设计不合理或
    者过期时间设置过长)。
  • redis 网络IO太大,比如:1.8G/s。一般可能的原因是:redis 出现大key

临时解决方案

  • 重启出问题的MySQL或Redis
  • 将流量切换到容灾。

解决方案

流量控制

  • 在网关做好限流
  • 或者使用基于redis的限流

热点隔离

  • 热点业务独立部署
  • 热点数据垂直拆分成独立数据库

数据分批次提交

  • 自定义mybatis拦截器,拦截执行SQL,动态配置一个阈值,当insert或update的记录数超过阈值,改为分批次提交事务(可以参考:mybatis-plus批量提交的处理逻辑)

数据合并后更新

可以在内存中合并同一个记录的多条更新操作,之后只提交一次,减少数据库锁的冲突。

重写MySQL的执行层

通过重写mysql的执行层,提供自动探测热点行更新开关,如果检测到单行有大量的热点更新,在执行层引入排队机制,减少行锁冲突,提升并发性能。阿里与腾讯内部的mysql库都已经二次开发支持这个特性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Unity实战】SO反序列化正确姿势
  • 每天五分钟深度学习PyTorch:不同的神经网络层设置不同的学习率
  • 三、Kubernetes中的控制器的使用
  • 响应式CSS 媒体查询——WEB开发系列39
  • 安卓framework美化手势导航侧滑返回UI
  • 使用CUBE_MX实现STM32 DMA 功能(存储器到存储器)
  • 打开VSCod安装“PHP Intelephense”或“PHP Server”PHP扩展
  • 通过SQL语句判断奇偶数的几种方法
  • QXml 使用方法
  • 物联网之ESP32与微信小程序实现指示灯、转向灯
  • FloodFill算法(DFS+BFS)【上】
  • NLP基础及其代码-tokenizer
  • 如何保证消息不重复消费
  • 【Power Compiler手册】13.UPF多电压设计实现(3)
  • Vant 按需引入导致 Typescript,eslint 报错问题
  • CentOS 7 修改主机名
  • IDEA 插件开发入门教程
  • isset在php5.6-和php7.0+的一些差异
  • js写一个简单的选项卡
  • MySQL-事务管理(基础)
  • PHP CLI应用的调试原理
  • Python - 闭包Closure
  • Vue UI框架库开发介绍
  • Web设计流程优化:网页效果图设计新思路
  • 搞机器学习要哪些技能
  • 前端性能优化--懒加载和预加载
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 使用权重正则化较少模型过拟合
  • 移动端解决方案学习记录
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​Python 3 新特性:类型注解
  • #Linux(权限管理)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (003)SlickEdit Unity的补全
  • (12)目标检测_SSD基于pytorch搭建代码
  • (27)4.8 习题课
  • (4) PIVOT 和 UPIVOT 的使用
  • (C语言)球球大作战
  • (pojstep1.3.1)1017(构造法模拟)
  • (pytorch进阶之路)扩散概率模型
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (算法二)滑动窗口
  • (转)LINQ之路
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .NET 5种线程安全集合
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET项目中存在多个web.config文件时的加载顺序
  • .NET中使用Protobuffer 实现序列化和反序列化
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用