陳瀟瀟 蔡迎歸 李嫵可
摘 要: CDN流量采集系統是通過CDN流量數據進行采集分析以此來判斷CDN服務質量的好壞,其依賴于一個可靠穩定的數據中心服務器。本文詳細地論述了數據中心服務器模塊所具備的功能,為監測CDN系統的運行和CDN流量統計系統提供了堅實可靠的數據基礎。
關鍵詞:CDN 流量采集 中心服務器
中圖分類號:TP393 文獻標識碼:A 文章編號:1672-3791(2016)06(a)-0000-00
本文系湖南文理學院2015年校級科研項目《基于數據分流的并行入侵檢測系統研究》(項目編號:15YB10) 論文。
1.引言
隨著我國互聯網技術的發展,涌現出了很多的CDN提供商。為了更好地了解CDN服務質量的好壞以便給客戶提供優質的服務, CDN提供商往往給出了流量統計、流量監控等服務,這些服務提供的依據,都必須依賴CDN流量采集系統。本文針對系統的核心模塊——中心服務器進行設計與實現。
2.中心服務器運行流程
中心服務器運行在CDN流量采集系統數據中心,主要包括數據監聽線程、線程池模塊和數據處理入庫線程(也即工作線程)三大功能模塊,其作用主要是接收各個節點發送過來的數據,然后存儲在數據庫中。主要工作流程大致如下:
當啟動服務端的程序后,首先應確保程序的單實例運行,然后初始化運行日志,再讀取服務器的配置文件后進行環境參數的配置。在上述工作就緒之后,服務器將首先創建網絡環境并初始化參數,然后創建并初始化線程池。接收數據進程模塊監聽著服務器上的端口,如果發現有Client端有數據傳輸過來,則把Client端的ID號存入連接緩沖區,如果到來的事件是表明有已經連接的客戶端的通信數據到來,就向線程池中拋入一個任務。同時喚醒空閑的任務線程來處理相關的業務請求。 當處理線程接收了數據之后,便存入一個內存緩沖區。在緩沖區達到一定的數量的時候,統一插入到數據庫中。
3.功能設計
3.1監聽線程模塊
本文設計的服務器程序功能需要在同一時間接收多個CDN節點采集程序發送過來的數據,也就是說,服務器既要監聽套接口,又要處理已經連接的套接口,這里就需要用到I/O復用的技術(I/O multiplexing)。監聽線程模塊為了能夠適應接收多個Client的訪問請求,有必要加入EPOLL機制。改進后的算法如下:
3.2線程池模塊
由于流量采集業務復雜、采集的數據量大,CDN數據中心服務器必須具備較高的性能要求,在數據存儲量、吞吐量、響應時間等方面都力爭最大化,因此有必要采用線程池技術來實現這些要求。
(1)線程池的創建和初始化
在創建一個線程池的過程中我們使用了兩個參數,一個是 min_num,表示線程池最小數目,一個是max_num,表示線程池數目的上限。線程池的運行過程中,會讓數目維持在這兩者之間。這樣一方面不會占有過多的資源,另外一方面也不會使得過渡的創建線程而降低線程池的工作效率[2]。在線程池初始化過程中,我們主要做了兩個工作。一個是對創建工作線程并對工作線程進行初始化。另外一個是創建一個管理線程,用于動態的管理線程池,讓其更好的工作,使得資源更加協調。
(2)任務的處理
在客戶端請求發送遞交到線程池的時候,會對任務進行一系列的處理后,并將其信息回饋給客戶端。其中任務放入線程池的策略就是找到第一個處于空閑狀態的線程,然后將任務與線程綁定在線程上來達到目的。在修改線程狀態的時候先是加鎖,完成修改之后再解鎖(這是有效控制線程同步運行的關鍵),并將任務和相關參數綁定到制定的結構中 。
(3)線程池狀態計算和關閉銷毀
在線程池的管理中,是用線程池的狀態來維護線程池的動態平衡的。管理線程根據線程池的狀態做出一定的管理操作。當線程池處于空閑狀態返回0,當處于忙碌或者正常狀態的時候,返回1。當忙碌線程數目占總線程數目一半及其以上的時候,線程處于忙碌或正常狀態。當忙碌線程數目占總線程數目一半以下的時候,線程處于空閑狀態。線程池處理完客戶請求,不需要的時候,這時候可以關閉并銷毀線程池,避免資源的浪費。
(4)線程池的監控
線程池在最初創建的時候會創建出一個管理線程,用于對線程池的動態管理。他會每隔一段時間對線程池進行監控,根據它的的狀態來進行相應的操作,來創建和銷毀線程池中的線程,合理的利用了計算機系統資源。
3.3 數據處理入庫模塊
在系統的實際運行中,我們采用了Mysql數據庫。因為Mysql數據庫因其是一個快速、多線程、多用戶的SQL數據庫服務器,其出現雖然只有短短的數年時間,但憑借著“開放源代碼”的東風,它從眾多的數據庫中脫穎而出,成為很多電子商務網站的首選數據庫。同時它也提供了很多現成的接口函數,便于我們用C語言對其進行編程訪問。
4 小結
本文詳細地論述了CDN流量采集系統數據中心服務器模塊所具備的功能。為了保證能夠同時處理多個連接請求,數據監聽模塊采用了epoll多路復用機制。為了保證系統的高并發性,我們采取了線程池技術。為了保證數據數據庫不發生頻繁的讀寫,我們采用了SQL緩沖區技術,在數據達到一定量的情況下統一插入數據庫。
參考文獻
[1] Gammo L, Brecht T, Shukla A. Comparing and evaluating epoll, select, and poll event mechanisms[J]. Pro of the Linux Symposium,2004(7): 45-48.
[2] 楊繼張. UNIX網絡編程[M]. 北京: 清華大學出版社, 2006.