亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        分布式文件監(jiān)控系統(tǒng)的設計與實現(xiàn)

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

        黃云祥 朱艷輝 姜杉彪 譚鵬

        【摘 要】文章采用分布式計算結構設計并實現(xiàn)了一個文件監(jiān)控系統(tǒng),使用Go語言進行開發(fā),采用了Redis開源數(shù)據(jù)庫進行數(shù)據(jù)存儲。該系統(tǒng)實現(xiàn)了實時監(jiān)控大批量服務器上的多個目錄,提高了管理大量服務器的效率和互聯(lián)網(wǎng)企業(yè)的經(jīng)濟效益。

        【關鍵詞】分布式;文件監(jiān)控;服務器;Go語言

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

        0 引言

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

        在文件監(jiān)控領域,各個平臺上都有各自的監(jiān)控技術。在Windows環(huán)境下,操作系統(tǒng)提供了Read Directo-

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

        eue和EPoll的高性能并發(fā)同時監(jiān)聽多個句柄來實現(xiàn)監(jiān)控[3]。

        1 系統(tǒng)功能分析

        1.1 文件監(jiān)控

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

        1.2 文件對比

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

        1.3 網(wǎng)絡通信

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

        1.4 輔助工具

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

        2 系統(tǒng)設計與實現(xiàn)

        2.1 技術介紹

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

        2.1.1 Go語言

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

        2.1.2 Redis數(shù)據(jù)庫

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

        2.2 數(shù)據(jù)庫的設計

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

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

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

        2.3.1 文件監(jiān)控

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

        2.3.2 文件檢查

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

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

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

        2.3.3 API

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

        2.3.4 通信

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

        2.4 服務端(監(jiān)控端)的設計

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

        2.4.1 統(tǒng)計

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

        2.4.2 管理

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

        2.4.3 API

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

        2.4.4 通信

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

        2.5 輔助工具的設計

        2.5.1 日志分析

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

        2.5.2 文件比較

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

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

        2.5.3 客戶端配置

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

        2.5.4 客戶端管理

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

        3 結語

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

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

        參 考 文 獻

        [1]嚴志敏.TOF基礎服務高性能緩存系統(tǒng)的設計與實現(xiàn)

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

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

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

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

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

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

        [7]必應網(wǎng)典.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.

        [責任編輯:鐘聲賢]

        亚洲成a∨人片在无码2023| 中文字幕一区二三区麻豆| 久久精品国产熟女亚洲| 国产亚洲日本精品无码| 五月天丁香久久| 国产一区二区三区视频免费在线 | 欧美国产小视频| 久久精品这里就是精品| 神马影院日本一区二区| 国产在线观看无码免费视频| 亚洲最新偷拍网站| 亚洲一码二码在线观看| 国产嫩草av一区二区三区| 国产午夜精品一区二区三区| 国产午夜在线观看视频播放| 丰满女人又爽又紧又丰满| 国产自精品| 人妻色中文字幕免费视频 | 丰满人妻一区二区三区免费视频| 亚洲色大成网站www永久一区| 鲁丝一区鲁丝二区鲁丝三区| 国产免费网站在线观看不卡| 一色桃子中文字幕人妻熟女作品| 成人性生交大片免费看r| 亚洲图片第二页| 国产亚洲精品久久情侣| 激性欧美激情在线| 国产成人av综合亚洲色欲| 青青草精品在线免费观看| 欧洲成人一区二区三区| 在线播放亚洲第一字幕| 日本在线免费精品视频| 久久一二区女厕偷拍图| 尤物视频在线观看| 亚洲ⅤA中文字幕无码| h视频在线免费观看视频| 人妻少妇精品视频专区| 免费超爽大片黄| 在线免费观看毛视频亚洲精品| 色老板美国在线观看| 亚洲熟妇无码av不卡在线播放 |