限流策略学习

转自:https://www.cnblogs.com/brxHqs/p/9767942.html ,https://tkstorm.com/posts-list/books/cloud-native-alone/high-availability/

1.突发流量 

高并发情况下带来的突发流量: 

常见的优化方案有两种:

  • 1)上游队列缓冲(push阻塞),限速发送;
  • 2)下游队列缓冲(定时或者批量拉取pull,可以起到削平流量),限速执行。

如果上游发送流量过大,MQ提供拉模式确实可以起到下游自我保护的作用,会不会导致消息在MQ中堆积?

答:下游MQ-client拉取消息,消息接收方能够批量获取消息,需要下游消息接收方进行优化(提供批处理,比如批量写),否则整体吞吐量低,也会造成mq堆积。

2.高并发系统保护策略

2.1 缓存

累积一些数据,批量写入,先写redis再写数据库;内存里做缓存。

2.2 服务降级

当服务器压力剧增的情况下,降级代表系统功能部分不可用,比如降级可能出现的情况是手机号可以正常注册,但邮箱不能注册。

熔断代表的是完全不可用,注册功能完全不可用。不管降级还是熔断,在设计时都要考虑:降级熔断算法告警,恢复机制

产品功能梳理核心流程,找到核心服务,划分等级,确认服务关键程度。

2.3 限流

对并发访问/请求进行限速,一个时间窗口内一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。

一般来说系统的吞吐量是可以被测算的,一旦达到阈值,就需要限制流量。比如:延迟处理,拒绝处理,部分拒绝处理等等。

  • Nginx前端限流:按照一定的规则如IP、账号、调用逻辑等在Nginx层面做限流;

  • 业务应用系统限流:客户端限流(验证码;获取动态请求路径pathvariable,到达接口地址隐藏的效果);服务端限流(redis限速器,延迟队列);

  • 数据库限流:数据库链接池化,Mysql(如max_connections)、Redis(如tcp-backlog)都会有类似的限制连接数的配置。

限流算法:简单计数器、漏桶、令牌桶。

 漏桶算法:适用场景: 秒杀场景,削峰填谷

  1. 水流入(请求生产): 漏入桶中,桶满则溢出
  2. 漏桶(队列): FIFO队列
  3. 水流出(请求消费): 以一定速率从桶内取出请求消费

令牌桶算法

  1. 创建一个可放指定数量(M)令牌的桶(队列);
  2. 每间隔一定时间片,放入一个令牌到桶中(定时令牌生成器),桶满则溢出;
  3. 每当R个请求到达时,从桶内取出min(M,R)个令牌,若桶内令牌不够,则将请求缓存或者丢弃(对比网卡的环形队列作用)。

 https://www.jianshu.com/p/c6b20845561a,这个讲解令牌桶浅显易懂。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值