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

网站目录做跳转高级网站开发软件

网站目录做跳转,高级网站开发软件,南宁网站建设公司电话,查网站域名备案价格固定时间窗口 在开发限流组件的时候#xff0c;我们需要统计一个时间区间内的请求数#xff0c;比如以分钟为单位。所谓固定时间窗口#xff0c;就是根据时间函数得到当前请求落在哪个分钟之内#xff0c;我们在统计的时候只关注当前分钟之内的数量#xff0c;即 [0s, 60…固定时间窗口 在开发限流组件的时候我们需要统计一个时间区间内的请求数比如以分钟为单位。所谓固定时间窗口就是根据时间函数得到当前请求落在哪个分钟之内我们在统计的时候只关注当前分钟之内的数量即 [0s, 60s]因为流量并不是均匀的所以就会出现在两个分钟之间超过阈值1分50秒时来了150个请求在2分10秒时来了150个请求如果我们设置的阈值是200这就超过了阈值这会对系统造成隐患。 固定时间窗口的主要特征是取样窗口直接从当前分钟跳到下一分钟。 滑动时间窗口 如果一个请求到达我们根据请求的时间倒推一分钟然后统计此区间的请求数来判断是否超过阈值这就是滑动窗口即窗口是缓慢滑动的。显然这种方式效率不高每次都要统计。 做一个折中将一分钟分成10个小窗口每个请求都落到其中一个小窗口上每次以小窗口为单位移动并且请求数实时统计到小窗口中这样只需要将10个窗口加起来和阈值比较。 实现原理 此处可以参考环形队列的设计思想采样长度为10的数组作为小窗口一个游标指向最新的窗口时间最新如果窗口发生了滑动就将游标移动到特定位置。 由于请求的到来不是连续的所以Front的移动可能是跳跃式的。 每向前滑动一个小窗口就意味着头部增加一个尾部舍弃一个如果发生了跳跃那么尾部要舍弃多个同时中间要补0。即从第二圈开始Front 划过的地方都要被置为0。 简单模拟如下第一行值为9的地方为Front向右滑动来到第二行依次类推。在第四行时出现了跳跃。 0123456789123456789x23456789xy56789xy00z整理0123456789x123456789xy23456789xy00z56789 算法与测试 package pluginimport (logtime )// 滑动窗口 type WindowLeapArray struct {Arr []int // 窗口数据Front int // 游标FrontTime int64 // 游标最新时间WindowStatus bool // 窗口状态true 为 拒绝访问 }func NewWindowLeapArray(windowNum int) *WindowLeapArray {return WindowLeapArray{Arr: make([]int, windowNum),} }// Check 限流计算 func (w *WindowLeapArray) Check(threshold int) bool {timenow : time.Now()start : w.FrontTimefrontTimeLeft : timenow.UnixMilli() - timenow.UnixMilli()%100index : (timenow.UnixMilli() - 1000*timenow.Unix()) / 100if w.FrontTime 0 {// 记为小窗口的左侧时间 1694678187869 - 1694678187800w.FrontTime frontTimeLeftw.Front int(index)w.Arr[w.Front]log.Println(timenow.UnixMilli(), start, (timenow.UnixMilli()-start)/100, w.Arr)return true}// 时间差gaptime : (timenow.UnixMilli() - w.FrontTime)if gaptime 100 {// 同一小窗口if w.WindowStatus {log.Println(timenow.UnixMilli(), start, (timenow.UnixMilli()-start)/100, w.Arr)return false}// 统计var sum intfor _, v : range w.Arr {sum sum v}if sum threshold {w.WindowStatus truelog.Println(timenow.UnixMilli(), start, (timenow.UnixMilli()-start)/100, w.Arr)return false} else {w.Arr[w.Front]}} else {// 滑动采用环形数组// 可能存在跳跃w.WindowStatus falsew.FrontTime frontTimeLeftgap : gaptime / 100if gap 10 {for i : 0; i 10; i {w.Arr[i] 0}} else {for i : 1; i int(gap); i {tmp : w.Front iif tmp 10 {tmp tmp - 10}w.Arr[tmp] 0}}w.Front int(index)// 统计var sum intfor _, v : range w.Arr {sum sum v}if sum threshold {w.WindowStatus truelog.Println(timenow.UnixMilli(), start, (timenow.UnixMilli()-start)/100, w.Arr)return false} else {w.Arr[w.Front] 1}}log.Println(timenow.UnixMilli(), start, (timenow.UnixMilli()-start)/100, w.Arr)return true }单元测试 func TestFun(t *testing.T) {w : plugin.NewWindowLeapArray(10)for i : 0; i 30; i {re : w.GlobalCheck()log.Println(re)n : util.RandInt(30, 3000)time.Sleep(time.Duration(n) * time.Millisecond)} }输出 2023/09/15 11:48:09 1694749689568 0 16947496895 [0 0 0 0 0 1 0 0 0 0] 2023/09/15 11:48:09 true 2023/09/15 11:48:11 1694749691250 1694749689500 17 [0 0 1 0 0 0 0 0 0 0] 2023/09/15 11:48:11 true 2023/09/15 11:48:12 1694749692007 1694749691200 8 [1 0 1 0 0 0 0 0 0 0] 2023/09/15 11:48:12 true 2023/09/15 11:48:12 1694749692083 1694749692000 0 [2 0 1 0 0 0 0 0 0 0] 2023/09/15 11:48:12 true 2023/09/15 11:48:13 1694749693857 1694749692000 18 [0 0 0 0 0 0 0 0 1 0] 2023/09/15 11:48:13 true 2023/09/15 11:48:14 1694749694213 1694749693800 4 [0 0 1 0 0 0 0 0 1 0] 2023/09/15 11:48:14 true 2023/09/15 11:48:15 1694749695227 1694749694200 10 [0 0 1 0 0 0 0 0 0 0] 2023/09/15 11:48:15 true 2023/09/15 11:48:15 1694749695388 1694749695200 1 [0 0 1 1 0 0 0 0 0 0] 2023/09/15 11:48:15 true 2023/09/15 11:48:16 1694749696076 1694749695300 7 [1 0 1 1 0 0 0 0 0 0] 2023/09/15 11:48:16 true 2023/09/15 11:48:16 1694749696590 1694749696000 5 [1 0 0 0 0 1 0 0 0 0] 2023/09/15 11:48:16 true 2023/09/15 11:48:18 1694749698828 1694749696500 23 [0 0 0 0 0 0 0 0 1 0] 2023/09/15 11:48:18 true 2023/09/15 11:48:20 1694749700913 1694749698800 21 [0 0 0 0 0 0 0 0 0 1] 2023/09/15 11:48:20 true 2023/09/15 11:48:22 1694749702052 1694749700900 11 [1 0 0 0 0 0 0 0 0 0] 2023/09/15 11:48:22 true 2023/09/15 11:48:23 1694749703076 1694749702000 10 [1 0 0 0 0 0 0 0 0 0] 2023/09/15 11:48:23 true 2023/09/15 11:48:23 1694749703422 1694749703000 4 [1 0 0 0 1 0 0 0 0 0] 2023/09/15 11:48:23 true 2023/09/15 11:48:23 1694749703781 1694749703400 3 [1 0 0 0 1 0 0 1 0 0] 2023/09/15 11:48:23 true 2023/09/15 11:48:23 1694749703990 1694749703700 2 [1 0 0 0 1 0 0 1 0 1] 2023/09/15 11:48:23 true 2023/09/15 11:48:26 1694749706029 1694749703900 21 [1 0 0 0 0 0 0 0 0 0] 2023/09/15 11:48:26 true 2023/09/15 11:48:28 1694749708168 1694749706000 21 [0 1 0 0 0 0 0 0 0 0] 2023/09/15 11:48:28 true 2023/09/15 11:48:29 1694749709514 1694749708100 14 [0 0 0 0 0 1 0 0 0 0] 2023/09/15 11:48:29 true 2023/09/15 11:48:30 1694749710850 1694749709500 13 [0 0 0 0 0 0 0 0 1 0] 2023/09/15 11:48:30 true ......推理过程 网关既要支持全局限流也要支持IP限流完整代码
http://www.pierceye.com/news/758446/

相关文章:

  • 简单的企业网站phpwordpress 图标插件
  • 网页界面设计评分标准东营网站关键字优化
  • 手表网站背景素材玉山网站建设
  • 增城新塘网站建设温州网站推广效果
  • 东莞市住房建设局网站编程能干什么
  • asp做一个简单网站推广图片素材
  • 新网站一直不被收录wordpress 视频 广告
  • 网站建设费账务处理一个小胖子从网站做任务的网站故事
  • 国外被墙网站东营建设信息网最新消息
  • iphone下载网页视频北京百度seo排名公司
  • 怎么自己做网站免费的衡阳seo网站推广
  • 一键生成论文的网站做亚马逊有哪些网站可以清货
  • 一屏网站模板下载 迅雷下载 迅雷下载地址网站建设合并但与那个
  • 营销型网站四大功能吉林市网站制作
  • 如何制作钓鱼网站网页制作基础教程9787121095306教案
  • 专业定制网站企业吉林省住房城乡建设厅网站首页
  • 免费高清素材网站方维网络科技有限公司
  • 长春行业网站重庆智能建站模板
  • 北湖区网站建设公司wordpress的cute主题
  • 沈阳网站建设 景乔科技网站制作杭州
  • 网站维护工程师月薪多少精品网站建设公
  • 永久免费企业网站申请网站开发主框架一般用什么布局
  • 网站做非经营性广告需备案python免费看电影的应用
  • 网站分哪些种类自己做网站模版
  • 汪峰做的音乐网站长沙制作公园仿竹护栏实体厂家
  • 深圳专业网站建设公司排名好的h5网站模板
  • h5做网站教程网店营销的推广方法有哪些
  • 网站关键词快速排名工具wordpress子主题
  • 做百度网站那家好google 网站质量问题
  • 网站建设维护书网站资料清单