黃煒耀
【摘要】 本文主要對(duì)分布式應(yīng)用系統(tǒng)的版本更新進(jìn)行研究分析。首先通過(guò)傳統(tǒng)應(yīng)用系統(tǒng)與分布式應(yīng)用系統(tǒng)版本控制與更新的特點(diǎn)進(jìn)行分析比較,并從中提出分布式應(yīng)用系統(tǒng)更新需要面對(duì)與解決的問(wèn)題,最后給出具體的方案與較詳細(xì)的設(shè)計(jì)思路進(jìn)行分析。
【關(guān)鍵詞】 分布式 HDFS 版本控制 版本更新
一、引言
隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,分布式這個(gè)概念越來(lái)越被大家所熟悉,分布式相關(guān)技術(shù)也被廣泛地應(yīng)用于我們的系統(tǒng)中。而大型的分布式應(yīng)用系統(tǒng)通常由幾十到幾百甚至幾千臺(tái)PC服務(wù)器組成,在實(shí)際的運(yùn)維過(guò)程中,我們不得不面對(duì)如此多的應(yīng)用主機(jī)上程序版本控制與更新的問(wèn)題。
二、版本更新實(shí)現(xiàn)方案
2.1分布式應(yīng)用系統(tǒng)版本更新特點(diǎn)
傳統(tǒng)集中式應(yīng)用系統(tǒng)一般由少量幾臺(tái)應(yīng)用主機(jī)組成,其版本更新可通過(guò)人為方式一對(duì)一地進(jìn)行升級(jí)實(shí)現(xiàn)。而分布式應(yīng)用系統(tǒng)一般由大量的應(yīng)用主機(jī)組成,此時(shí)版本發(fā)布,如果再按傳統(tǒng)的方式處理,不僅需要投入大量的人力,而且發(fā)布的效果也很難得到保證。因此,在版本發(fā)布過(guò)程中我們需要減少人為干預(yù)與投入的時(shí)間、分布式各應(yīng)用主機(jī)能夠?qū)崿F(xiàn)版本自動(dòng)升級(jí),并且各應(yīng)用主機(jī)更新結(jié)果可跟蹤。
2.2方案實(shí)現(xiàn)
通過(guò)以上對(duì)分布式應(yīng)用系統(tǒng)版本更新的特點(diǎn)進(jìn)行分析,本文給出一種版本自動(dòng)更新的方案,總的架構(gòu)圖如下:
以上方案由發(fā)布主機(jī)、HDFS、應(yīng)用集群節(jié)點(diǎn)三大環(huán)節(jié)組成。方案中各環(huán)節(jié)負(fù)責(zé)的功能如下:
發(fā)布主機(jī)
對(duì)應(yīng)用系統(tǒng)版本進(jìn)行管理,包含版本發(fā)布、版本回退以及對(duì)各應(yīng)用節(jié)點(diǎn)版本更新情況進(jìn)行跟蹤。發(fā)布過(guò)程中首先對(duì)當(dāng)前集群版本進(jìn)行備份,然后將版本增量發(fā)布至對(duì)應(yīng)的HDFS目錄,最后在HDFS版本庫(kù)中對(duì)更新的文件進(jìn)行版本號(hào)升級(jí)。此過(guò)程需要保證版本發(fā)布的“事務(wù)一致性”,即一個(gè)版本更新包涉及的文件發(fā)布,需要保證都成功或失敗時(shí)進(jìn)行發(fā)布回滾操作,以減少對(duì)業(yè)務(wù)系統(tǒng)的影響。
HDFS
存放應(yīng)用系統(tǒng)文件對(duì)應(yīng)的版本號(hào)信息、應(yīng)用系統(tǒng)文件備份庫(kù)、應(yīng)用系統(tǒng)文件在用庫(kù)。其中備份庫(kù)可用于版本回退,在用庫(kù)用于節(jié)點(diǎn)實(shí)時(shí)更新的數(shù)據(jù)源。為了保證每次更新文件版本號(hào)的唯一性,版本號(hào)值等于文件內(nèi)容MD5算法的結(jié)果值。這里選用HDFS做為版本更新的中轉(zhuǎn)環(huán)節(jié),能保證數(shù)據(jù)的安全與高可用性。
應(yīng)用集群節(jié)點(diǎn)
負(fù)責(zé)本節(jié)點(diǎn)版本更新以及更新結(jié)果的反饋。應(yīng)用節(jié)點(diǎn)保留本地版本庫(kù)以及當(dāng)前最新的版本文件,其與HDFS上保持一致。每個(gè)應(yīng)用節(jié)點(diǎn)上都部署有更新線程,定時(shí)對(duì)遠(yuǎn)程版本庫(kù)及本地版本庫(kù)進(jìn)行比對(duì)分析,當(dāng)存在不一致的文件時(shí),首先一次性將不一致的文件下載至本地臨時(shí)目錄,待所有文件都下載完畢后,再移至正式目錄進(jìn)行覆蓋,最后修改本地版本庫(kù)信息。在更新本地文件時(shí),可根據(jù)系統(tǒng)自身的需要增加額外的功能如:java類的重載、緩存數(shù)據(jù)的更新等。
三、結(jié)束語(yǔ)
本文首先對(duì)分布式應(yīng)用系統(tǒng)版本更新的特點(diǎn)進(jìn)行分析,并與傳統(tǒng)應(yīng)用系統(tǒng)的版本升級(jí)進(jìn)行對(duì)比,并從中得出分布式應(yīng)用系統(tǒng)版本更新過(guò)程中需要面對(duì)與解決的問(wèn)題。緊接著對(duì)遇到的問(wèn)題制定出解決方案,并做了詳細(xì)的設(shè)計(jì)分析。本方案實(shí)現(xiàn)邏輯簡(jiǎn)單并自主實(shí)現(xiàn),其相對(duì)于其它的開(kāi)源軟件如:puppet等,更容易撐控。借助以上分布式應(yīng)用系統(tǒng)版本更新的設(shè)計(jì)思路,不同的應(yīng)用系統(tǒng)可根據(jù)需要在相應(yīng)的環(huán)節(jié)增加功能,最終制定出符合自身系統(tǒng)需要的版本更新流程,可大大減少人工投入與降低人為發(fā)布的風(fēng)險(xiǎn)。
參 考 文 獻(xiàn)
[1] Tom White.《Hadoop權(quán)威指南》
[2] Hadoop http://hadoop.apache.org/
[3] Git版本更新控制 http://www.open-open.com/lib/view/open1328069609436.html
[4] George Coulouris等.《分布式系統(tǒng)概念與設(shè)計(jì)》
[5]Tanenbaum.《分布式系統(tǒng)原理與范型(第2版)》