摘 要:本文論述了一個分布式日志服務器的實現過程。通過對系統需求的介紹,具體描述了系統的設計過程,并對系統中運用的若干關鍵技術進行了分析,最后總結討論了該系統的優點。
關鍵詞:日志服務器 分布式 緩沖 多線程 UDP FTP
引言
日志在實際應用中具有重要的意義。它有助于我們發現系統中存在的問題,以改進產品的質量,也可以從側面了解用戶使用的情況。如果對日志進行更深層次的挖掘,還可以了解用戶的潛在需求,為產品開發者提供指導。日志服務器就是用來收集這些日志的平臺。本文給出了一個分布式日志服務器的參考應用。
一、需求介紹
本應用主要接收來自小型終端設備的日志信息。終端設備的特點是:1、分布范圍很廣,分布的范圍跨越不同的國家;2、數量很大,達到萬級,并且數量仍有不斷遞增的趨勢;3、單個終端在單位時間內發送的日志數量巨大。以上特點無疑就給日志服務器提出了較高的要求,即日志服務器必須能夠長時間承受很大的負載,并且能夠有很大的數據容量。另外,在這基礎上我們還要考慮到將來對系統進行擴展的可能性。
二、系統設計
本系統設計上采用了分布式的架構(架構圖見圖1)。其中日志接收服務器負責接收來自終端設備的日志數據包,并在經過處理后,傳輸到日志集中服務器。日志接收服務器分散部署到不同的地點,用于接收來自各個地區的設備的日志。而日志集中服務器負責接收日志接收服務器傳輸過來的日志文件,并保存到本地的數據庫。
(一)架構圖

(二)通訊協議
1.終端與日志接收服務器間的協議
對于終端與日志接收服務器之間的協議有兩種可選的方案:UDP協議和TCP協議。兩種協議各自的特點對比如下表所示:

應用中,結合本應用的特點,我們選擇了UDP協議。原因主要有三點:一、本應用收集來自終端的日志,對可靠性要求不是很高,即使有少量數據丟失,也是可以接受的;二、終端發送的日志數據量較小,每個包在100字節左右;三、終端數量巨大,對接收效率的要求非常高。
2.日志接收服務器與日志集中服務器間的協議
這個環節的協議也有兩種可選方案:FTP(文件傳輸協議)和HTTP(超文本傳輸協議)。本系統的實現選擇了FTP。主要的考慮如下:一、FTP可以采用成熟的服務器端產品,這無疑能減少開發的時間成本,也加強了可靠性保證;二、FTP有用戶驗證機制,提供了一定程度的安全性。
(三)日志接收服務器
日志接收服務器的作用相當于是一個日志中轉站。它接收來自終端的日志包,并將日志傳輸到日志集中服務器。日志接收服務器的工作流程如圖2所示。
以下對日志接收服務器上用到的若干關鍵技術進行說明:
1.緩沖技術
緩沖區是一塊空間足夠大的內存。接收來自終端的日志包,實際是通過對UDP端口的循環偵聽實現的。這一環節對整個系統的性能有著非常重要的影響。因為,一旦接收速度慢,就會導致后續的日志包無法送達,造成丟包。所以,引入緩沖,就是當接收到日志包之后,不進行處理,直接保存到一個緩沖區,這樣處理顯然就大大提高了接收日志包的速度。引入緩沖還有另外一個好處,就是終端發包的流量是時快時慢的,緩沖區能夠對短時間的大流量沖擊進行緩沖,避免丟包現象發生。
2.多線程
在解析日志包的時候,為了提高解析的效率,引入了多線程機制。多線程機制提高了CPU利用率,在很大程度上改善了效率。
3.壓縮
在傳輸文件前,本應用先對文件進行了壓縮處理,這主要是出于節省網絡流量并且提高傳輸效率的考慮。因為網絡的帶寬是一種高成本的資源,進行壓縮無疑顯得非常必要。
(四)日志集中服務器
日志集中服務器是日志的一個總的存儲中心。它工作流程如圖3所示。
以下對日志集中服務器用到的若干關鍵技術進行說明:
1.FTP服務器
接收來自接收服務器的壓縮文件是通過現有的FTP服務器端軟件實現的,目前這種軟件的選擇是很多的,甚至Windows也有自帶的FTP服務器。使用FTP服務器大大節省了開發的時間,并且避免了自行開發可能帶來的風險。
2.緩沖技術
在將日志寫入數據庫的時候,也采用了緩沖技術。在寫數據庫的時候,逐條寫入速度是很慢的。只有在達到一定量的時候,同時寫入才能得到最高的速度。當然,同時寫入的量是有一個最優的值,并不是越多越好,這個最優值只有通過反復測試才能找出來。
三、系統的優點
(一)分布式
只要能保持和集中服務器以及終端設備的網絡通訊,日志接收服務器可以根據需要分布部署在不同的地點。分布式的特點為部署提供了很好的靈活性。
(二)工作效率高
系統經過反復苛刻的壓力測試,并且經過不斷的優化,使其具有了非常高的工作效率。測試的結果如下:
日志接收服務器處理能力≥每秒10000條日志;
日志集中服務器處理能力≥每秒20000條日志。
(三)可維護性好
由于各個子系統之間功能劃分明確,相互獨立,子系統之間耦合性低,整個系統的可維護性非常好。一旦發生故障,各個子系統可以相互斷開,各自測試,進行故障分析,能夠在很短時間內找出問題所在。當某一部分進行軟件升級維護的時候,也不會影響到其他部分正常工作。
(四)可擴展性好
當日志接收服務器需要擴充的時候,可以在需要的地點放置一臺接收服務器,在進行配置之后就能進行工作,不會影響到其他服務器。
當日志集中服務器需要軟件硬件升級的時候,可以先將FTP服務器停止,在升級完成之后再啟動FTP服務器,日志接收服務器會將這段期間的文件再上傳,不會造成數據丟失。
結束語
本系統在開發和測試階段,通過反復多次的努力,使系統性能得到很大改進。目前,本系統已經投入運行,經受住了大流量數據的壓力和長時間不間斷運行的考驗,實踐證明是穩定的、可靠的、高效率的。開發過程中還解決很多其它的技術問題,比如壓力測試時采用的模擬器,以及系統運行狀況監視器,由于篇幅的限制,在此就不一一論述。
參考文獻:
[1]Java Database Programming Bible, John O’Donahue, 2002.
[2]Effective TCP/IP Programming,Jon C.Snader,2001.
[3]黃傳動. 通信協議的分布式測試方法研究和測試系統實現[D]. 中國科學技術大學,2006.
[4]孫家東. 分組無線專用通信系統的研究系統通信協議的設計[D]. 東南大學,2004.