2019寒假訓練營第三次作業

2022-05-28 14:57:09 字數 3446 閱讀 8953

以上兩門課程二選一即可。

黑客風波過後,一切又恢復了正常。但你總覺得有些不安,按照之前的方法:把所有請求都記錄下來,的確能很準確地顯示所有使用者的請求情況。

但是請求實在太多,把它們都記下來,需要花費巨大的空間來儲存,導致許多預算用在了購買記錄請求的空間上,而且伺服器的速度也下降不少。

有沒有更好的辦法?你覺得自己遇到了瓶頸,但別人肯定也遇到過同樣的問題,何不借鑑別人的方法?

查閱文獻過程中,果然,發現一種叫做 sketch 的技術十分火熱,可以解決這個問題,它可以顯著地降低空間的使用。

你很興奮,你想盡快地把這個技術部署到伺服器上。

伺服器正在運轉著,也不知道這個技術可不可用,萬一伺服器被弄崩了,那損失可不小。

所以, 決定在虛擬機器上試驗一下,不小心弄壞了也沒關係。需要在的電腦上裝上虛擬機器和linux系統

安裝虛擬機器(可參考vmware、virtual box等)

安裝ubuntu系統(推薦安裝16.04版本)

寫乙個helloworld程式,在ubuntu系統上編譯執行

(你可能需要了解linux系統的終端和一些基本命令、文字編輯工具nano、如何編譯**、執行程式)

apt-get install -y nano
sudo apt-get  install  build-essential
6、編寫helloworld.c

nano helloworld.c
#includeint main()
7、編譯並執行helloworld

眾多sketch的技術中,count-min sketch 常用也並不複雜,但你可能需要稍微了解一點點雜湊的知識。從它入手不失為乙個好選擇,把它記錄在你的技術部落格上:

簡單描述什麼是sketch

描述count-min sketch的演算法過程

sketch是基於雜湊的資料結構,通過設定雜湊函式,將具有相同雜湊值的鍵值資料存入相同的桶內,以減少空間開銷。

桶內的資料值作為測量結果,是真實值的近似。

利用開闢二維位址空間,多重雜湊等技術減少雜湊衝突,提高測量結果的準確度。

--引用《基於sketch的網路測量方法介紹》

大致了解了count-min sketch,接下來就需要實現它了。本著不需要重複造輪子的思想,你上github一查,果然發現了相關**。

並不需要深刻理解**,你只需要會用,你的目標是在虛擬機器上跑通count-min sketch:

轉殖一種版本(python或者c語言)的**,大致了解如何使用這個**,在ubuntu系統上編譯。自己任意編寫乙個小測試,成功執行這個**。

你也可以自己實現count-min sketch。

2、修改test檔案進行測試

然後。。。。就出錯了。。。

似乎該**在linux下有bug:其在新建指標時沒有用new開空間,導致有時正常執行,絕大情況為segmentation fault。

由於在伺服器版的ubuntu內修正**工作量巨大,沒能除錯完成。

現在需要獲取使用者的請求資訊,其實請求就是網路傳輸的資料報,可以使用自己的網路環境來模擬伺服器的請求,使用工具來捕獲這個資料報:

安裝並使用抓包工具tcpdump

輸入tcpdump -n 獲取資料報的資訊

使用linux 重定向的方法把該資訊用文字檔案存起來,檔案命名為 pakcet_capture.txt。

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
使用程式把第一條請求處理成第二條請求的格式

使用linux 重定向的方法把該資訊用文字檔案存起來,命名為request.txt。

完事具備,只欠東風:

用跑通的count-min sketch程式讀檔案,獲得最後的處理結果,請求大小超過閾值t認定為黑客,此處t自己定義。

對於你所完成題目,把實現思路和實現結果記錄在部落格中,把**提交到github的倉庫上。

解釋為什麼 sketch 可以省空間

用流程圖描述count-min sketch的演算法過程

拿它和你改進後方法進行對比,分析優劣

為什麼 sketch 可以省空間

sketch犧牲了準確度,在一定的陣列範圍中記錄雜湊後的索引,沒有記錄原鍵值。因雜湊的特性不同鍵值的索引碰撞,節省碰撞的這部分空間。

從整體資料結構上分析,雜湊讓資料相對更加均勻地分布,對陣列的利用率更高。

流程圖

吐槽count-min sketch

很巧妙的方法啊,雖然在準確度上還有不足,但其解決sketch準確度的思路十分簡潔有效,實現也比較容易。

在資料量很小時會比直接記錄耗費更多的記憶體。

按基本題中的處理方法,要存請求、處理請求、讀請求,速度太慢了,要是能把獲取的請求直接用count-min sketch 處理就好了:

盡可能減少中間的檔案讀寫環節

實時處理請求

咕咕咕

linux超簡單文字編輯器:nano

ubuntu下gcc安裝及使用

在linux(ubuntu)中使用終端編譯並執行.c和.cpp檔案

基於sketch的網路測量方法介紹

2019雛鷹訓練營第三次作業

因為較多,新建乙個隨筆 在vmware15安裝ubuntu 16.04 在ubuntu編寫helloworld 一開始看到題目sketch,不是做ui設計用的軟體嗎,還要mac os。後來再往下看count min sketch。count min sketch 是乙個概率資料結構,用作資料流中事件...

2019秋第三次作業

這個作業屬於哪個課程 c語言程式設計ii 這個作業要求在 我在這個課程的目標是 熟練掌握markdown語法,學習掌握好c語言 這個作業在哪個具體方面幫助我實現目標 製作 完成pta作業 參考文獻 1.1.1實驗 截圖 1.1.2資料處理 首先定義變數x,使用浮點型定義 然後進行輸入。而這個明顯是個...

2019寒假訓練營寒假作業(四)

一 mininet的安裝過程截圖及說明 參考文章 二 使用miniedit工具搭建拓撲的過程截圖及說明 三 通過修改引數連線控制器的詳細過程截圖及說明 除此之外,其它問題 四 連線控制器的過程遵循什麼協議?簡單描述一下這個過程 猜的 有tcp和tls ssl transpot layer secur...