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 處理就行了: