如果想要获得最近1小时访问服务器的请求数?

简介: 如果想要获得最近1小时访问服务器的请求数,有什么好算法呢?:因为日志分析比较慢,如何通过统计来实现这一功能呢?目录目录问题描述队列优化方法Bit Map 注意不要盲目相信以下内容! 不要盲目相信以下内容! 不要盲目相信以下内容! (重要的事情说三遍),虽然以下内容也经过了我的验证,但是我的验证可能有错误的地方,欢迎大家留言告知。

如果想要获得最近1小时访问服务器的请求数,有什么好算法呢?:因为日志分析比较慢,如何通过统计来实现这一功能呢?

目录


注意不要盲目相信以下内容! 不要盲目相信以下内容! 不要盲目相信以下内容! (重要的事情说三遍),虽然以下内容也经过了我的验证,但是我的验证可能有错误的地方,欢迎大家留言告知。希望这篇文章成为你深入探索相关领域的引子启发,而不是标准答案


问题描述

假设你可以屏蔽掉http请求解析的部分,已经封装好了,如果有请求到来,就会告诉你XXh:XXm:XXs:XXms有一个请求来了,那怎么做到统计最近一个小时的请求数?

队列

队列因为请求是按时间顺序排列的,所以其实是个先进先出的,那么使用的数据结构肯定是队列。

这时可以维护一个struct,里面有时间,id。来了一个请求,这个请求就进入队列,每次取队头,看看是不是超过1小时。超过1小时就出队,每次统计队列的size就可以了。
把队列作为缓冲区的话,这时的size只需要出队时size–,入队时size++即可。每次有request的时候,就取size。

但这种解法需要时刻扫描队头的状态,看是否超过1小时。而且,如果这样高并发时需要维护很大的内存空间。
不过这样时间用long类型的话,有的栈空间可能存不了,1ms一个请求的话,就要27M,就要动态申请或者调整栈。

优化方法Bit Map

为了提高空间复杂度,可以使用bit map,用1位表示一个值的节省内存的方法。假设1ms一个,那个一小时也就3600000个。然后一个Bit表示该毫秒有没有请求,位运算掩码就可以求里面有多少个1,也可以映射到1us。
tcp是50us,那样请求就不会超过1us一个。这时我们就不需要维护队头的刷新,只需要每毫秒检测是否有请求进入即可。
这时还有一个不需要每毫秒刷新的算法,即使用一个变量记录队头时间,每次有请求进入服务器时,就用请求时间减去队头时间然后减去1小时,再转换为毫秒,这样我们就可以得到让这个二进制数右移的位数。只需要移位补1即可。

目录
相关文章
|
26天前
|
存储 数据挖掘 Windows
服务器数据恢复—V7000存储raid5故障导致LUN无法访问的数据恢复案例
服务器数据恢复环境: 三台V7000存储,共有64块SAS硬盘(其中有三块热备盘,其中一块已启用)组建了数组raid5阵列。分配若干LUN,上层安装Windows server操作系统,数据分区格式化为NTFS文件系统。 服务器故障: V7000存储中有多块硬盘出现故障离线,阵列失效,LUN无法访问。需要恢复卷中所有数据(主要为dcm文件)。
|
18天前
|
JSON JavaScript 前端开发
《进阶篇第6章:vue中的ajax》包括回顾发送ajax请求方式、vue-cli脚手架配置代理服务器、vue-resource
《进阶篇第6章:vue中的ajax》包括回顾发送ajax请求方式、vue-cli脚手架配置代理服务器、vue-resource
54 22
|
18天前
|
前端开发 JavaScript Java
第6章:Vue中的ajax(包含:回顾发送ajax请求方式、vue-cli脚手架配置代理服务器)
第6章:Vue中的ajax(包含:回顾发送ajax请求方式、vue-cli脚手架配置代理服务器)
47 4
|
1月前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
50 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
20天前
|
Apache 数据中心 Windows
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
|
20天前
|
域名解析 缓存 网络协议
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
|
25天前
|
网络安全 Docker 容器
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
19 0
|
27天前
|
弹性计算 关系型数据库 网络安全
阿里云国际版无法连接和访问Windows服务器中的FTP服务
阿里云国际版无法连接和访问Windows服务器中的FTP服务
|
20天前
|
弹性计算 网络安全
阿里云国际OpenAPI多接口快速管理ECS服务器教程
阿里云国际OpenAPI多接口快速管理ECS服务器教程
|
3天前
|
弹性计算
阿里云2核16G服务器多少钱一年?亲测价格查询1个月和1小时收费标准
阿里云2核16G服务器提供多种ECS实例规格,内存型r8i实例1年6折优惠价为1901元,按月收费334.19元,按小时收费0.696221元。更多规格及详细报价请访问阿里云ECS页面。
30 9