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

原创 2015年11月18日 17:14:59

如果想要获得最近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即可。

版权声明:本文为博主原创文章,未经博主允许不得转载。

你想建设一个能承受500万PV/每天的网站吗?服务器每秒要处理多少个请求才能应对?

你想建设一个能承受500万PV/每天的网站吗? 500万PV是什么概念?服务器每秒要处理多少个请求才能应对?如果计算呢?  PV是什么: PV是page view的简写。PV是指页面的访问次数...
  • JBxiaozi
  • JBxiaozi
  • 2013年10月17日 15:18
  • 16246

并发连接数、请求数、并发用户数

并发连接数、请求数、并发用户数 概念 并发连接数-SBC(Simultaneous Browser Connections) 并发连接数指的是客户端向服务器发起请求,并建立了TCP连接。每秒...
  • Stitch77
  • Stitch77
  • 2016年06月16日 14:59
  • 5092

css sprite技术 – 减少网站图片请求次数

CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢...
  • u011144211
  • u011144211
  • 2015年07月07日 11:15
  • 820

服务器 最大连接数:

服务器可以设置  max_Threads  = 150  最大线程数量(最大并发数量,或者说最大的并发用户量) (可以处理连接的线程数量)  accept_count 如果服务器中所有线程都在工作...
  • xiaoliuliu2050
  • xiaoliuliu2050
  • 2016年10月21日 10:13
  • 2479

每秒处理请求数不等于并发量

用apache的ab测试了服务器ab -c 100 -n 1000 http://www.test.com发现 每秒处理请求数只有20,其他的等待 不是说nginx默认的并发量很高么?还是每秒处理请求...
  • leigin
  • leigin
  • 2016年04月09日 15:41
  • 2426

iOS HTTP请求——同步请求、队列式异步请求、异步请求

在iOS应用与HTTP服务器进行HTTP通信时,有3个主要的方法可以执行HTTP请求并接收响应。 同步请求——该方法为阻塞式,直到整个响应加载完毕并返回调用方法为止。异步请求——该请求运行在起始线...
  • chy305chy
  • chy305chy
  • 2015年04月15日 21:57
  • 1805

服务器请求响应原理

http全称叫超文本传输协议。其中超文本表示发生方和接收方传输的内容不仅仅限于文本数据,而且还包括图片、视频、音频等多媒体资源。传输意味着协议是用于数据交互的协议,也就是发送方和接收方发送数据格式的规...
  • Java1029384756
  • Java1029384756
  • 2016年10月24日 23:37
  • 279

Web项目性能优化之减少HTTP请求次数优化

本文适合的读者为刚刚毕业,技术实力不是很好,没有考虑过自己编写程序的系统性能的读者。本文简单的介绍了,Web项目中常见的性能问题:请求HTTP次数过多,以及优化的思路。...
  • yangkang029
  • yangkang029
  • 2015年12月05日 15:20
  • 1973

iOS UITableView 网络请求刷新 搜索

使用第三方库 MJRefresh 进行网络数据刷新 UITableView 添加搜索
  • liyang201258504411
  • liyang201258504411
  • 2015年09月24日 11:20
  • 934

QPS、PV和需要部署机器数量计算公式

原文出自:http://www.cnblogs.com/waytofall/p/4088923.html QPS = req/sec = 请求数/秒 【QPS计算PV和机器的方式】 QPS...
  • xiancaione
  • xiancaione
  • 2016年03月19日 01:40
  • 902
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如果想要获得最近1小时访问服务器的请求数?
举报原因:
原因补充:

(最多只允许输入30个字)