Deadline:2.18 23:00python
出题人:福州大学 计算机科学与技术 周政演linux
黑客风波事后,一切又恢复了正常。但你总以为有些不安,按照以前的方法:把全部请求都记录下来,的确能很准确地显示全部用户的请求状况。git
可是请求实在太多,把它们都记下来,须要花费巨大的空间来存储,致使许多预算用在了购买记录请求的空间上,并且服务器的速度也降低很多。github
有没有更好的办法?你以为本身遇到了瓶颈,但别人确定也遇到过一样的问题,何不借鉴别人的方法?算法
查阅文献过程当中,果真,发现一种叫作 sketch 的技术十分火热,能够解决这个问题,它能够显著地下降空间的使用。ubuntu
你很兴奋,你想尽快地把这个技术部署到服务器上。安全
服务器正在运转着,也不知道这个技术可不可用,万一服务器被弄崩了,那损失可不小。服务器
因此, 决定在虚拟机上试验一下,不当心弄坏了也不要紧。须要在的电脑上装上虚拟机和linux系统网络
众多sketch的技术中,Count-min sketch 经常使用也并不复杂,但你可能须要稍微了解一点点散列的知识。从它入手不失为一个好选择,把它记录在你的技术博客上:tcp
大体了解了Count-min sketch,接下来就须要实现它了。本着不须要重复造轮子的思想,你上github一查,果真发现了相关代码。
并不须要深入理解代码,你只须要会用,你的目标是在虚拟机上跑通Count-min sketch:
如今须要获取用户的请求信息,其实请求就是网络传输的数据包,可使用本身的网络环境来模拟服务器的请求,使用工具来捕获这个数据包:
请求的用户用源ip地址端口号和目的ip地址端口号来标识,请求的大小用包的长度来标识,例如:
11:07:30.240275 IP 203.107.41.32.9018 > 192.168.0.101.55730: Flags [P.], seq 1:36, ack 39, win 17688, length 35
请求的用户
203.107.41.32.9018 > 192.168.0.101.55730
请求的大小
length 35
处理为这样的格式(请求的实际形式)
203.107.41.32.9018>192.168.0.101.55730 35
完事具有,只欠东风:
对于你所完成题目,把实现思路和实现结果记录在博客中,把代码提交到github的仓库上。
按基本题中的处理方法,要存请求、处理请求、读请求,速度太慢了,要是能把获取的请求直接用count-min sketch 处理就行了: