《分布式技术原理与算法解析》学习笔记Day26

流量控制

什么是流量控制?

网络传输中的流量控制就是让发送方发送数据的速度不要太快,这样可以让接收方来得及接收数据,通常使用滑动窗口的方式来实现。

滑动窗口是指在任意时刻,发送方都维持一个连续的允许发送的数据大小,称为发送窗口,接收方也会维持一个连续的允许接收的数据大小,称为接收窗口,每次发送方给接收方发送数据后,必须收到接收方返回的确认消息,发送窗口才可以向后移动,发送新的数据。

分布式系统中的流量控制是指控制每个服务器接收的请求数,以保证服务器来得及处理这些请求,尽可能保证用户请求持续地被处理,而不是让大量的用户请求“阻塞”在服务器中,等待被执行。

分布式系统流量控制策略

一般有两种流量控制策略:

  1. 漏桶策略
  2. 令牌桶策略

漏桶策略

漏桶策略是指无论用户请求有多少,无论请求速率有多大,“漏桶”都会接收下来,但是从漏桶出来的请求是固定速率的,保证服务器可以处理的游刃有余。当“漏桶”因为容量限制放不下更多请求时,就会选择丢弃部分请求,是一种“宽进严出”的策略。

漏桶策略的好处是做到了流量整形,即无论流量多大,即使是突发的大流量,输出依旧是一个稳定的流量。缺点是对于突发流量的情况,因为服务器处理速度与正常流量的处理速度一致,会丢弃比较多的请求。

漏桶策略适用于间隔性突发流量且流量不用即时处理的场景,这样可以在流量较小的“空闲期”,处理大流量时流入漏桶的流量。它不适用于流量需要即时处理的场景。

令牌桶策略

令牌桶策略是指有一个容器来盛放令牌,请求只有拿到令牌后,才会被分发到服务器进行处理。

令牌桶的优点是当有突发大流量时,只要令牌桶中有足够多的令牌,请求就会被迅速执行。令牌桶容量的设置,可以接近服务器处理的极限,这样就可以有效利用服务器的资源。

令牌桶策略适用于有突发特性的流量,且流量需要即时处理的场景。

漏桶策略和令牌桶策略的详细比较如下。

Sentinel流量控制原理

Sentinel的核心是监控应用的并发线程数或者QPS,当达到设置的阈值时,Sentinel才去一定的策略对流量进行控制,避免应用被瞬时高流量击垮,保证应用高可靠。

在Sentinel中,有两种流量控制方式:

  1. 通过并发线程数进行流量控制
  2. 通过QPS进行流量控制

在分布式系统中,每个请求都会由一个线程去处理,当请求太多系统处理不过来时,线程池可能已经被耗尽,因此当请求过多时,执行请求的并发线程数自然会随之增加,当超过一定阈值,需要采取策略进行流量控制。

在Sentinel中,采用了直接拒绝的方式,即新来的请求会被直接拒绝。

针对QPS,Sentinel提供了三种不同的流量控制策略:

  1. 直接拒绝,这与并发线程数流量控制采取的方式一直。
  2. 预热,看上去像一种特殊的令牌桶:放令牌的速率保持一个较低的水平,当流量突增时,放令牌的速率不会一下子提高到最高水平,而是慢慢增加,直到增加到最大速率,适用于具有突发特性的流量,且流量可以即时处理的场景。
  3. 匀速排队,本质是漏桶策略,严格控制系统每秒处理的请求数,当请求数很多时,请求之间的间隔也保持一致。
posted @ 2023-03-01 07:24  李潘  阅读(47)  评论(0编辑  收藏  举报