高并发场景下常见的限流算法及方案介绍
原文中文,约7000字,阅读约需17分钟。
📝
内容提要
高并发带来的问题可以通过CDN、消息队列、多级缓存、异地多活等措施优化,但最终还是受硬件物理特性限制,此时限流熔断就发挥作用了。JUC包、Guava的RateLimiter、Netflix的Hystrix熔断器、阿里的Sentinel限流熔断组件、Tair和Redis等都可以实现限流。
🎯
关键要点
-
高并发场景下,系统性能受硬件物理特性限制,需采取限流熔断措施。
-
常用限流算法包括计数器、滑动窗口、漏桶和令牌桶。
-
计数器算法简单,但在时间临界点可能导致突刺现象。
-
滑动窗口算法通过分割时间段来平滑请求流量。
-
漏桶算法通过固定流速处理请求,超出容量的请求将被丢弃。
-
令牌桶算法允许突发流量,适合秒杀等场景。
-
Tomcat和Nginx提供了不同的限流配置方式。
-
JUC包中的Semaphore和Guava的RateLimiter是常用的限流工具。
-
Netflix的Hystrix和阿里的Sentinel是流行的熔断组件。
-
分布式限流方案需要中心系统统一管控流量配额,需考虑可靠性。
-
Tair和Redis可以通过自增方法和Lua脚本实现限流功能。
🏷️