千万级流量架构优化策略学习笔记

  1. 峰值QPS=(日总PV数80%)/(日总秒数20%)
  2. 架构拆分
    1)系统维度
    2)功能维度
    3)读写维度

3.队列
1)流量削峰
2)分布式事务(可靠消息模式):
A.上游系统要保证消息不丢失,可以通过本地消息表和后台定时任务来实现
B.下游要保障消息不重复处理,保障幂等,可以通过判重表来实现
C.适用场景:分布式事务的提交或回滚只取决于消息发起方,无需回滚

4.缓存
A.
1)客户端缓存(浏览器、APP客户端)
2)网络(CDN)
3)接入层:Nginx本地缓存(内存有限,储存热点数据)
4) 应用层:Redis

B.缓存读写策略
1)Cache Aside:
更新数据时,不更新缓存,删除缓存中的数据;
读取数据时,若缓存中没有数据,从数据库读取,更新到缓存中;

2)Read/Write Through
更新数据时,先读缓存,若缓存命中,则先写缓存,再由缓存组件同步写入数据库;若缓存未命中,则直接写入数据库;
读取数据时,若缓存中没有数据,从数据库读取,更新到缓存中;

C.缓存问题
1)缓存雪崩:大量数据同时失效导致数据库压力过大//缓存服务器宕机
解决方案:

  • 使用高可用分布式缓存
  • 设置缓存有效期为随机值
  • 热点数据设置永不过期
  • 缓存失效后,通过加锁或队列来控制读数据库的线程数据

2)缓存穿透: 缓存未命中,大量请求访问数据库
解决方案:

  • 缓存空值
  • 布隆过滤器:适用于大量恶意请求不存在的数据,缓存空值也无效,布隆过滤器在不查数据库时就可以判断key是否存在;
    这种算法由一个二进制数组和hash算法组成,判断一个元素在一个集合中是否存在, 省空间,性能高;但有误判,不能删除
    写入数据时,先更新布隆过滤器;
    查询数据时,先查询布隆过滤器是否存在,若不存在,直接返回空,若存在,再去查询数据库

5.降级:暂时屏蔽,过后打开
A.

  • 非核心功能降级

  • 写服务降级:不更新数据库,只更新缓存,把要写的数据放到消息队列,流量高峰过后,把消息队列中的数据回放到数据库
    B.

  • 自动降级
    1)超时降级
    2)限流降级
    3)统计失败次数降级

  • 手动降级
    配置文件实现开关配置
    把非核心功能关掉,开关
    C .降级后的处理方案
    使用默认值
    兜底数据
    缓存数据
    错误页面…

6.限流:对稀缺资源限制请求量,限速、拒绝服务
算法:
固定时间窗口算法
滑动时间窗口算法
令牌桶:限制的是平均流入速率
漏筒:限制的是平均流出速率

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值