当前位置: 首页 > news >正文

爱美眉网站源码西安到北京

爱美眉网站源码,西安到北京,wordpress响应式后台,上海工商信息查询网限流定义及目的 当系统流量达到系统或下游承受能力的阈值时对系统进行限流控制以防止系统或下游挂掉#xff0c;减少影响面。 限流组成#xff1a;阈值及限流策略。阈值是指系统单位时间接收到的请求qps总数#xff1b;限流策略是指限流行业触发后对应的系统行为#xff…限流定义及目的 当系统流量达到系统或下游承受能力的阈值时对系统进行限流控制以防止系统或下游挂掉减少影响面。 限流组成阈值及限流策略。阈值是指系统单位时间接收到的请求qps总数限流策略是指限流行业触发后对应的系统行为如失败拒绝还是放入等待队列。 应用场景 如秒杀业务商品变更消息等场景。 秒杀业务通常来说是保护全链路系统不挂特性是瞬时流量大超过阈值时拒绝策略通常是返回失败。 商品变更消息业务场景是需要将商品变更消息推送给下游商家下游商家系统能力有限因此需要做限制这个场景更多是保护下游系统不挂整条系统链路上最小短板。 分类 4大类计数滑动窗口漏桶令牌。 计数(固定时间窗口) 单位时间窗口内进行计数超过阈值则进行限流。 算法限制只能限制一整秒流量。若出现第1秒中后500ms和第2秒中前500ms超过阈值则此时不生效。 实现代码 import exception.BlockException; import java.util.concurrent.atomic.AtomicInteger; public class CalNumProcessor {//限流窗口大小private static int WINDOW_TIME_MILL 1000;//阈值private static final int LIMIT_NUMS 10;//计数器private AtomicInteger count new AtomicInteger(0);//开始时间private Long startTime;public static void main(String[] args) throws InterruptedException {CalNumProcessor calNumProcessornew CalNumProcessor();for(int i0;i1000;i){System.out.println(i);calNumProcessor.tryIncAndLimit();Thread.sleep(200);}}/*** 进行限流计数超过限流阈值时会抛BlockException*/public void tryIncAndLimit() {//当前时间long curMill System.currentTimeMillis();//开始时间初始化if (startTime null) {startTime curMill;}if ((curMill - startTime) WINDOW_TIME_MILL) {//若时间计数超过一秒则重置计数为0并重新设置计数开始时间count.set(0);startTime curMill;}int after count.incrementAndGet();if (after LIMIT_NUMS) {//超过阈值throw new BlockException();}} } 滑动窗口 计数有个问题在于流量放大无法限流。如1秒为计数窗口。则第一秒后半秒和第二秒前半秒累计可能超过qps限制但由于不是一个时间窗口此时反而不能限制住。 解决思路每次请求计数每过一个时间窗口单位进行滑动计数。 整体算法思路详细 1.构建n个时间窗口单位每个窗口单位有对应qps变量及窗口开始时间初始化时间窗口单位的qps为0及开始时间为当前时间 2.每次获取qps时计算当前时间应该在哪个时间窗口单位 3.循环处理时间窗口如果发现当前时间与时间窗口单位超过1秒时间窗口单位最大时间则重置窗口开始时间及qps为0。 4.将当前时间对应时间窗口qps加1 5.返回所有时间窗口单位qps累计值 代码实现 import java.time.LocalTime; import java.util.concurrent.atomic.AtomicInteger;public class TimeWindow {/*** 时间窗口大小如1秒*/private int windowTimeSize;/*** 窗口数*/private int windowNum;private Window[] windows;private int maxQps;public TimeWindow(int maxQps, int windowTimeSize, int windowNum) {this.maxQps maxQps;this.windowTimeSize windowTimeSize;this.windowNum windowNum;windows new Window[windowNum];for (int i 0; i windowNum; i) {windows[i] new Window();windows[i].setQps(new AtomicInteger(0));windows[i].setStartTime(System.currentTimeMillis());}}public static void main(String[] args) throws InterruptedException {int qps 2;int count 20;int sleep 300;int success 0;TimeWindow timeWindow new TimeWindow(qps, 1000, 10);for (int i 0; i count; i) {Thread.sleep(sleep);if (timeWindow.tryAcquire()) {success;if (success % qps 0) {System.out.println(LocalTime.now() : success, );} else {System.out.print(LocalTime.now() : success, );}} else {System.out.println(LocalTime.now() : fail);}}System.out.println();System.out.println(实际测试成功次数: success);}public boolean tryAcquire() {//计算当前时间落到哪个窗口位置int index (int) (System.currentTimeMillis() % windowTimeSize) / (windowTimeSize / windowNum);//当前时间若超过时间累计窗口则重置窗口参数int r 0;for (int i 0; i windowNum; i) {Window curWindow windows[i];if ((System.currentTimeMillis() - curWindow.getStartTime()) windowTimeSize) {//当前时间减去时间窗口大于最大累计时间窗口大小则重置变量curWindow.setQps(new AtomicInteger(0));curWindow.setStartTime(System.currentTimeMillis());}//当前时间对应窗口累计qpsif (index i) {curWindow.getQps().incrementAndGet();}r curWindow.getQps().get();}return r maxQps;}class Window {/*** qps*/private AtomicInteger qps;/*** 开始时间*/private long startTime;public AtomicInteger getQps() {return qps;}public void setQps(AtomicInteger qps) {this.qps qps;}public long getStartTime() {return startTime;}public void setStartTime(long startTime) {this.startTime startTime;}} } 漏桶算法 流出衡定不能应对突发流量能较好保护下游。 令牌算法 优能处理突出流量流入相对衡定流出允许有波动。秒杀场景适用。 这里核心概念令牌桶有令牌数及桶上限2个参数令牌获取令牌存放令牌 存放令牌策略有1、有单独线路每秒加入n个令牌(相当于qps为n)2、懒计算当获取令牌请求到来时进行计算计算思路Math.min(当前时间距离上次已存放令牌时间间隔秒数*令牌qps,令牌数上限)。 代码 RateLimiter rateLimiter RateLimiter.create(2);for (int i 0; i 10; i) {String time LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_TIME);System.out.println(time : rateLimiter.tryAcquire());Thread.sleep(250);} 实现产品 guava阿里的sentinal。TODO。
http://wiki.neutronadmin.com/news/439144/

相关文章:

  • 安徽网站开发推荐垡头网站建设
  • 网站建设标书范本打开浏览器直接进入网站
  • 包包网站建设策划书会HTML怎么做网站
  • 网站建设电话销售说不需要哪个学校设有网站开发专业
  • 哈尔滨建设厅官方网站怎么在网站上放广告
  • 天水市网站建设有了php源码怎么做网站
  • 做网站怎样做才有百度快照顺义区快速建站
  • 免费的素材网站推荐贵州省住房和城乡建设部网站
  • 网站建设工作安排方案顺德手机网站设计权威
  • 静态网站系统wordpress 购物 插件
  • 做php网站的环境贵阳市住房建设局网站
  • 商丘企业网站建设公司wordpress vue react
  • 网站免费创建湖南省建设信息网站
  • 做盗版网站的做网站维护的人叫啥
  • 广州网站营销wordpress 进销存
  • 手机网站建设过程网站建设书案例
  • 果乐宝的网站建设上海企业网站优化
  • 营销型网站免费企业网站模版南京推广平台有哪些
  • 建网站商城乡镇网站模板
  • 商城型网站建设wordpress使用数据库
  • 网站开发与维护考察试题wordpress采集后seo
  • 住房和城乡建设部网站职称查询北川建设局网站
  • 手机卡盟网站建设代码生成器软件
  • 有后台的网站模板购物网站的做
  • 重庆网站建设制作设计公司哪家好网站需求怎么做
  • 网站在百度的图标显示不正常技术开发合同
  • php新手网站开发市场营销策划ppt
  • 苏州建站模板搭建南宁seo排名原理
  • 企业网站设计素材网站开发与设计实训总结
  • 电商网站建设实训总结自己做网站网页文件在哪里