分布式环境下限流方案的实现

本文介绍了在分布式环境下,如何应对高并发调用服务商接口的问题。面对服务商接口每秒处理能力的限制,提出了使用Redis进行限流的解决方案。通过在Controller层设置全局Redis key来计数和计时,确保多节点系统下的精准流控,避免服务被压垮。
摘要由CSDN通过智能技术生成
  • 业务背景介绍
    对于web应用的限流,光看标题,似乎过于抽象,难以理解,那我们还是以具体的某一个应用场景来引入这个话题吧。
    在日常生活中,我们肯定收到过不少不少这样的短信,“双11约吗?,千款….”,“您有幸获得唱读卡,赶快戳链接…”。这种类型的短信是属于推广性质的短信。为什么我要说这个呢?听我慢慢道来。
    一般而言,对于推广营销类短信,它们针对某一群体(譬如注册会员)进行定点推送,有时这个群体的成员量比较大,譬如京东的会员,可以达到千万级别。因此相应的,发送推广短信的量也会增大。然而,要完成这些短信发送,我们是需要调用服务商的接口来完成的。倘若一次发送的量在200万条,而我们的服务商接口每秒能处理的短信发送量有限,只能达到200条每秒。那么这个时候就会产生问题了,我们如何能控制好程序发送短信时的速度昵?于是限流这个功能就得加上了
  • 生产环境背景
    1、服务商接口所能提供的服务上限是400条/s
    2、业务方调用短信发送接口的速度未知,QPS可能达到800/s,1200/s,或者更高
    3、当服务商接口访问频率超过400/s时,超过的量将拒绝服务,多出的信息将会丢失
    4、线上为多节点布置,但调用的是同一个服务商接口
  • 需求分析
    1、鉴于业务方对短信发送接口的调用频率未知,而服务商的接口服务有上限,为保证服务的可用性,业务层需要对接口调用方的流量进行限制—–接口限流
  • 需求设计
    方案一、在提供给业务方的Controller层进行控制。
    1、使用guava提供工具库里的RateLimiter类(内部采用令牌捅算法实现)进行限流
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值