共计 1439 个字符,预计需要花费 4 分钟才能阅读完成。
1. 什么是服务限流?
随着当初微服务、分布式系统的倒退,各个服务之间的互相调用越来越简单。
为了保障本身服务的稳定性与高可用,当面对超过本身服务能力的申请调用时,要做肯定的限流措施。
如同五一、国庆期间的游览出行、景区爆满,游客限流。咱们的服务面对诸如秒杀、大促、618、双十一以及可能的歹意攻打、爬虫等高并发、大流量的场景也须要做服务限流。
概念:对超出服务解决能力之外的申请进行拦挡,对拜访服务的流量进行限度。
2. 罕用限流算法
2.1 计数器法(固定窗口)
概念:在单位工夫内,统计进入的申请数量,统计值达到限流阈值时,开始限流(如回绝和排队)。这个单位工夫完结后,计算器清零,从新开始计数。
问题:在固定工夫窗口切换处,最高可能会接管到 2 倍阈值的流量。
如果设置的工夫窗口为 5 秒,限流阈值为 10.
第 5 秒时进来 10 个流量,此时窗口内流量未超阈值。第 6 秒切换到下一个窗口,此时进来流量 10,以后窗口流量仍未超阈值。然而 第 5 秒和第 6 秒的切换临界处,短时间内进来了限流阈值的双倍流量,此时服务可能会因为申请流量过多而产生异样。
2.2 滑动窗口算法
概念:滑动窗口对固定窗口进行改进,将其细化,将一个工夫窗口划分为若干个工夫窗格,每个窗格代表固定的时间段(如 1 分钟)、领有独立的计数器,每过固定工夫(如 1 分钟),将滑动窗口向前挪动一格。滑动窗口中的窗格划分越细,限流统计越准确。
如果设置的工夫窗口为 5 秒,限流阈值为 10.
第 5 秒时进来 10 个流量,此时窗口内流量未超阈值。第 6 秒时进来流量 10, 与此同时,滑动窗口右移一格,此时滑动窗口内(第 2~6 秒)流量为 20,大于限流阈值,开始限流。
2.3 漏斗算法
概念:申请像水一样注入漏斗,而后以固定的速率流出。漏斗未满之前,申请能够始终进入;漏斗满,则申请回绝。
漏斗算法能够平滑流量,然而无奈解决流量突增的问题。
2.4 令牌桶算法
概念 :以恒定速率( 令牌产生速率
)向令牌桶中放入令牌,令牌桶满( 令牌桶大小
)则无奈放入。申请达到后先获取令牌,拿到令牌后申请被解决并删除取得的令牌。令牌有余时,申请无奈取得令牌,申请被回绝。
令牌桶算法能够平滑限流,同时能够容忍突发流量。
3. 限流策略
3.1 服务回绝
当申请流量达到限流阈值时,对多余的申请间接回绝。
可通过设计实现对指定域名、IP、客户端、利用、用户等不同起源的申请进行回绝。
3.2 延时解决
通过将多余的申请退出缓存队列或延时队列,来应答短期的流量突增,高峰期过后开始将沉积的申请流量逐步解决。
3.3 申请分级(优先级)
对不同起源的申请设置优先级,先解决优先级更高的申请。如 VIP 客户、重要的业务利用(如交易服务优先级高于日志服务)
3.4 动静限流
能够监控零碎相干指标、评估零碎压力,通过注册核心、配置核心等动静调整限流阈值。
3.5 监控预警 & 动静扩容
如果有优良的服务监控零碎与主动部署、公布零碎,能够通过监控零碎主动监测零碎运行状况,对短期内服务压力暴增、流量大幅写入的状况进行邮件、短信等形式进行预警。
在满足特定条件下,可主动部署、公布相干服务,起到动静扩容的成果。
4. 限流地位
4.1 接入层限流
能够通过 Nginx、API 路由网关等对域名或 IP 进行限流,同时能够拦挡非法申请
4.2 利用限流
每个服务能够有本人的单机或集群限流措施,也能够调用第三方的限流服务
4.3 根底服务限流
数据库:限度数据库连贯、限度读写速率
音讯队列:限度生产速率(消费量、生产线程)
如果这篇文章对你有用的话,点个 赞再走呗!
如有问题,欢送留言评论!
欢送转载,烦请注明出处!