最近有被问到现在产品的流控实现机制,之前知道得并不详细,这次准备翻翻代码,看看到底是如何实现的。下面就一探它的庐山正面目。
0.简介
流控是可以一起部署或者分机器部署的,故可分为本地流控和流控服务器,可以通过开关决定使用哪个。在交易进来后,会去申请流控,如果超过设置的流控阈值就会报错,拒绝交易,达到流量控制的目的。
1.实现逻辑
在适配流程中配置了流控的基础服务,当交易进来后。先检查是否是使用的本地流控,如果不是检查流控服务器是否正常,如果不正常这走本地流控,如果正常则去申请流控,如果申请出现异常也从本地流控走。
流控配置在数据库中存储,在重启时加载。可根据多个维度设置,目前常用的是调用方,交易码。当然也有按照年月日等等维度设置的。根据设置的流控阈值创建相应个数的token放入list的中。
去取流控时根据如下规则取出令牌
- 精确查询是否存在
调用方
交易码
配置- 查询
ALL
交易码
配置是否存在- 查询
调用方
ALL
配置是否存在- 查询
ALL
ALL
配置是否存在
如果拿不到就表示超出流量控制了。