王曉東
摘要:該文通過分析虛擬化的分布式軟件日志管理系統(tǒng)VDSL的特征,研究利用動態(tài)二進(jìn)制翻譯技術(shù),將分布式系統(tǒng)平臺中,各虛擬結(jié)點的軟件日志記錄,實現(xiàn)同步聚合,形成具有協(xié)同一致性的軟件日志,為軟件日志的安全審計與故障恢復(fù)提供支持。為軟件故障分析與審計提供有效的管理方法。
關(guān)鍵詞:虛擬化;分布式;LogOS;軟件日志管理
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)10-0090-03
1 基于虛擬化的二進(jìn)制動態(tài)翻譯平臺
LogOS是一個的動態(tài)二進(jìn)制翻譯基礎(chǔ)平臺。它是一個進(jìn)程級虛擬機(jī)。LogOS 是一個基于動態(tài)翻譯框架擴(kuò)展,針對全系統(tǒng)翻譯的的翻譯框架,LogOS 借助于中間指令實現(xiàn)重定向功能,且可以獨立于底層硬件執(zhí)行程序。同時,LogOS 實現(xiàn)了模塊劃分和接口定義,通過中間指令過濾功能完成對執(zhí)行代碼進(jìn)行翻譯和優(yōu)化。它可以對內(nèi)核和用戶級二進(jìn)制文件進(jìn)行翻譯。LogOS 總體架構(gòu)圖如圖1所示。
LogOS 由一個虛擬機(jī)(VM),一個代碼高速緩存單元(code cache)和一個Logger 調(diào)用的檢測AP 構(gòu)成。VM由一個即時編譯器,一個仿真器和一個調(diào)度程序器組成。在 LogOS 取得對程序的控制之后,VM 協(xié)調(diào)它的組成部分并執(zhí)行程序:調(diào)度器啟動JIT 編譯器和檢測程序代碼。在目標(biāo)代碼高速緩存單元中存儲被編譯的代碼。emulator是用來進(jìn)行需要 VM 特殊處理的系統(tǒng)調(diào)用的。因此它只能獲取用戶狀態(tài)下的代碼。當(dāng)程序在LogOS 中執(zhí)行結(jié)束后,Logger完成了對程序的插樁后與程序分離,并將所得到的不同粒度的軟件運行日志存放在本地文件中。
2 基于虛擬化的分布式軟件日志管理系統(tǒng)VDSL設(shè)計
2.1 軟件日志管理系統(tǒng)VDSL總體架構(gòu)
在動態(tài)二進(jìn)制翻譯平臺LogOS基礎(chǔ)上,提出了一種虛擬計算環(huán)境中的分布式軟件日志管理系統(tǒng)VDSL,以實現(xiàn)對整個分布式虛擬集群的軟件日志管理。VDSL定了日志記錄的數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)可以保存每個節(jié)點的所產(chǎn)生的軟件日志。進(jìn)而在傳輸前被VDSL同一封裝為相同的文件格式,以保證各節(jié)點日志交互與服務(wù)器的日志匯總。VDSL總體架構(gòu)如圖2所示。
構(gòu)建三個層次(表示層、功能層和數(shù)據(jù)層)日志系統(tǒng)模型,表示層指的是服務(wù)軟件的用戶API部分。它的功能只負(fù)責(zé)實現(xiàn)用戶、應(yīng)用程序間的通信,不負(fù)責(zé)業(yè)務(wù)的實施。在功能層,具體實現(xiàn)業(yè)務(wù)處理功能。表示層像功能層發(fā)送數(shù)據(jù)請求,同時訪問數(shù)據(jù)層獲取信息以完成功能層的請求。完成請求后結(jié)果返回給發(fā)送請求的表示層。數(shù)據(jù)層就是MySQL數(shù)據(jù)庫管理系統(tǒng)。管理員負(fù)責(zé)管理對MySQL中數(shù)據(jù)的讀寫。數(shù)據(jù)庫中的數(shù)據(jù)文件存儲著來自每個虛擬節(jié)點日志信息。數(shù)據(jù)庫必須要實現(xiàn)能對海量數(shù)據(jù)的快速查找,檢索和更新。所以,用戶使用SQL語句,從功能層將數(shù)據(jù)插入到數(shù)據(jù)層中的MySQL數(shù)據(jù)庫。整個三層服務(wù)請求層次如圖3所示:
2.2 VDSL系統(tǒng)功能應(yīng)實現(xiàn)以下功能:
1)在線調(diào)試。對于大部分處理海量數(shù)據(jù)的分布式軟件系統(tǒng)。若想在其出現(xiàn)故障時進(jìn)行調(diào)試或數(shù)據(jù)收集,必須停止系統(tǒng)的運行,在線下進(jìn)行操作,給業(yè)務(wù)服務(wù)帶來很大的損失。VDSL系統(tǒng)可以實現(xiàn)分布式軟件系統(tǒng)的不中斷在線調(diào)試。將動態(tài)二進(jìn)制翻譯平臺LogOS部署在虛擬化平臺上分布式軟件系統(tǒng)中的每個虛擬節(jié)點上,使用日志服務(wù)實現(xiàn)服務(wù)軟件的在線調(diào)試。
2)實現(xiàn)軟件日志的可配置特性。支持用戶自己配置的軟件日志記錄粒度級別。將LogOS設(shè)計的依據(jù)調(diào)試檢測要求的可定制的的平臺。Logger將按照事先定制好的要求自動來記錄分布式服務(wù)平臺中服務(wù)軟件運行時產(chǎn)生的數(shù)據(jù)流。具體不同粒度的定制,則完全由容錯系統(tǒng)的管理員設(shè)定。而不是由日志記錄平臺記錄所有的數(shù)據(jù)流,這樣會占用過多的硬件資源。當(dāng)配有VDSL的分布式系統(tǒng)投入使用之后,我們可以在運行時根據(jù)業(yè)務(wù)要求來隨時改變Logger的日志記錄粒度
3)通過VDSL分析整個分布式系統(tǒng)運行狀況。不同于單主機(jī)節(jié)點上的日志分析,在大規(guī)模分布式系統(tǒng)中各個節(jié)點之間都緊密關(guān)聯(lián),互相影響。整個VDSL系統(tǒng)不能僅僅局限于一個單節(jié)點之上的日志功能,利用時鐘同步功能對整個分布式系統(tǒng)中各個節(jié)點上的軟件日志進(jìn)行精確排序。
4)良好的擴(kuò)展性且易于管理。在基于虛擬化的分布式系統(tǒng)中,VDSL系統(tǒng)實現(xiàn)了統(tǒng)一管理各節(jié)點的軟件日志文件。為用戶和管理員提供良好的前臺操作界面,實現(xiàn)日志選擇功能,包括日志的查詢、日志的刪除等統(tǒng)計功能。
2.3 日志管理模式
隨著海量數(shù)據(jù)的分布式軟件系統(tǒng)運行會產(chǎn)生龐大的日志文件,在VDSL系統(tǒng)中,日志存儲方式采用數(shù)據(jù)庫表,在數(shù)據(jù)庫服務(wù)器的庫表中,存儲日志信息,用戶和管理員可以對此統(tǒng)計和查詢。VDSL系統(tǒng)日志的管理方式采用故障服務(wù)器統(tǒng)一管理日志,收集所有虛擬節(jié)點上的軟件日志。將各虛擬結(jié)點的軟件日志通過時鐘同步功能排序整合存儲到數(shù)據(jù)庫中,以供后續(xù)用途。在日志文件傳輸中,大部分的分布式軟件系統(tǒng)平臺中,對每個服務(wù)軟件的每個進(jìn)程,一般是寫在各自的日志文件中。如系統(tǒng)中有K個進(jìn)程,K個進(jìn)程的日志文件都是單獨寫,則各個進(jìn)程之間就不會產(chǎn)生互斥。但是,在進(jìn)程讀寫日志文件的時候,就會產(chǎn)生讀寫互斥。日志文件中的內(nèi)容被傳輸代理讀取進(jìn),就需要來解決進(jìn)程中讀寫互斥。在分布式軟件系統(tǒng)運行時,每個節(jié)點上都運行著多種服務(wù)對象。如果用對文件加鎖的方法來應(yīng)對服務(wù)對象和傳輸代理之間的讀寫互斥問題,則會阻塞各應(yīng)用進(jìn)程的日志記錄過程,對系統(tǒng)的運行效率造成很大的影響。為了解決這個問題,以提高系統(tǒng)中應(yīng)用服務(wù)軟件的日志記錄速度和并發(fā)度,因此,在設(shè)計中考慮了一種“雙緩沖區(qū)”的策略。設(shè)計如圖4所示。
對圖中K個進(jìn)程,當(dāng)系統(tǒng)運行時,分別對應(yīng)兩個相互獨立緩沖區(qū),對每個節(jié)點上的每個進(jìn)程產(chǎn)生的數(shù)據(jù)流將寫入緩沖區(qū)1,若緩沖區(qū)2非空,則緩沖區(qū)1繼續(xù)處理進(jìn)程的請求。如果出現(xiàn)緩沖區(qū)2為空的情況,則將緩沖區(qū)1推送到緩沖區(qū)2的位置,且停止往緩沖區(qū)1中寫入日志數(shù)據(jù)。傳輸代理只需處理緩沖區(qū)2中的日志數(shù)據(jù)即可。同時,系統(tǒng)再分配一個空緩沖區(qū)作為新的緩沖區(qū)1繼續(xù)處理進(jìn)程提出的日志請求。這樣傳輸代理就不需要與各進(jìn)程之間進(jìn)行交互,避免了讀寫互斥,加快了處理日志文件的速度。
2.4 日志格式的設(shè)計
在VDSL日志系統(tǒng)中,進(jìn)程在執(zhí)行時產(chǎn)生的各種數(shù)據(jù)通過軟件日志來記錄。為了更好地通過日志信息來完成故障審計與性能分析,在VDSL日志系統(tǒng)中,需要進(jìn)行日志記錄的格式設(shè)計。為方便用戶,對日志記錄的格式設(shè)計,必須滿足用戶可配置,分布式軟件在運行過程中用戶可以自行配置所要記錄的日志數(shù)據(jù)信息。為了保證VDSL日志管理系統(tǒng)的通用性,日志記錄格式定義如表1所示。
對日志文件數(shù)據(jù)在寫入之前,要通過CORBAAny類型進(jìn)行封裝,封裝后是八位位組序列,VDSL采用純二進(jìn)制數(shù)據(jù)傳輸方式。在整個傳輸過程中,日志信息是完全透明的,但日志文件無法使用文本編輯器打開,確保了日志文件在傳輸過程中的安全性。當(dāng)日志文件傳輸結(jié)束,開始日志信息的解封裝。把本日志文件的屬性值通過CORBA中提取,最后把日志格式還原為發(fā)送前,完成了軟件日志的格式處理。保證了日志文件的安全,不被篡改。
2.5 時鐘同步設(shè)計
在VDSL日志系統(tǒng)的管理平臺中,如果無法實現(xiàn)同步各個結(jié)點的物理時鐘。將會給整個VDSL日志系統(tǒng)的管理增加難度。因此,在設(shè)計中,采用了一種內(nèi)部同步算法。即在VDSL日志系統(tǒng)中,設(shè)置一個節(jié)點作為主節(jié)點,從節(jié)點的時鐘信號由主節(jié)點根據(jù)自己本地的當(dāng)前標(biāo)準(zhǔn)時間來周期性的持續(xù)發(fā)送,并對每個從節(jié)點的本地時間進(jìn)行記錄。各個從節(jié)點計算主節(jié)點發(fā)送的標(biāo)準(zhǔn)時間與從節(jié)點本地時間之間的時差,計算時差返給主節(jié)點。主節(jié)點通過估算各時鐘信號的往返時間,進(jìn)而對每個從節(jié)點返回的時差值進(jìn)行修正。 然后告訴各從節(jié)點,如何修正各自的時間。最后實現(xiàn)整個VDSL日志系統(tǒng)中各節(jié)點的時鐘同步。
3 VDSL日志系統(tǒng)性能的測試
通過日志服務(wù)將服務(wù)有效的分解,充分利用雙緩沖區(qū)、多線程技術(shù),實現(xiàn)各虛擬結(jié)點服務(wù)軟件的日志在分布式系統(tǒng)中的傳輸速度。通過測試VDSL系統(tǒng)運行和不運行時的性能對比,來檢驗 VDSL 對云容錯平臺的性能影響大小。
對VDSL日志系統(tǒng)的性能測試:為了驗證VDSL對系統(tǒng)性能影響很小,通過比較對云容錯平臺中虛擬節(jié)點開啟和不開啟 VDSL 系統(tǒng)時的性能指標(biāo),對 VDSL 作出性能測試。在云容錯集群中的所有節(jié)點上關(guān)閉 VDSL,然后運行各業(yè)務(wù)軟件,并用 System Monitor 和 Top 工具從 CPU,內(nèi)存和網(wǎng)絡(luò)通信三個方面記錄系統(tǒng)開銷。(2)在各個虛擬節(jié)點開啟軟件日志服務(wù)功能的情況下運行各業(yè)務(wù)軟件,并用System Monitor 和 Top 工具從 CPU,內(nèi)存和網(wǎng)絡(luò)通信三個方面記錄系統(tǒng)開銷。對虛擬節(jié)點上的 Apache 服務(wù)器申請總數(shù)為 100000 次持續(xù)連接請求,并發(fā)數(shù)為10,利用Top工具對系統(tǒng)性能數(shù)據(jù)進(jìn)行監(jiān)控與記錄。比較以上兩者的測試數(shù)據(jù),得出VDSL系統(tǒng)對整個容錯系統(tǒng)的的影響很小。VDSL日志系統(tǒng)利用動態(tài)二進(jìn)制翻譯平臺,為軟件容錯提供虛擬運行環(huán)境、良好的隔離性、透明性,為分布式系統(tǒng)中各虛擬結(jié)點軟件日志的記錄提供了三種級別的記錄粒度,可以滿足不同的日志分析要求。統(tǒng)一的日志格式使日志管理系統(tǒng)滿足高可用性和高擴(kuò)展性。另外,在系統(tǒng)內(nèi)采用內(nèi)部時鐘同步算法保證了整個系統(tǒng)的同步一致性。在虛擬化環(huán)境下實現(xiàn)了分布式系統(tǒng)中各虛擬結(jié)點軟件日志的記錄、同步聚合,為系統(tǒng)用戶提供了有效的管理方法。
參考文獻(xiàn):
[1] 肖達(dá), 劉建毅. 云災(zāi)備關(guān)鍵技術(shù)[J]. 中興通訊技術(shù), 2010, 15(5).
[2] 項國富, 金海, 鄒德清. 基于虛擬化的安全監(jiān)控. 軟件學(xué)報, 2012, 23(8).
[3] 吳建勝. 路由交換技術(shù)[M]. 北京: 清華大學(xué)出版社, 2010.
[4] 張中薟. 接入網(wǎng)技術(shù)[M]. 2版.北京: 人民郵電出版社, 2009.