React SSR中的限流怎么实现


这篇文章主要介绍“ReactSSR中的限流怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ReactSSR中的限流怎么实现”文章能帮助大家解决问题。如下所示是一个简单的 nodejs 服务端项目:其中,我们通过Buffer来模拟 SSR 过程会大量的占用内存的情况。然后,通过docker build -t ssr .指定将我们的项目打包成一个镜像,并通过以下命令运行一个容器:我们将容器内存限制在 512m,并通过--oom-kill-disable指定容器内存不足时不关闭容器。接下来,我们通过autocannon来进行一下压测:通过,docker stats可以看到容器的运行情况:此时,容器内存已经全部被占用,服务对外失去了响应,通过curl -m 5 http://localhost:2048访问,收到了超时的错误提示:curl: (28) Operation timed out after 5001 milliseconds with 0 bytes received我们改造一下代码,使用counter.js来统计 QPS,并限制为 2:此时,容器运行正常:虽然此时访问/路由会收到错误:但是/another却不受影响:由此可见,限流确实是系统进行自我保护的一个比较好的方法。常见的限流算法有“滑动窗口算法”、“令牌桶算法”,我们这里讨论“令牌桶算法”。在令牌桶算法中,存在一个桶,容量为burst。该算法以一定的速率(设为rate)往桶中放入令牌,超过桶容量会丢弃。每次请求需要先获取到桶中的令牌才能继续执行,否则拒绝。根据令牌桶的定义,我们实现令牌桶算法如下:然后,按照如下方式使用:简单解释一下这个算法,调用take时,会先执行免费云主机域名refill先往桶中进行填充。填充的方式也很简单,首先计算出与上次填充的时间间隔elapse毫秒,然后计算出这段时间内应该补充的令牌数,因为令牌补充速率是rate个/秒,所以需要补充的令牌数为:又因为令牌数不能超过桶的容量,所以补充后桶中的令牌数为:注意,这个令牌数是可以为小数的。令牌桶算法具有以下两个特点:当外部请求的 QPSM大于令牌补充的速率rate时,长期来看,最终有效的 QPS 会趋向于rate。这个很好理解,拉的总不可能比吃的多吧。因为令牌桶可以存下burst个令牌,所以可以允许短时间的激增流量,持续的时间为:可以理解为一个水池里面有burst的水量,进水的速率为rate,出水的速率为M,则净出水速率为M-rate,则水池中的水放空的时间即为激增流量的持续时间。关于“ReactSSR中的限流怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。

相关推荐: php7 opcache开启不了如何解决

今天小编给大家分享一下php7 opcache开启不了如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 php7开启opcache的方法:…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/19 18:14
下一篇 03/19 18:14

相关推荐