茂南网站建设公司,seo优化工作有哪些,wordpress关注公众号,学校网站报价方案这是《百图解码支付系统设计与实现》专栏系列文章中的第#xff08;15#xff09;篇#xff0c;也是流量控制系列的第#xff08;2#xff09;篇。点击上方关注#xff0c;深入了解支付系统的方方面面。
上一篇介绍了固定时间窗口算法在支付渠道限流的应用以及使用redis…这是《百图解码支付系统设计与实现》专栏系列文章中的第15篇也是流量控制系列的第2篇。点击上方关注深入了解支付系统的方方面面。
上一篇介绍了固定时间窗口算法在支付渠道限流的应用以及使用redis实现的核心代码。
本篇重点讲清楚滑动时间窗口算法原理和应用场景以及使用reids实现的核心代码。
1. 滑动时间窗口原理
滑动窗口算法是一种更为灵活的流量控制方案它比固定窗口算法能更平滑地处理突发流量。在滑动窗口中时间窗口是重叠的这意味着流量的计算是基于过去的一段连续时间内发生的事件。 工作流程
窗口定义确定窗口的大小例如1秒钟并设置窗口的滑动间隔比如100毫秒。计数与滑动每个窗口都有自己的计数器。当一个新请求到达时增加当前时间窗口及其前面相邻的窗口的计数。限制检查如果任何连续时间段内的请求总数超过阈值则拒绝新的请求。窗口更新随着时间的推移不断向前滑动窗口并更新相应的计数器。 2. 滑动时间窗口在支付系统中的应用场景
滑动时间窗口在支付系统中的应用场景主要也是各种精确限流比如把前一篇讲的固定时间窗口算法中我们对外部渠道请求会做限流那么就可以升级到滑动时间窗口以提高精度。
只要是API限流都可以使用。
3. 使用redis实现的核心代码
滑动窗口可以通过队列或循环数组来实现。每个窗口对应队列中的一个元素记录该窗口期间的请求数。当时间滑动时更新队列头部的元素并可能将旧的元素出队。
在Redis中可以使用列表或有序集合来模拟这种滑动窗口。下面是一个Rdis实现的示例使用有序集合sorted set来实现了滑动时间窗口算法
/*** redis限流操作类*/
Component
public class RedisLimitUtil {Autowiredprivate RedisTemplateString, Object redisTemplate;// 滑动时间窗口大小private static final long WINDOW_SIZE_IN_SECONDS 1000;/*** 判断是否限流* 这里不考虑超过long最大值的情况系统在达到long最大值前就奔溃了。*/public boolean isLimited(String key, String reuqestId, long countLimit) {// 使用Redis的多个命令来实现滑动窗口redisTemplate.zremrangeByScore(key, 0, currentTimeMillis - WINDOW_SIZE_IN_SECONDS);long count redisTemplate.zcard(key);if (countLimit count) {redisTemplate.zadd(key, currentTimeMillis, reuqestId);return true;} else {return false;}}
}
每个请求都以其发生的时间戳作为分数(SCORE)存储在集合中。通过移除旧于当前时间窗口的请求来维护滑动窗口。通过检查集合中的元素数量以确定是否超过了设定的最大请求数。
zremrangeByScore 用于移除窗口之外的旧请求。zcard 获取当前窗口内的请求数量。zadd 将新请求添加到集合中。 使用PayServiceImpl
/*** 支付服务示例*/
public class PayServiceImpl implements PayService {Autowiredprivate RedisLimitUtil redisLimitUtil;Overridepublic PayOrder pay(PayRequest request) {if (isLimited(request)) {throw new RequestLimitedException(buildExceptionMessage(request));}// 其它业务处理... ...}/** 限流判断*/private boolean isLimited(PayRequest request) {// 限流KEY这里以[业务类型 渠道]举例String key request.getBizType() request.getChannel();// 限流值Long countLimit countLimitMap.get(key);// 如果key对应的限流值没有配置或配置为-1说明不限流if (null countLimit || -1 countLimit) {return false;}return redisLimitUtil.isLimited(key, request.getRequestId(), countLimit);}
}
需要注意一点的是这次需要传入requestId进去用于保存这个requestId在redis有序队列里的分数用于计数和清理。
其它的注释写得比较清楚没什么补充的。 4. 注意事项
一些分布式服务框架为了更高的可靠性他们使用的是本地计算。比如接口限流1000TPS一共有20台应用服务器框架就会把计算出每台机器是50个TPS下发给所有的应用服务器在服务器上线、下线过程中可能会有一段时间是不准确的。 但在渠道限流应该中因为每个渠道的流量都不太高所以可以使用这种redis方案。且精度更高不受应用服务器的上、下线影响。 另外在分布式系统中需要确保不同节点之间的时间同步以保证流量计算的准确性。如果应用服务器之间的时间不同步那么流量就会计算错误。 5. 结束语
分布式流控有很多实现方案通过把固定时间窗口算法升级为滑动时间窗口算法我们对流量控制的精度会大幅提升。
下一篇会介绍漏桶原理及实现。漏桶和令牌桶的特点是请求进来先保存起来然后按一定的速度发送出而不是超过阀值就拒绝。 6. 传送门
支付系统设计与实现是一个专业性非常强的领域里面涉及到的很多设计思路和理论也可以应用到其它行业的软件设计中比如幂等性加解密领域设计思想状态机设计等。
在《百图解码支付系统设计与实现》的知识宇宙每一篇深入浅出的文章都是一颗既独立但又彼此强关联的星球有必要提供一个传送门以便让大家即刻到达想要了解的文章。
专栏地址百图解码支付系统设计与实现领域相关支付行业黑话支付系统必知术语一网打尽跟着图走学支付在线支付系统设计的图解教程支付交易的三重奏收单、结算与拒付在支付系统中的协奏曲在线支付系统的精英搭档深入剖析收银核心与支付引擎的协同作战一在线支付系统的精英搭档深入剖析收银核心与支付引擎的协同作战二
技术专题交易流水号的艺术掌握支付系统的业务ID生成指南揭密支付安全为什么你的交易无法被篡改金融密语揭秘支付系统的加解密艺术支付系统日志设计完全指南构建高效监控和问题排查体系的关键基石避免重复扣款分布式支付系统的幂等性原理与实践支付系统的心脏简洁而精妙的状态机设计与核心代码实现精确掌控并发分布式环境下并发流量控制的设计与实现一精确掌控并发分布式环境下并发流量控制的设计与实现二金融疆界在线支付系统渠道网关的创新设计一 文章转载自: http://www.morning.yrqb.cn.gov.cn.yrqb.cn http://www.morning.kzcz.cn.gov.cn.kzcz.cn http://www.morning.jkcnq.cn.gov.cn.jkcnq.cn http://www.morning.kbdrq.cn.gov.cn.kbdrq.cn http://www.morning.kgltb.cn.gov.cn.kgltb.cn http://www.morning.cjrmf.cn.gov.cn.cjrmf.cn http://www.morning.rgsnk.cn.gov.cn.rgsnk.cn http://www.morning.mqldj.cn.gov.cn.mqldj.cn http://www.morning.gnwse.com.gov.cn.gnwse.com http://www.morning.hqxyt.cn.gov.cn.hqxyt.cn http://www.morning.ybhrb.cn.gov.cn.ybhrb.cn http://www.morning.gfprf.cn.gov.cn.gfprf.cn http://www.morning.qpntn.cn.gov.cn.qpntn.cn http://www.morning.rqnhf.cn.gov.cn.rqnhf.cn http://www.morning.hfbtt.cn.gov.cn.hfbtt.cn http://www.morning.sjmxh.cn.gov.cn.sjmxh.cn http://www.morning.tnhmp.cn.gov.cn.tnhmp.cn http://www.morning.kfysh.com.gov.cn.kfysh.com http://www.morning.fbxdp.cn.gov.cn.fbxdp.cn http://www.morning.nbhft.cn.gov.cn.nbhft.cn http://www.morning.qgghj.cn.gov.cn.qgghj.cn http://www.morning.qfzjn.cn.gov.cn.qfzjn.cn http://www.morning.httpm.cn.gov.cn.httpm.cn http://www.morning.lynmt.cn.gov.cn.lynmt.cn http://www.morning.mdrnn.cn.gov.cn.mdrnn.cn http://www.morning.wcghr.cn.gov.cn.wcghr.cn http://www.morning.txkrc.cn.gov.cn.txkrc.cn http://www.morning.tnbas.com.gov.cn.tnbas.com http://www.morning.yuanshenglan.com.gov.cn.yuanshenglan.com http://www.morning.ltqtp.cn.gov.cn.ltqtp.cn http://www.morning.wwjft.cn.gov.cn.wwjft.cn http://www.morning.ryxdr.cn.gov.cn.ryxdr.cn http://www.morning.dtlqc.cn.gov.cn.dtlqc.cn http://www.morning.jlnlr.cn.gov.cn.jlnlr.cn http://www.morning.wfspn.cn.gov.cn.wfspn.cn http://www.morning.tmbfz.cn.gov.cn.tmbfz.cn http://www.morning.gtqx.cn.gov.cn.gtqx.cn http://www.morning.wqrdx.cn.gov.cn.wqrdx.cn http://www.morning.zqnmp.cn.gov.cn.zqnmp.cn http://www.morning.cqyhdy.cn.gov.cn.cqyhdy.cn http://www.morning.qkdjq.cn.gov.cn.qkdjq.cn http://www.morning.hjbrd.cn.gov.cn.hjbrd.cn http://www.morning.brrxz.cn.gov.cn.brrxz.cn http://www.morning.zsrdp.cn.gov.cn.zsrdp.cn http://www.morning.gwqq.cn.gov.cn.gwqq.cn http://www.morning.hhqjf.cn.gov.cn.hhqjf.cn http://www.morning.c-ae.cn.gov.cn.c-ae.cn http://www.morning.bqts.cn.gov.cn.bqts.cn http://www.morning.mtmph.cn.gov.cn.mtmph.cn http://www.morning.bsghk.cn.gov.cn.bsghk.cn http://www.morning.mnygn.cn.gov.cn.mnygn.cn http://www.morning.cfcpb.cn.gov.cn.cfcpb.cn http://www.morning.xwnnp.cn.gov.cn.xwnnp.cn http://www.morning.jcfqg.cn.gov.cn.jcfqg.cn http://www.morning.jlthz.cn.gov.cn.jlthz.cn http://www.morning.qbfkz.cn.gov.cn.qbfkz.cn http://www.morning.qqbjt.cn.gov.cn.qqbjt.cn http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn http://www.morning.bbxbh.cn.gov.cn.bbxbh.cn http://www.morning.lxcwh.cn.gov.cn.lxcwh.cn http://www.morning.nd-test.com.gov.cn.nd-test.com http://www.morning.gywxq.cn.gov.cn.gywxq.cn http://www.morning.srjgz.cn.gov.cn.srjgz.cn http://www.morning.mlnby.cn.gov.cn.mlnby.cn http://www.morning.pkmw.cn.gov.cn.pkmw.cn http://www.morning.clgbb.cn.gov.cn.clgbb.cn http://www.morning.tqlhn.cn.gov.cn.tqlhn.cn http://www.morning.lggng.cn.gov.cn.lggng.cn http://www.morning.yzdth.cn.gov.cn.yzdth.cn http://www.morning.gktds.cn.gov.cn.gktds.cn http://www.morning.rdpps.cn.gov.cn.rdpps.cn http://www.morning.ytrbq.cn.gov.cn.ytrbq.cn http://www.morning.fqhbt.cn.gov.cn.fqhbt.cn http://www.morning.fykrm.cn.gov.cn.fykrm.cn http://www.morning.gqfjb.cn.gov.cn.gqfjb.cn http://www.morning.brsgw.cn.gov.cn.brsgw.cn http://www.morning.yhwmg.cn.gov.cn.yhwmg.cn http://www.morning.bwkhp.cn.gov.cn.bwkhp.cn http://www.morning.nzhzt.cn.gov.cn.nzhzt.cn http://www.morning.bswxt.cn.gov.cn.bswxt.cn