阜新建设网站wordpress 音乐不中断

news/2025/10/7 2:11:19/文章来源:
阜新建设网站,wordpress 音乐不中断,wordpress数据库响应时间过长,建筑设计网页0、基础知识 1000毫秒内#xff0c;允许2个请求#xff0c;其他请求全部拒绝。 不拒绝就可能往db打请求#xff0c;把db干爆~ interval 1000 rate 2#xff1b; 一、固定窗口限流 固定窗口限流算法#xff08;Fixed Window Rate Limiting Algorithm#xff09;是…0、基础知识 1000毫秒内允许2个请求其他请求全部拒绝。 不拒绝就可能往db打请求把db干爆~ interval 1000  rate  2 一、固定窗口限流 固定窗口限流算法Fixed Window Rate Limiting Algorithm是一种最简单的限流算法其原理是在固定时间窗口(单位时间)内限制请求的数量。通俗点说主要通过一个支持原子操作的计数器来累计 1 秒内的请求次数当 1 秒内计数达到限流阈值时触发拒绝策略。每过 1 秒计数器重置为 0 开始重新计数。 /*** 固定窗口限流算法* 比如1000ms 允许通过10个请求* author jeb_lin* 14:14 2023/11/19*/ public class FixWindowRateLimiter {private long interval; // 窗口的时间间隔private long rate; // 限制的调用次数private long lastTimeStamp; // 上次请求来的时间戳private AtomicLong counter; // 计数器public FixWindowRateLimiter(long interval,long rate){this.interval interval;this.rate rate;this.lastTimeStamp System.currentTimeMillis();this.counter new AtomicLong(0);}public static void main(String[] args) {// 比如1000ms 允许通过10个请求FixWindowRateLimiter limiter new FixWindowRateLimiter(1000,2);for (int i 0; i 4; i) {if(limiter.allow()){System.out.println(i - ok );} else {System.out.println(i - no);}}}private boolean allow() {long now System.currentTimeMillis();if(now - lastTimeStamp interval){counter.set(0L);lastTimeStamp now;}if(counter.get() rate){return false;} else {counter.incrementAndGet();return true;}} } 输出: 0 - ok 1 - ok 2 - no 3 - no 优点 简单易懂 缺陷 存在临界问题 本来就允许1秒内进来2个请求这时候进来了4个 /*** 测试不正常的情况*/private static void testUnNormal() throws Exception{// 比如1000ms 允许通过10个请求FixWindowRateLimiter limiter new FixWindowRateLimiter(1000,2);Thread.sleep(500);for (int i 0; i 4; i) {if(limiter.allow()){System.out.println(i - ok );} else {System.out.println(i - no);}Thread.sleep(250);}} 输出 0 - ok 1 - ok 2 - ok 3 - ok 二、滑动窗口限流 滑动窗口限流算法是一种常用的限流算法它将单位时间周期分为n个小周期分别记录每个小周期内接口的访问次数并且根据时间滑动删除过期的小周期。比如上图的示例中每 500ms 滑动一次窗口就可以避免这种临界问题可以发现窗口滑动的间隔越短时间窗口的临界突变问题发生的概率也就越小不过只要有时间窗口的存在还是有可能发生时间窗口的临界突变问题。 类似于微积分假如我切成1000个窗口每1ms一个计数器 /*** 滑动窗口限流算法* 比如1000ms 允许通过 2 个请求** author jeb_lin* 14:14 2023/11/19*/ public class SlidingWindowRateLimiter {private long interval; // 窗口的时间间隔private long maxRequest; // 限制的调用次数private MapLong, AtomicLong millToCount null; // 假如1秒切成1000个窗口也就是1毫秒一个计数器private LinkedListLong timeStampList null; // 出现请求的那个时间戳需要记录下来用于后期的删除private AtomicLong counter; // 计数器public SlidingWindowRateLimiter(long interval, long maxRequest) {this.interval interval;this.maxRequest maxRequest;this.millToCount new HashMap();this.timeStampList new LinkedList();this.counter new AtomicLong(0);}public static void main(String[] args) throws Exception {testNormal();}/*** 测试正常的情况*/private static void testNormal() {// 比如1000ms 允许通过10个请求SlidingWindowRateLimiter limiter new SlidingWindowRateLimiter(1000, 2);for (int i 0; i 10; i) {if (limiter.allow()) {System.out.println(i - ok );} else {System.out.println(i - no);}}}private boolean allow() {long now System.currentTimeMillis();// 剔除掉过期的窗口比如现在是1001ms那么1ms的窗口就需要剔除掉while (!timeStampList.isEmpty() now - interval timeStampList.getFirst()) {long timeStamp timeStampList.poll();for (int i 0; i millToCount.getOrDefault(timeStamp,new AtomicLong(0)).get(); i) {counter.decrementAndGet();}millToCount.remove(timeStamp);}if (counter.get() maxRequest) {return false;} else {timeStampList.add(now); // 当前出现成功请求那么串上listAtomicLong timeStampCounter millToCount.getOrDefault(now, new AtomicLong(0L));timeStampCounter.incrementAndGet();millToCount.put(now, timeStampCounter);counter.incrementAndGet();return true;}} } 优点 简单易懂精度高通过调整时间窗口的大小来实现不同的限流效果 缺陷 依旧存在临界问题不可能无限小占用更多内存空间 三、漏桶算法固定消费速率 漏桶限流算法Leaky Bucket Algorithm拥有更平滑的流量控制能力。其中漏桶是一个形象的比喻这里可以用生产者消费者模式进行说明请求是一个生产者每一个请求都如一滴水请求到来后放到一个队列漏桶中而桶底有一个孔不断的漏出水滴就如消费者不断的在消费队列中的内容消费的速率漏出的速度等于限流阈值。即假如 QPS 为 2则每 1s / 2 500ms 消费一次。漏桶的桶有大小就如队列的容量当请求堆积超过指定容量时会触发拒绝策略。 类似于Kafka的消费者在不调整配置的情况下消费速度是固定的多余的请求会积压如果超过你kafka配置的topic最大磁盘容量那么会丢消息。topic是一个目录topic下N个partition目录假如你每个partition配置了1G的容量那么超过这个这个容量就会删除partition下的segement文件 xxx.index,xxx.log /*** 漏桶算法* 比如 1秒只能消费2个请求** author jeb_lin* 15:55 2023/11/19*/ public class LeakyBucketRateLimiter {private int consumerRate; // 消费速度private Long interval; // 时间间隔比如1000msprivate int bucketCapacity; // 桶的容量private AtomicLong water; // 桶里面水滴数量public LeakyBucketRateLimiter(int consumerRate, Long interval, int bucketCapacity) {this.consumerRate consumerRate;this.interval interval;this.bucketCapacity bucketCapacity;this.water new AtomicLong(0);scheduledTask();}// 周期任务比如每1000ms消费2个请求private void scheduledTask() {ScheduledExecutorService service Executors.newScheduledThreadPool(1);service.scheduleAtFixedRate((Runnable) () - {for (int i 0; i consumerRate water.get() 0; i) {this.water.decrementAndGet();}System.out.println(water - this.water.get());}, 0, interval, TimeUnit.MILLISECONDS);}public static void main(String[] args) {// 1000毫秒消费2个请求LeakyBucketRateLimiter limiter new LeakyBucketRateLimiter(2, 1000L, 10);for (int i 0; i 10; i) {if (limiter.allow()) {System.out.println(i - ok);} else {System.out.println(i - no);}}}private boolean allow() {if (bucketCapacity water.get() 1) {return false;} else {water.incrementAndGet();return true;}} } 输出 0 - ok 1 - ok 2 - no 3 - no 4 - no 5 - no 6 - no 7 - no 8 - no 9 - no 优点 可以控制请求的处理速度避免过载或者过度闲置避免瞬间请求过多导致系统崩溃或者雪崩。可以通过调整桶的大小和漏出速率来满足不同的限流需求这个基本靠手动 缺陷 需要对请求进行缓存会增加服务器的内存消耗。但是面对突发流量的时候漏桶算法还是循规蹈矩地按照固定的速率处理请求。 四、令牌桶算法 令牌桶算法是一种常用的限流算法相对于漏桶算法它可以更好地应对突发流量和解决内存消耗的问题。该算法维护一个固定容量的令牌桶每秒钟会向令牌桶中放入一定数量的令牌。当有请求到来时如果令牌桶中有足够的令牌则请求被允许通过并从令牌桶中消耗一个令牌否则请求被拒绝。 4.2 令牌桶限流代码实现 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong;/*** 令牌桶限流算法* 每 1000ms 生成2个令牌** author jeb_lin* 14:14 2023/11/19*/ public class TokenBucketRateLimiter {private long interval; // 窗口的时间间隔private long rate; // 速率private AtomicLong tokenCounter; // 令牌的数量private final long bucketCapacity; // 桶的大小public TokenBucketRateLimiter(long interval, long rate ,long bucketCapacity) {this.interval interval;this.rate rate;this.tokenCounter new AtomicLong(0);this.bucketCapacity bucketCapacity;scheduledProduceToken();}private void scheduledProduceToken() {ExecutorService executorService Executors.newScheduledThreadPool(1);((ScheduledExecutorService) executorService).scheduleAtFixedRate(new Runnable() {Overridepublic void run() {// 桶里面放不下了if(tokenCounter.get() rate bucketCapacity){System.out.println(bucket is full);return;}long token tokenCounter.addAndGet(rate);System.out.println(token - token);}}, 0, interval, TimeUnit.MILLISECONDS);}public static void main(String[] args) throws Exception {testNormal();}/*** 测试正常的情况*/private static void testNormal() throws Exception{// 比如1000ms 允许通过10个请求TokenBucketRateLimiter limiter new TokenBucketRateLimiter(1000, 2,10);// 模拟瞬时流量5秒前都没请求5秒后瞬时流量上来了Thread.sleep(5000);for (int i 0; i 12; i) {if (limiter.allow()) {System.out.println(i - ok );} else {System.out.println(i - no);}}}private boolean allow() {if(tokenCounter.get() 0){tokenCounter.getAndDecrement();return true;}return false;} } 输出 token - 2 token - 4 token - 6 token - 8 token - 10 bucket is full 0 - ok 1 - ok 2 - ok 3 - ok 4 - ok 5 - ok 6 - ok 7 - ok 8 - ok 9 - ok 10 - no 11 - no 优点 Guava的RateLimiter限流组件就是基于令牌桶算法实现的。 精度高令牌桶算法可以根据实际情况动态调整生成令牌的速率可以实现较高精度的限流。弹性好令牌桶算法可以处理突发流量可以在短时间内提供更多的处理能力以处理突发流量。 缺陷 实现复杂在短时间内有大量请求到来时可能会导致令牌桶中的令牌被快速消耗完从而限流。这种情况下可以考虑使用漏桶算法。需要削峰填谷学习kafka就用漏桶算法时间精度要求高令牌桶算法需要在固定的时间间隔内生成令牌因此要求时间精度较高如果系统时间不准确可能会导致限流效果不理想。 五、集群限流 参考阿里的 cluster-flow-control | Sentinelcluster-flow-controlhttps://sentinelguard.io/zh-cn/docs/cluster-flow-control.html FQA 1、为什么要有集群限流 假如我的商品A服务有20台服务器每台服务器设置了单机限流比如说100QPS那么集群的QPS应该是2000但是由于流量分配不均导致有200QPS打到了同一台机器此时就触发了限流。 2、为什么集群限流推荐独立部署的模式 Sentinel 提供了独立部署模式和嵌入应用的模式假如是使用嵌入模式也就是我的商品A服务里面有一台服务器是需要提供总体Token统计工作的那么很容易出现单机故障也容易出现假死的现象。因为这台机器本身是有业务在身的本身是有负载的。相同的原理出现在ES的Node节点管理上es的Node节点有Master节点和Data节点Data节点负责document的index和queryMaster节点专心干集群和index的管理工作比如新增删除index分工明确假如Master的功能放在Data上那么可能由于某一时间来了一条特殊的query命令需要进行复杂的计算或者返回大数据的话或者gc等情况那么这个Node节点可能无法对外提供服务造成假死现象那么这个Master就会重新选举到时候可能出现脑裂的情况 3、剩余令牌数量在哪管理 假如我的商品服务A的接口Interface-1 设置的集群限流是 1000QPS那么当目前有500QPS的时候剩余令牌数量A1tokenCounter可以理解为剩下500个那么这个500维护在哪 众所周知Token Server的服务不可能只有一台机器分布式部署下为了系统的高可用Token Server假如有10台机器 a、那么是这10台 Token Server机器都维护了商品服务A的接口Interface-1的 A1tokenCounter 数据吗 如果是那么如何更新数据如何同步到各台机器 b、如果数据不是在10台Token Server维护的而是在Redis中维护的然后每次都去请求Redis那么接下来的问题是Redis也是有Master和N台Slaver 你读的是Slaver机器那么主从延迟情况下你怎么保证QPS不会超出你设定的QPS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单美食网站模板怀宁建设局网站

文章目录 1. 为什么要建立自己的交易系统2. 一个朋友的交易体系分享2.1 开仓原则2.2 计算盈亏比2.3 第三原则:资金管理原则2.4 持股原则2.5 技术指标 3. 作者本人的交易系统 1. 为什么要建立自己的交易系统 有稳定的交易系统,会让人很清晰的 知道什么样…

网站怎么做啊变装 wordpress

区别 核心区别:显存,也被称作帧缓存。独立显卡拥有独立显存,而集成显卡通常是没有的,需要占用部分主内存来达到缓存的目的 集成显卡: 是集成在主板上的,与主处理器共享系统内存。 一般会在很多轻便薄型的…

caddy搭建静态+PHP+伪静态Web服务器

caddy搭建静态+PHP+伪静态Web服务器feieryun-v2.hk2.anan.cc {handle_path /AdminLTE/* {root C:\data\service\caddy\www\AdminLTEfile_serverencode}handle_path /static/* {root C:\data\service\caddy\www\v2.feie…

网站营销信息做调查问卷能赚钱的网站

NumPy数据处理详解的笔记3 第1章NumPy基础 NumPy是用于处理多维数组的数值运算库,不仅可用于 机器学习,还可以用于图像处理,语言处理等任务。 1.4 切片 python编程语言对数组切片功能有支持, NumPy 的ndarray 的切片功能是类似的&#xf…

全自动 AI 视频创作与发布工具:LuoGen-agent

对于短视频创作者而言,内容制作往往耗时且流程繁琐——从脚本撰写到口播录制,再到字幕、BGM、封面和发布,每个环节都需要投入大量精力。为了让创作者能专注于创意本身,LuoGen-agent 提供了一套完整的 AI 自动化解决…

网站建设丶金手指花总13大连建设工程信息网去哪里找

先按照https://zhuanlan.zhihu.com/p/494988089说明下载好Gitblit然后复制到tomcat的webapps目录下,如下: 双击"startup.bat"启动tomcat: 然后访问"http://127.0.0.1:8080/gitblit/"即可看到git的界面: 说明git服务器已经能够成功运行了! Vmware虚拟机…

会做网站开发 但是不会二次开发广告公司 网站制作

虽说使用的人大都对微软没什么好感,但不能否认微软确实也出了不少好东西呀,比如微软鼠标(IE系列) icon_smile.gif IE2.0和以上版本都有5个按钮,除了正常的左中右外,两侧还各有一个,在windows中可用来支持浏览器的前进/…

wordpress登录循环安徽关键词seo

JSP(Java Server Page)是J2EE的功能模块,是Java服务器页面,由Web服务器执行,作用就是降低动态网页开发难度,将Java代码与HTML分离,降低开发难度,本质就是Servlet。 Servlet的缺点&a…

qq空间关闭申请网站荥阳网站制作

第一次见这个题,看时间小于O(N)。。。。。 只能是二分啊。 但是怎么二分,条件是什么,真的想不到。 后来知道了,我们要找最深一层最右边那个结点。借此确定结点个数。 我们知道,满二叉树的结点个数和深度是有公式的&a…

站长工具域名wordpress外国主题

目录 常见思路更优的解法(面试官喜欢的) 常见思路 要选出最小的前K个数首先我们会想到排排升序建大堆,排降序建小堆 一个直观的想法是使用(小根堆),起始将所有元素放入堆中,然后再从堆中取出k 个…

静态库.a与.so库文件的生成与使用

任务一.用gcc生成静态库和动态库 1.1在ubuntu系统中创建一个目录来保存程序文件并编辑三个程序hello.h,hello.c,main.c。 先通过后端代码创建目录然后用vim文本编辑器编辑三个程序文件 程序1 hello.h:程序2 hello.c:程…

CF2145D Inversion Value of a Permutation

错题好题集第二篇。 题意 你需要构造一个长度为 \(n\) 的排列,使得它的逆序值恰好为 \(k\)。逆序值的定义 对于一个排列 $p$,我们将其逆序值定义为至少包含一个逆序对的子段的数量。形式上,这就是满足以下条件的一对…

朔州如何做百度的网站网站数据库做好了 怎么做网页

一、服务器准备 1、服务器配置 准备3台服务器,建议最低配置如下(阿里云大约每台每月六百多): centos7.4 8c 16G 39.101.192.109 node001 39.101.179.3 node002 39.99.236.205 node003 为服务器开启外网端口访问 7180、8900 2…

阿里 做网站北京市住房建设网站

SpringBoot教程(十六) | SpringBoot集成swagger(全网最全) 一. 接口文档概述 swagger是当下比较流行的实时接口文文档生成工具。接口文档是当前前后端分离项目中必不可少的工具,在前后端开发之前,后端要先出接口文档&#xff0c…

网站开发工具蜡笔小新网页设计制作网站大一素材

作为一个站长,当你的网站流量逐渐变大时,就会发现目前的主机无法满足正常需要,就要更换更高一级的云主机或VPS主机,新手就需要使用WinSCP和Putty,来管理主机。IIS7服务器管理工具可以批量管理、定时上传下载、同步操作…

网站建设公司自适应源码互联网技术发展现状

macOs系统安装软件的疑问 所有问题mac系统文件结构我用mac安装软件,不用像windows一样创建文件夹吗只能安装到Applications文件夹吗安装程序的指南和提供的安装选项是什么软件安装在Applications下的/appName文件夹,它的所有数据都会在该文件夹吗如果卸载…

网站开发公司怎么找客户开发工具在哪里 word

汇编语言应该是我们如今学的最“低级”的语言了,由于如今不会再有人去学机器语言了。而汇编语言还在一些硬件或者嵌入式设备上使用并开发着。下面资料是为了大学的汇编考试整理的资料,如今与大家分享,希望能给大家提供帮助。 汇编语言程序设计…

牛客刷题-Day8

动态规划1:线性dp、背包问题,区间 https://ac.nowcoder.com/acm/contest/24213?from=acdiscuss牛客刷题-Day8 今日刷题:\(1036-1040\) 1036 凸多边形的划分 题目描述 给定一个具有 \(N\) 个顶点的凸多边形,将顶点…

网站开发 博客长沙百度网站制作

1、父组件可以使用 props 把数据传给子组件。 2、子组件可以使用 $emit 触发父组件的自定义事件。 vm.$emit( event, arg ) //触发当前实例上的事件 vm.$on( event, fn );//监听event事件后运行 fn&#xff1b; 例如&#xff1a;子组件&#xff1a; <template><di…

泉州模板做网站厦门酒店网站建设

在本篇博客中&#xff0c;我们将探讨 UserDetailsService 的重要性&#xff0c;以及如何通过实际示例在 Spring Security 中实现它。 理解 UserDetailsService UserDetailsService 是 Spring Security 提供的一个接口&#xff0c;用于在认证过程中获取用户详细信息。DaoAuthe…