分布式环境下流控技术汇总

本篇主要是对分布式环境流控技术及使用场景做个简要的汇总,包括:固定时间窗口算法,滑动时间窗口算法,漏桶算法,令牌桶算法,分布式消息中间件,流控与熔断利器Sentinel。

1. 前言

在流量控制系列文章中的前六篇,分别介绍了固定时间窗口算法、滑动时间窗口算法、漏桶原理、令牌桶、消息中间件、Sentinel如何应用到分布式环境下的流量与并发控制。

这里再次对这几个做一个简单回顾,知道工具箱里面的不同工具的特性,才能更好更快地干活。

2. 固定时间窗口算法

固定窗口: 算法简单,对突然流量响应不够灵活。超过流量的会直接拒绝,通常用于限流。

详见:《精确掌控并发:固定时间窗口算法在分布式环境下并发流量控制的设计与实现》

3. 滑动时间窗口算法

滑动窗口: 算法简单,对突然流量响应比固定窗口灵活。超过流量的会直接拒绝,通常用于限流。

详见:《精确掌控并发:滑动时间窗口算法在分布式环境下并发流量控制的设计与实现》

4. 漏桶算法

漏桶算法: 在固定窗口的基础之上,使用队列缓冲流量。提供了稳定的流量输出,适用于对流量平滑性有严格要求的场景。

详见:《精确掌控并发:漏桶算法在分布式环境下并发流量控制的设计与实现》

5. 令牌桶算法

令牌桶算法: 在滑动窗口的基础之上,使用队列缓冲流量。提供了稳定的流量输出,且能应对突发流量。

详见:《精确掌控并发:令牌桶算法在分布式环境下并发流量控制的设计与实现》

6. 分布式消息中间件

分布式消息中间件:在支付场景的削峰填谷用得比较多,且对精度没有那么苛刻的场景。以及应用间的解耦。

详见:《削峰填谷与应用间解耦:分布式消息中间件在分布式环境下并发流量控制的应用》

7. 流控与熔断利器Sentinel

Sentinel:分布式场景下的流量控制和熔断机制利器。

详见:《流量控制与熔断利器:Sentinel介绍》

8. 方案选型

限流和熔断保护:Sentinel。

削峰填谷和应用间解耦:消息中间件。

极低并发要求:自己使用redis实现漏桶或令牌桶。

想手撸一段代码测试:固定时间窗口和滑动时间窗口。

实际上,自己实现的固定时间窗口或滑动时间窗口,还可以加上一些其它技术,解决一些其它的问题,比如渠道自动开关。这个后面单独开文章介绍。

9. 结束语

这7篇文章对流控的原理、实现方案、应用场景分别做了详细的描述,应对绝大部分的支付系统,是绰绰有余的。哪怕中国TOP2的支付公司,内部的使用也差不多是这样,只是部署集群的规模更大,对稳定性的要求更高,对应地附加了很多其它保障手段。

这是《百图解码支付系统设计与实现》专栏系列文章中的第(20)篇,也是流量控制系列的第(7)篇。点击上方关注,深入了解支付系统的方方面面。

10.精选

专栏地址 百图解码支付系统设计与实现
《百图解码支付系统设计与实现》专栏介绍
《百图解码支付系统设计与实现》专栏大纲及文章链接汇总(进度更新于2023.1.15)
领域相关(部分)
支付行业黑话:支付系统必知术语一网打尽
跟着图走,学支付:在线支付系统设计的图解教程
图解收单平台:打造商户收款的高效之道
图解结算平台:准确高效给商户结款
图解收银台:支付系统承上启下的关键应用
图解支付引擎:资产流动的枢纽
图解渠道网关:不只是对接渠道的接口(一)
技术专题(部分)
交易流水号的艺术:掌握支付系统的业务ID生成指南
揭密支付安全:为什么你的交易无法被篡改
金融密语:揭秘支付系统的加解密艺术
支付系统日志设计完全指南:构建高效监控和问题排查体系的关键基石
避免重复扣款:分布式支付系统的幂等性原理与实践
支付系统的心脏:简洁而精妙的状态机设计与核心代码实现
精确掌控并发:固定时间窗口算法在分布式环境下并发流量控制的设计与实现
精确掌控并发:滑动时间窗口算法在分布式环境下并发流量控制的设计与实现

相关推荐
星释10 小时前
Rust 练习册 88:OCR Numbers与光学字符识别
开发语言·后端·rust
爱吃牛肉的大老虎14 小时前
网络传输架构之GraphQL讲解
后端·架构·graphql
稚辉君.MCA_P8_Java16 小时前
Gemini永久会员 containerd部署java项目 kubernetes集群
后端·spring cloud·云原生·容器·kubernetes
yihuiComeOn17 小时前
[源码系列:手写Spring] AOP第二节:JDK动态代理 - 当AOP遇见动态代理的浪漫邂逅
java·后端·spring
e***716718 小时前
Spring Boot项目接收前端参数的11种方式
前端·spring boot·后端
程序猿小蒜18 小时前
基于springboot的的学生干部管理系统开发与设计
java·前端·spring boot·后端·spring
q***563818 小时前
Spring容器初始化扩展点:ApplicationContextInitializer
java·后端·spring
菜鸟‍18 小时前
【后端学习】MySQL数据库
数据库·后端·学习·mysql
Curvatureflight18 小时前
GPT-4o Realtime 之后:全双工语音大模型如何改变下一代人机交互?
人工智能·语言模型·架构·人机交互
Codebee19 小时前
30 分钟落地全栈交互:OneCode CLI+SVG 排课表实战
后端