记录一次限流策略的技术选型

546 阅读1分钟

这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战

业务场景

营销任务,大数据圈出很大的一个人群,有很多个不同的任务节点,节点之间有依赖关系串行,每个节点需要调用第三方的服务,第三方服务有限流策略,比如QPS只有20每秒.

忽略调用一些复杂的业务规则限制, 整个流程如上描述,因为数据量大涉及的第三方服务比较多,限流策略是我们必须要考虑的,常见的限流策略,单机分布式都有很多中的限流策略。 针对我们这个场景,我们的资源瓶颈在第三方服务,每秒20的qps,当我们营销任务定时触发,不同的任务调用相同的第三方服务,势必会将第三方接口打爆。

最开始我们考虑了几种方案

  1. 分布式限流,比如接口调用封装一个nacos的微服务,通过sential做接口层的限流。
  2. 单机的限流策略,guava 的RateLimiter令牌桶算法
  3. 分布的锁,保证单机执行
  4. 信号量smphare 等等。

最终我们选择的是smphare信号量控制并发,不同的接口根据第三方API提供的QPS计算出对应的信号量限制控制并发执行。

常见的限流策略

image.png

信号量的Smphare的使用