sersync主要用於服務器同步,web鏡像等功能。基於boost1.41.0,inotify api,rsync command.開發。目前使用的比較多的同步解決方案是inotify-tools+rsync ,另外一個是google開源項目Openduckbill(依賴於inotify- tools),這兩個都是基於腳本語言編寫的。相比較上面兩個項目,本項目優點是:sersync是使用c++編寫,而且對linux系統文件系統產生的臨時文件和重復的文件操作進行過濾(詳細見附錄,這個過濾腳本程序沒有實現),所以在結合rsync同步的時候,節省了運行時耗和網絡資源。因此更快。相比較上面兩個項目,sersync配置起來很簡單,其中bin目錄下已經有基本上靜態編譯的2進制文件,配合bin目錄下的xml配置文件直接使用即可。另外本項目相比較其他腳本開源項目,使用多線程進行同步,尤其在同步較大文件時,能夠保證多個服務器實時保持同步狀態。本項目有出錯處理機制,通過失敗隊列對出錯的文件重新同步,如果仍舊失敗,則每10個小時對同步失敗的文件重新同步。本項目自帶crontab功能,只需在xml配置文件中開啟,即可按您的要求,隔一段時間整體同步一次。無需再額外配置crontab功能。本項目socket與http插件擴展,滿足您二次開發的需要。
Sersync 是我們金山逍遙網技術支持部平台組周洋同學,開發的一款基於 inotify + rsync 的大量文件的多服務器自動同步程序,目前已開源,開源協議為 New BSD License。
原理:
使用 Linux 2.6 內核的 inotify 監控 Linux 文件系統事件,被監聽目錄下如果有文件發生修改,sersync 將通過內核自動捕獲到事件,並將該文件利用 rsync 同步到多台遠程服務器。sersync 僅僅同步發生增、刪、改事件的單個文件或目錄,不像rsync鏡像同步那樣需要比對雙方服務器整個目錄下數千萬的文件,並且支持多線程同步,因此效率非常高。
應用:
金山游戲官網的 CMS 內容發布系統。無論編輯通過 Web 還是 FTP 上傳圖片、視頻、附件,還是系統工程師直接去CMS發布服務器上增加、修改、刪除文件,干完這些事情後不用做任何處理,sersync 會自動將發生增、刪、改事件的文件同步到遠程服務器,並可以在文件同步完成後,自動調用 CDN(ChinaCache)緩存刷新接口,刷新發生修改、刪除的文件的訪問 URL