高并发问题

问题分类

侧重于“高并发读”的系统

例如如下场景

  1. 搜索引擎
  2. 电商的商品搜索
  3. 电商系统的商品描述、图片和价格

侧重于“高并发读”的系统

例如如下场景

  1. 广告扣费系统

同时侧重于“高并发读”和“高并发写”的系统

例如如下场景

  1. 电商的库存系统和秒杀系统
  2. 支付系统和微信红包
  3. IM、微博和朋友圈

高并发读

策略:加缓存

本地缓存或Memcached/Redis集中式缓存

当数据库支持不住的时候,首先想到的就是为其加一层缓存。缓存通常有两种思路:一种是本地缓存,另一种是Memcached/Redis类的集中式缓存
使用缓存时需要考虑一些问题,

  • 缓存雪崩:
    • 定义:大量缓存同时无法访问,会导致所有请求全部访问并压垮数据库
    • 发生原因:
      • 大量缓存数据同时过期
      • Redis故障
    • 处理方案
      • 大量缓存数据同时过期:1. key的过期时间随机设置 2.请求数据库排队处理。
      • Redis故障:1.redis高可用机制 2. 服务熔断或请求限流机制
  • 缓存穿透
    • 定义:大量访问不存在的key,会导致请求全部访问并压垮数据库
    • 发生原因:访问的数据既不在数据库,也不在缓存中
    • 处理方案
      • 非法请求的限制
      • 缓存空值或者默认值
      • 布隆过滤器
  • 缓存击穿:
    • 定义:热点数据过期,对热点数据的访问会全部访问并压垮数据库
    • 发生原因:热点数据过期
    • 处理方案:
      • 热点数据永不过期,或者续期
      • 排队降级访问数据库,第一个降级的查询会重新更新缓存

MySQL的Master/Slave

主库负责读写,从库负责读

CDN静态文件加速(动静分离)

将图片、HTML、JS、CSS 文件等静态文件缓存到全网的各个节点,用户访问时就进读取

策略 :并发读

  1. 异步调用(RPC):没有耦合关系的多个接口可以并行调用
  2. 冗余请求:单台机器的调用延迟概率时1%,100台机器的延迟概率就是1-(99%)^100=63%,延迟的概率很高。客户端同时向多台服务器发送请求,哪个返回得快就用哪个,其他的丢弃,但这会让整个系统的调用量翻倍
作者

jszero

发布于

2025-05-04

更新于

2025-05-05

许可协议

评论