美文网首页
分布式系统限流方案

分布式系统限流方案

作者: lkd_whh | 来源:发表于2023-05-09 16:10 被阅读0次

    当设计分布式系统时,限流是一种重要的手段,可以保护系统免受流量超载而导致的服务不可用。

    在高并发场景下,为保证在现有资源条件下服务正常运行,使用服务限流让请求和并发在应用可接受的范围内,达到高可用的目的。

    限流层级

    现代分布式系统的架构往往非常复杂,一个请求从前端发送到后端系统接收处理往往要经过多次转发处理,这里我简单的将限流方案的实现分为三个层级。

    1. 网络层限流:网络层限流是针对整个服务的限流,主要是为了保护服务器不受到网络攻击或恶意请求的影响而导致崩溃或服务降级等问题。网络层限流可以通过在防火墙或网络设备上实现限流逻辑来实现。
    2. 应用层限流:应用层限流是针对单个应用的限流,主要是为了保护应用不受到过多的请求影响而导致崩溃或服务降级等问题。应用层限流可以通过在代码中实现限流逻辑来实现,也可以通过使用第三方库或中间件来实现。
    3. 接口层限流:接口层限流是对单个接口的限流,主要是为了防止某些热门接口被过多的请求占用导致整个服务崩溃或变慢。接口层限流可以通过在应用代码中实现限流逻辑来实现。

    常见的限流算法

    在介绍具体的限流实现方案之前,我们先来了解下有哪些常见的限流算法。

    1. 计数器算法(Counter):计数器算法通过对请求进行计数,当请求的速率超过阈值时,新的请求被拒绝。计数器算法可以基于时间窗口或滑动窗口来进行计数。
    2. 令牌桶算法(Token Bucket):令牌桶算法是一种经典的限流算法,它通过维护一个固定容量的令牌桶,以一定的速率不断产生令牌,每当请求到来时,需要从令牌桶中获取一个令牌,如果桶中没有足够的令牌,则请求被拒绝。
    3. 漏桶算法(Leaky Bucket):漏桶算法也是一种经典的限流算法,它将请求看作是水滴,将请求放入一个固定容量的漏桶中,请求以一定的速率流出漏桶,如果漏桶已满,则请求被拒绝。
    4. 优先级队列算法(Priority Queue):优先级队列算法根据请求的优先级对请求进行排序,只有优先级高的请求才能通过限流器,当限流器达到限流阈值时,低优先级的请求会被拒绝。

    实现方案

    前面介绍了常见的限流算法,下面讲一下基于这些算法有哪些具体的限流方案。

    1. 网络层限流常见的实现方案有服务网格限流保护。

    2. 应用层限流常见的实现方案有Nginx、Tomcat、api网关、阿里巴巴sentinel等。

      其中Nginx的限流主要是两种方式:限制访问频率和限制并发连接数。

      Tomcat可以通过设置最大线程数maxThreads,,当请求的并发大于此值(maxThreads)时,请求就会排队执行,这样就完成了限流的目的。

      阿里巴巴 Sentinel 是一款开源的面向分布式服务架构的流量控制和服务保护组件,主要解决分布式系统中的流量控制问题,可以说是分布式限流中的大杀器。它可以作为一个独立的组件运行,也可以集成到微服务框架中使用。Sentinel 提供了实时的监控、控制台、簇点链路统计等功能,帮助开发者更好地了解和管理应用的运行状态。同时,它还提供了多种流量控制规则,如基于QPS、线程数、CPU使用率等规则,可以帮助开发者实现精细化的流量控制策略。

    3. 接口层限流具体到单个接口,需要根据具体业务选择不同的实现方式。比如可以通过Guava RateLimiter实现单机限流,或通过Redisson限流器RRateLimiter实现分布式限流。

    相关文章

      网友评论

          本文标题:分布式系统限流方案

          本文链接:https://www.haomeiwen.com/subject/ekgrsdtx.html