999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

分布式文件監控系統的設計與實現

2016-05-30 10:48:04黃云祥朱艷輝姜杉彪譚鵬
企業科技與發展 2016年8期

黃云祥 朱艷輝 姜杉彪 譚鵬

【摘 要】文章采用分布式計算結構設計并實現了一個文件監控系統,使用Go語言進行開發,采用了Redis開源數據庫進行數據存儲。該系統實現了實時監控大批量服務器上的多個目錄,提高了管理大量服務器的效率和互聯網企業的經濟效益。

【關鍵詞】分布式;文件監控;服務器;Go語言

【中圖分類號】TP393.07 【文獻標識碼】A 【文章編號】1674-0688(2016)08-0020-03

0 引言

隨著計算機和互聯網的發展與普及,當今社會快速向信息化方向前進,大量互聯網企業應運而生。它們給我們的生活帶來了極大的便利,而在這些便利的背后是成千上萬的服務器支撐著。隨著互聯網用戶人數的快速增長,服務器數量也快速增長,對每一臺服務器上的軟件環境進行逐一檢查的難度越來越大。即使運維人員加班加點完成了檢查,也難免會出現疏忽,此時就需要有一個分布式的文件監控系統來完成這項工作。

在文件監控領域,各個平臺上都有各自的監控技術。在Windows環境下,操作系統提供了Read Directo-

ries Changes W這一API來獲取文件系統的變更事件[1];在Linux環境下,從2003發布Linux2.6內核開始,新增了Inotify內核特性用于捕獲文件系統變更事件[2];在BSD、Linux、Macintosh等平臺上,還可以利用KQu-

eue和EPoll的高性能并發同時監聽多個句柄來實現監控[3]。

1 系統功能分析

1.1 文件監控

文件監控是最為核心的需求,要求能做到對設定的文件及目錄進行實時的監控。被監控的文件及目錄有任何改動,包括內容的修改、文件的替換等,都需要進行及時的記錄、反饋等一系列的后續操作。

1.2 文件對比

文件對比功能相對于文件監控而言只是輔助功能,主要面向文本文件類型,例如文本文檔、配置文件,腳本文件等。基于在配置時提供的模板文件,對相應目標文件進行內容級別的匹配對比。這個功能的主要使用場景是監控大部分內容一樣,但是小部分內容必須不一樣的文件,典型的例子就是網絡配置文件,配置中網關網絡地址、DNS等內容是一樣的,但是網絡地址肯定是不一致的。針對這種情況,如果只是簡單地計算MD5值,系統肯定會報告文件不一致的錯誤,但是顯然這應該被認為是一致的。

1.3 網絡通信

由于客戶端數量很多,因此需要一個服務端對客戶端的信息進行匯總和進一步加工。但是,客戶端分布在許多的服務器上,因此必須借助計算機網絡技術讓客戶端與服務端可以溝通和交流各自的信息。

1.4 輔助工具

由于主要的使用場景是服務器,而服務器為了提高效率通常沒有提供圖形用戶界面(GUI,Graphical User Interface),所有操作都通過終端(Computer Terminal)完成,因此需要提供命令提示界面(CLI,Command-Line Interface)。需要有客戶端比對、配置工具、日志分析工具等功能。

2 系統設計與實現

2.1 技術介紹

本系統采用Go語言進行開發,采用了分布式架構。利用Go語言內建的HTTP服務支持進行通信。數據庫的選擇上,為了保持系統的高效率,使用了基于內存進行操作的Redis數據庫。

2.1.1 Go語言

Go語言是一門開源的編程語言,由Alphabet公司旗下子公司——Google公司(簡稱Google)于2007年開始設計。Go語言在設計之初就是作為一門系統編程的通用語言,它擁有強類型與垃圾回收機制,并且明確提供了對并行編程語言級別的支持。目前,Go語言在生成可執行的二進制文件時依然采用傳統的編譯與鏈接模型[4]。

2.1.2 Redis數據庫

Redis是一個Key-Value存儲系統。和Mem Cached類似,它支持存儲的value類型相對更多,包括String(字符串)、List(鏈表)、Set(集合)、Zset(Sorted Set,有序集合)和Hash(哈希類型)。這些數據類型都支持Push/Pop、Add/Remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,Redis支持各種不同方式的排序。與MemCached一樣,為了保證效率,數據都是緩存在內存中。區別是Redis會周期性地把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了Master-Slave(主從)同步[5]。

2.2 數據庫的設計

存儲不同類型的數據主要依靠Key的前綴進行區分,表1是數據庫中存儲數據類型與對應前綴的說明。

2.3 客戶端(被監控端)的設計

客戶端的整體流程圖如圖1所示。

2.3.1 文件監控

文件監控模塊的主要工作是監控文件與文件夾,在文件與文件夾被修改時及時進行響應并采取后續措施。為了提高文件監控模塊的效率,在模塊中使用了大量的子線程。通常每一個子線程在執行完畢之后會直接退出,除了監聽系統消息的子線程(簡稱監聽線程)。監聽線程的主要作用是監聽操作系統的消息,例如文件變動信號、進程退出信號等。文件監控模塊的流程圖如圖2所示。

2.3.2 文件檢查

文件檢查模塊是文件監控模塊的輔助模塊,設計這個輔助模塊的原因有2個方面:一是系統API在提供文件變動信號時粒度非常小,例如修改信號的觸發條件只是對磁盤進行了寫入操作,哪怕打開一個文件沒有修改任何內容直接進行保存也會觸發修改信號。二是為了提供模糊匹配的功能,這樣能保證一份模板能夠適用于所有客戶端機器上的相應文件。文件檢查模塊主要提供了2個檢查方案:MD5方案與模板匹配方案。

MD5方案是使用MD5信息摘要算法對文件進行處理,生成一串長度為32的字符串。這一串字符串唯一表示這一份文件,如果這一份文件內容有改動,通過MD5信息摘要算法得出的字符串也會不一樣,因此使用MD5表示一份文件的可靠性非常高。

模板匹配方案需要預先使用正則表達式編寫模板,在文件變化時先把文件內容與對應模板進行模糊匹配,忽略掉模板中設置的可變內容,這個方案主要適用于文本類文件。

2.3.3 API

客戶端的APIs模塊主要以HTTP服務的形式,向外提供一些接口用以獲取客戶端數據和控制客戶端的行為。

2.3.4 通信

客戶端的通信模塊主要用來向服務端請求或發送各種數據,例如請求客戶端配置數據、請求文件模板數據、發送文件改動消息等。

2.4 服務端(監控端)的設計

服務端的整體流程圖如圖3所示。

2.4.1 統計

統計模塊被設計用來統合客戶端發送的信息,并且在對信息進行必要的加工處理之后存儲到數據庫中落地,當用戶需要查詢時,從數據庫中取出對應信息反饋給用戶。統計模塊主要由服務端的APIs模塊根據客戶端請求的路由與請求的內容進行相應方法的調用。

2.4.2 管理

服務端的管理模塊分為2個,一個是客戶端管理,另一個是數據庫管理。客戶端管理模塊主要是根據用戶的操作,借助服務端的通信模塊與目標客戶端進行通信,并調用客戶端提供的API來完成用戶的操作。指令主要分為數據類指令和控制類指令。數據類指令主要是向目標客戶端獲取某文件或文件夾的MD5等指令;控制類指令是刷新文件或文件夾的MD5等指令。數據庫管理模塊采用了連接池的設計,使用連接池來管理服務端與數據庫之間的連接,能夠極大地提高數據庫連接使用的效率,避免了反復建立與關閉數據庫連接所耗費的時間。

2.4.3 API

服務端的APIs模塊以HTTP服務的形式向外提供了一套接口用來管理客戶端、獲取客戶端數據等,同時還為輔助工具提供了接口。

2.4.4 通信

服務端的通信模塊主要用來向客戶端提供的API請求數據或發送指令,例如請求被監控文件目錄,請求文件或文件夾的MD5值等。

2.5 輔助工具的設計

2.5.1 日志分析

志分析的工具名為log,由于分布式文件監控系統的使用場景含有大量的服務器,客戶端運行在這些服務器上時隨時隨地都會向服務端發送請求,由此會產生大量的日志數據。日志分析工具提供了時間點、時間段查詢,按日志等級、文件名稱、文件路徑等進行篩選的功能。

2.5.2 文件比較

文件比較的工具名為compare,分布式文件監控系統主要是監控文件的變化,如果需要比較2臺服務器之間的內容是否一致,甚至比較多臺服務器的內容是否一致則需要手動獲取各服務器上的數據再進行一一比較。為了簡化用戶的操作,設計了文件比較工具。

文件比較工具需要指定2個客戶端和需要比較的路徑。在2個客戶端中,第一個客戶端需要顯式的指定一個,而第二個客戶端可以使用“*”號指定所有客戶端,也可以顯式指定某一個客戶端。需要比較的路徑可以指定一個或多個路徑,也可以指定“*”號用來表示比較所有文件及文件夾。當需要比較的路徑被指定為“*”號時,會先獲取第一個客戶端的監控目錄,并以此為待比較路徑做比較。

2.5.3 客戶端配置

客戶端配置的工具名為config,由于在分布式文件監控系統的數據交換場景中,大量使用了JSON進行數據交換,客戶端配置也是使用JSON。JSON數據對于數據交換有非常大的優勢,解析和構造也非常方便,但是如果需要手動生成較為復雜JSON數據還是很麻煩的,因此設計了客戶端配置工具進行輔助。客戶端配置工具提供了5個子命令(Subcommands)用來幫助用戶修改客戶端的配置,還提供了一個help子命令方便用戶隨時獲取幫助。

2.5.4 客戶端管理

客戶端管理的工具名為manage,該工具主要是管理客戶端的一些操作,包括刷新指定客戶端的MD5、測試客戶端的連通性、刪除客戶端保存在數據庫的數據等,此外還提供了一個顯示所有客戶端的子命令。

3 結語

本系統設計基于分布式架構的設計思路,將繁雜的計算工作分布到每一臺被監控的服務器上,借助Go語言內建的HTTP服務進行通信。在監控實現上,借助了開源項目fsnotify的幫助,能同時在Windows、Linux、Macintosh、IOS、android等平臺上進行監控。

就目前而言,系統已經具備了以下優勢和特點:①利用分布式架構的優勢,將大量重復運算分散到了所有客戶端上;②利用Go語言跨平臺的特性,分布式文件監控系統中涉及調用系統API的操作全部進行了平臺適配,使用時完全無感;③利用多線程的優勢,提供了高并發的API服務,提高了程序的運行效率;④使用連接池對連接進行管理,從而減少了建立和斷開連接的次數,節約了時間;⑤除了配置以外,客戶端程序和服務端程序不需要人工干預即可完成文件監控;⑥適應所有服務器的運行環境,采用字符界面,使用命令行進行操作。

參 考 文 獻

[1]嚴志敏.TOF基礎服務高性能緩存系統的設計與實現

[D].西安:西安電子科技大學,2013.

[2]閆飛翔.wIMS中間件平臺集群方案的設計與實現[J].電信工程技術與標準化,2011(9):86-89.

[3]吳海慶.基于AWS云計算的社交游戲平臺和自動伸縮技術研究[D].上海:復旦大學,2013.

[4]崔巍峰.開源軟件在教育信息化支撐平臺中的選擇與應用[J].中國電化教育,2014(6):75-79.

[5]佚名.大數據時代的9大Key-Value存儲數據[EB/OL].http://blog.csdn.net/capricornliug/article/details/8846673,2013-04-24.

[6]佚名.windows下文件的監控——ReadDirectoryCha-ngesW函數的使用[EB/OL].http://blog.csdn.net/wo-shinia/article/details/8162983,2012-11-08.

[7]必應網典.Inotify[EB/OL].http://www.bing.com/k-nows/search?q=inotify,2016-06-07.

[8]佚名.fsnotify[EB/OL].https://github.com/fsnotify/fsnotify,2016-06-07.

[責任編輯:鐘聲賢]

主站蜘蛛池模板: 日本高清在线看免费观看| 国产成人乱无码视频| 香蕉国产精品视频| 亚洲综合精品第一页| 成年人午夜免费视频| 日韩人妻少妇一区二区| 久久精品无码国产一区二区三区| 国产精品久久久久久久久久98| 亚洲无码高清视频在线观看| 国产欧美日韩va另类在线播放| 国产JIZzJIzz视频全部免费| AV不卡在线永久免费观看| 免费Aⅴ片在线观看蜜芽Tⅴ| 呦女精品网站| 亚洲国产精品一区二区第一页免 | 亚洲av日韩av制服丝袜| 国产亚洲精品在天天在线麻豆| 亚洲人人视频| 国产真实二区一区在线亚洲| 91精品国产福利| 国产青青操| 99久久这里只精品麻豆| 欧美国产成人在线| 99久久这里只精品麻豆| 国产精品无码久久久久久| 九九精品在线观看| 在线视频一区二区三区不卡| 国产精品网曝门免费视频| a级高清毛片| 中文字幕日韩丝袜一区| 成人午夜亚洲影视在线观看| 久久天天躁夜夜躁狠狠| 最新国产网站| 欧洲极品无码一区二区三区| 成人福利在线视频免费观看| 伊人精品视频免费在线| 99久久精彩视频| 国产日本一线在线观看免费| 亚洲aⅴ天堂| аv天堂最新中文在线| 毛片国产精品完整版| 亚洲日韩国产精品综合在线观看| 久久毛片网| 手机精品视频在线观看免费| 深爱婷婷激情网| 国产免费怡红院视频| 亚洲精品视频网| 国产h视频免费观看| 亚洲,国产,日韩,综合一区| 中文字幕在线看视频一区二区三区| 亚洲自拍另类| 日韩欧美综合在线制服| 日本草草视频在线观看| 国模私拍一区二区| 91美女视频在线| 在线观看国产黄色| 成人毛片在线播放| 国产精品亚洲一区二区三区在线观看 | 国产午夜看片| 六月婷婷激情综合| 免费xxxxx在线观看网站| 这里只有精品免费视频| 青青国产视频| 精品久久人人爽人人玩人人妻| 亚洲天堂区| 澳门av无码| 国产黄色片在线看| 伊人久久精品亚洲午夜| 永久免费av网站可以直接看的 | 国产亚洲精品97AA片在线播放| 成年网址网站在线观看| 色悠久久久| 国产视频大全| 91精品久久久久久无码人妻| 在线不卡免费视频| 久久精品免费国产大片| 91九色视频网| 亚洲欧美日韩另类在线一| 成人欧美在线观看| 国产特级毛片| 国产精品无码久久久久AV| 国产精品观看视频免费完整版|