获得徽章 1
#青训营笔记创作活动#
1月12日 打卡day1
电商高并发场景下,会使用一些方法去对抗流量高峰,比如限流,熔断,降级等。
限流:限流是限制到达系统的并发请求数量,保证系统能够正常响应部分用户的请求,而对于炒锅限制的流量,则通过拒绝服务的方式保证整体系统的可用性。
根据限流作用范围:划分为1)单机限流,2)分布式限流
根据限流方式,又分为计数器,滑动窗口,漏桶限令牌桶限流

单机限流
1. 计数器:方法简单,但是没有很好的处理单位时间的边界。
2. 滑动窗口:通过划分时间片,来限流去解决边界问题,但是我们不清楚去设置多少个格子,格子的数量影响滑动窗口算法的精度,依然有时间片的概念,无法解决临界点问题。
3. 漏桶(Leaky Bucket):原理就是一个固定容量的漏桶,按照固定速率流出水滴。一个固定容量的桶,有水流进来,也有水流出去。对于流进来的水来说,我们无法预计一共有多少水会流进来,也无法预计水流的速度。但是对于流出去的水来说,这个桶可以固定水流出的速率(处理速度),从而达到流量整形和流量控制的效果。漏桶限制的是常量流出速率(即流出速率是一个固定常量值),所以最大的速率就是出水的速率,不能出现突发流量。
4. 令牌桶:网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法,典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。令牌桶限制的是平均流入速率(允许突发请求,只要有令牌就可以处理,支持一次拿3个令牌,4个令牌...),并允许一定程度突发流量,所以也是非常常用的限流算法。
分布式限流:
单机版限流仅能保护自身节点,但无法保护应用依赖的各种服务,并且在进行节点扩容、缩容时也无法准确控制整个服务的请求限制。而分布式限流,以集群为维度,可以方便的控制这个集群的请求限制,从而保护下游依赖的各种服务资源。

分布式限流最关键的是要将限流服务做成原子化,我们可以借助 Redis 的计数器,Lua 执行的原子性,进行分布式限流
展开
评论
关注了标签 Docker Docker
关注了
字节跳动青训营
VIP.4 融会贯通
个人成就
文章被点赞 6
文章被阅读 703
掘力值 110
收藏集
0
关注标签
11
加入于