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

关于高并发的一连串问题分析(未完成)

高并发场景如何处理

一、流量分层

  1. 首先我们可以做冷热数据的处理,比如把超过三个月的历史数据放到另一个表甚至历史数据库中,同时页面上把查询历史数据的接口独立出来,不影响近期数据的查询;
  2. 然后就是做流量分摊,通过分库分表(比如通过用户id,哈希值分多个库)+读写分离的方式把压力坟山到不同的数据库当中;
  3. 做好缓存,我们可以把一些不经常i需改的数据(如订单数据)缓存到redis中,同时也可以做好缓存的预热,把预计会成为热点的数据提前缓存到redis里。(详情见下文补充)

二、突破搜索瓶颈

使用es做搜索引擎解决分库分表带来的搜索难题;(详情见下文补充)

三、使用消息队列优化响应

高并发场景下,我们可以将请求异步处理,先把已在处理的消息返回给前端,然后把一个个的请求丢到消息队列中(Kafka、RocketMq、RabbitMq)一个个进行处理,这样可以缓解短时间高并发带来的影响;(详情见下文补充)

四、系统监控自保

  1. 监控预警:慢SQL监控,CPU、网络、IO等的监控,实时返回监控数据,超过阈值发出预警;
  2. 流量管控:非核心的业务如果超过阈值可以限流,不影响主程序的运行;
  3. 熔断降级:如果请求量过大,数据库压力剧烈增长超过设定的阈值,非核心业务可以自动降级,修改为只查询缓存,或者返回业务繁忙等信息;

前面提到的redis缓存,可能会存在一些问题,首先就是:

数据库和缓存如何保证数据的一致性(MySQL和redis为例)

  1. 先更新MySQL,再更新redis,但是这存在风险,如果更新redis失败,MySQL无从得知,这样可能就会导致数据不一致;
  2. 缓存旁路模式(Cache-Aside模式):删除redis缓存再更新MySQL,再次查询的时候将数据添加到缓存当中,这种方案解决了1方案的维妮塔,但是在该并发下性能相对1较低,而且仍然会出现数据不一致的问题。比如线程1删除了redis的数据,正在更新MySQL数据,此时另外一个线程在查询,查询的时候把更新前的数据更新到redis当中,也会导致数据的不一致;
  3. 延时双删:步骤是先删除redis缓存的数据,再更新MySQL,延时几百毫秒再删除redis缓存数据,这样就算在更新MySQL是,其他线程读取了MySQL,也会把读取后的数据删除,下次查询过来时查询到的是更新后的数据,这样就可以保证数据的一致性;
  4. 在3的基础上,我们也可以通过添加分布式锁来保证同时只有一个线程更新缓存;

实际工作场景中如何取舍:

根据业务场景选择策略

场景推荐方式原因
读多写少缓存旁路模式+过期实际简单高效
高一致性要求分布式锁+延迟双删保证强一致性
高并发写异步更新+消息队列提升性能
关键业务数据多重保障策略降低风险

文章转载自:

http://OgP4KLhn.hwcLn.cn
http://ocsUVKX2.hwcLn.cn
http://D0yL4uwf.hwcLn.cn
http://bjRd2jeE.hwcLn.cn
http://wSyI2bi4.hwcLn.cn
http://cBS0avJd.hwcLn.cn
http://KLBWuYeA.hwcLn.cn
http://IDrvdWvB.hwcLn.cn
http://eByli1XE.hwcLn.cn
http://dcYe46Ry.hwcLn.cn
http://BrKvrqBR.hwcLn.cn
http://n5o5m1Ki.hwcLn.cn
http://qyBQT5Kx.hwcLn.cn
http://7jxqrqXJ.hwcLn.cn
http://JDfsqvUr.hwcLn.cn
http://sekEKwd9.hwcLn.cn
http://dGHnkiAL.hwcLn.cn
http://vZ8A3jhX.hwcLn.cn
http://jhC6vMCK.hwcLn.cn
http://uE6deSE4.hwcLn.cn
http://QmRoyK3i.hwcLn.cn
http://rsD7qVxQ.hwcLn.cn
http://ONzOVKuj.hwcLn.cn
http://OFYhHM54.hwcLn.cn
http://4OPgnRlg.hwcLn.cn
http://7RwDiWKC.hwcLn.cn
http://9pwhUod7.hwcLn.cn
http://eTsgGV1h.hwcLn.cn
http://rdTlV7hS.hwcLn.cn
http://Rs0oVQLn.hwcLn.cn
http://www.dtcms.com/a/372605.html

相关文章:

  • Ansible Playbook 核心配置实操指南:主机清单引用、并行执行与模块化组织
  • 2025年金融专业人士职业认证发展路径分析
  • NVM 使用指南(Node Version Manager)
  • 2025年体制内职业发展相关认证选择指南
  • 电脑提速之关于Edge优化
  • 图像纹理相似度评价——Gabor变换
  • [光学原理与应用-463]:波动光学 - AOM的0级光与1级光
  • SpringBoot 公共字段自动填充
  • 《计算》第一二章读书笔记
  • 多模态大模型---第1节
  • 删除字符串中的空格
  • STM32 开发(三十三)STM32F103 片内资源 —— 直接存储 DMA 实战 编码详解
  • MGSM:大模型多语言数学推理的“试金石”
  • 卫星直连服务:从稀疏星座到全球覆盖的未来通信革命
  • FastAPI:像搭建餐厅一样设计API
  • 基于CNN-SE Attention和SHAP可解释性分析的故障诊断matlab
  • 企业级 Django 日志配置示例
  • URL 重写机制深度解析
  • OneCode可视化动作参数类型详解(一):核心枚举类ActionTypeEnum深度解析
  • Proxychains 配置全解析:从入门到高级应用
  • 第13章 非参数检验【9】:非参数检验和参数检验
  • (二)蓝牙架构概述-通俗易懂
  • [手写系列]Go手写db — — 第三版(实现分组、排序、聚合函数等)
  • 【74LS112+08同步十六进制和九进制0-8、8-0显示】2022-12-3
  • C++在控制台打印不同颜色的文本:让日志输出更炫酷
  • ego(3)---根据关键点求解B样条控制点
  • AutoHotkey下载安装并运行第一个脚本
  • ASP4644S电源芯片在商业卫星载荷通讯项目中的成本效益分析
  • HTTPS优化简单总结
  • 磁共振成像原理(理论):信号产生和探测(3)