高并发场景下常见的限流算法及方案介绍

💡 原文中文,约7000字,阅读约需17分钟。
📝

内容提要

高并发带来的问题可以通过CDN、消息队列、多级缓存、异地多活等措施优化,但最终还是受硬件物理特性限制,此时限流熔断就发挥作用了。JUC包、Guava的RateLimiter、Netflix的Hystrix熔断器、阿里的Sentinel限流熔断组件、Tair和Redis等都可以实现限流。

🎯

关键要点

  • 高并发场景下,系统性能受硬件物理特性限制,需采取限流熔断措施。
  • 常用限流算法包括计数器、滑动窗口、漏桶和令牌桶。
  • 计数器算法简单,但在时间临界点可能导致突刺现象。
  • 滑动窗口算法通过分割时间段来平滑请求流量。
  • 漏桶算法通过固定流速处理请求,超出容量的请求将被丢弃。
  • 令牌桶算法允许突发流量,适合秒杀等场景。
  • Tomcat和Nginx提供了不同的限流配置方式。
  • JUC包中的Semaphore和Guava的RateLimiter是常用的限流工具。
  • Netflix的Hystrix和阿里的Sentinel是流行的熔断组件。
  • 分布式限流方案需要中心系统统一管控流量配额,需考虑可靠性。
  • Tair和Redis可以通过自增方法和Lua脚本实现限流功能。
➡️

继续阅读