作者:北京真視通科技股份有限公司 王樂
本文發(fā)表于《InfoAV China》2023年1/2月刊
【摘要】:隨著世界科技信息的飛速發(fā)展,分布式系統(tǒng)變得越來越普遍,它是計算機科學領域的一個龐大而復雜的領域。一個分布式系統(tǒng)是一些獨立的計算機的集合,但是對于該系統(tǒng)的用戶來說,系統(tǒng)就像一臺計算機一樣。與集中式系統(tǒng)相比,分布式系統(tǒng)相對更為復雜,在建設一個分布式系統(tǒng)時在資源的透明性、系統(tǒng)容錯性、可伸縮性、配置管理等方面需要特別關注。配置管理是用管理和技術的手段對項目的工作成果進行管理,保證工作成果的完整性和可跟蹤性。分布式系統(tǒng)項目研發(fā)過程中面臨著持續(xù)不斷的變化,變化可能導致版本混亂,目前GIT分布式配置管理系統(tǒng)就是用于控制變化,記錄軟件產品的演化過程,確保開發(fā)者在軟件生命周期中的各個階段都能得到精確的產品配置,最終保證軟件產品的完整性、一致性、可追溯性。
【關鍵詞】:分布式系統(tǒng);配置管理;GIT
隨著新一輪科技革命和產業(yè)變革深入發(fā)展,采用數(shù)字技術的分布式系統(tǒng)變得越來越普遍,分布式系統(tǒng)把任務分散在多個處理節(jié)點上(通常是分布在一地或多地的多臺計算設備上)進行處理并獲得結果的系統(tǒng)。政府企事業(yè)單位中大型信息服務平臺因為業(yè)務形式多樣,會包含多個子系統(tǒng),這些子系統(tǒng)由不同研發(fā)廠家提供,通常總集成商通過統(tǒng)籌調度按時保質保量完成系統(tǒng)交付和平穩(wěn)運行。在大型分布式系統(tǒng)建設過程中,對于版本控制、變更控制、權限控制、協(xié)作開發(fā)和資產管理方面,提出了更高的要求,此時需要一套穩(wěn)定成熟的版本管理系統(tǒng)來支撐分布式系統(tǒng)的研發(fā)管理,記錄項目研發(fā)的演化過程,確保開發(fā)者在軟件生命周期中的各個階段都能得到精確的產品配置,保證工作成果的完整性和可跟蹤性。
一,配置管理系統(tǒng)簡介
常用的軟件配置管理系統(tǒng)分為兩大類,一類是付費商業(yè)軟件,一類是開源軟件。付費軟件配置管理工具有Rational ClearCase,Microsoft VSS等。開源免費軟件配置管理工具有SVN和GIT,目前在國內IT領域使用最廣泛,當屬GIT軟件,在一些傳統(tǒng)企業(yè)中也有組織繼續(xù)采用開源軟件SVN。
SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統(tǒng),用于多個人共同開發(fā)同一個項目,達到共享資源,實現(xiàn)最終集中式的管理。集中式管理的核心是服務器,所有開發(fā)者在開始新一天的工作之前必須從服務器獲取代碼,然后開發(fā),最后解決沖突,提交。所有的版本信息都放在服務器上。如果脫離了服務器,開發(fā)者基本上是無法工作的。SVN優(yōu)點是對中文支持好,使用界面統(tǒng)一,功能完善,操作簡單。
GIT是一個開源的分布式版本控制系統(tǒng),最初由Linus Torvalds編寫,用于Linux內核開發(fā)的版本控制。GIT支持離線工作,在本地可以進行很多操作,包括分支功能。分布式相比于集中式的最大區(qū)別在于開發(fā)者可以提交到本地,每個開發(fā)者通過克隆,在本地機器上拷貝一個完整的GIT倉庫。GIT命令多意味著功能多,若我們能掌握大部分 GIT的功能,體會到其中的奧妙,會發(fā)現(xiàn)再也回不去 SVN 的時代了。
二,分布式配置管理系統(tǒng)主要功能
配置項為配置管理設計的硬件、軟件或者二者的集合,在配置管理過程中作為一個單個實體來對待。典型配置項包括項目計劃書、需求文檔、設計文檔、源代碼、可執(zhí)行代碼、測試用例、運行軟件所需的各種數(shù)據(jù),它們經評審和檢查通過后進入配置管理。
配置庫(Configuration Library)存放配置項并記錄與配置項相關的所有信息,是配置管理的有力工具,利用庫中的信息可回答許多配置管理的問題。例如哪些客戶已提交了特定的系統(tǒng)版本,運行一個特定的系統(tǒng)版本需要什么硬件和系統(tǒng)軟件等。使用配置庫可以幫助配置管理員把分布式系統(tǒng)開發(fā)過程的各種工作產品,包括半成品或節(jié)點產品和最終產品管理得井井有條,使其不致管亂、管混、管丟。
配置庫可以分為開發(fā)庫、受控庫、產品庫3種類型。開發(fā)庫(Development Library)用于保存開發(fā)人員當前正在開發(fā)的配置實體,如:新模塊、文檔、數(shù)據(jù)元素或進行修改的已有元素,開發(fā)人員可以隨意修改;受控庫(Controlled Library)是包含當前的基線加上對基線的變更,在分布式系統(tǒng)開發(fā)的某個階段工作結束時,將當前的工作產品存入受控庫。受控庫存放測試版本的代碼,需要開發(fā)組長提交測試申請修改。產品庫(Product Library)包含已發(fā)布使用的各種基線的存檔,被置于完全的配置管理之下。在分布式系統(tǒng)完成系統(tǒng)測試后,作為最終產品存入產品庫中,等待交付用戶或現(xiàn)場安裝。
分布式版本管理系統(tǒng)對本地數(shù)據(jù)管理,分為三個區(qū),分別是工作區(qū),暫存區(qū)和倉庫區(qū)。工作區(qū)(Working Directory)是你在電腦里能看到的目錄,直接編輯的地方,肉眼可見,直接操作,任何對象都是在工作區(qū)中誕生和被修改。暫存區(qū)(Staging)類似于緩存區(qū)域,臨時保存你的改動,會記錄git add添加文件的相關信息(文件名、文件大小、timestamp…),不保存文件實體,通過id指向每個文件實體。可以使用git status查看暫存區(qū)的狀態(tài),任何修改都是從進入暫存區(qū)才開始被版本控制。倉庫區(qū)(Repository)分為本地倉庫和遠程倉庫,本地倉庫保存了對象被提交過的各個版本,比起工作區(qū)和暫存區(qū)的內容,它要更早一些。git commit后同步Staging的目錄樹到本地倉庫,自動初始化為本地倉庫,同時它會新建“.git”目錄方便從下一步通過git push同步本地倉庫與遠程倉庫。只有把修改提交到本地倉庫,該修改才能在倉庫中留下痕跡。可以在任何地方新建本地倉庫,只需要在目標目錄下執(zhí)行“git init”指令,就會將此目錄自動初始化為本地倉庫。遠程倉庫內容可能與本地倉庫同步,也可能不同步,但是它的內容是最早的。與協(xié)作者分享本地的修改,可以把它們push到遠程倉庫來共享。三個區(qū)之間的工作流及對應使用的指令如下圖所示:

三、分布式系統(tǒng)配置管理最佳實踐和關鍵技術點
分支(Branch)是軟件版本演化圖中的一條路徑,是軟件的一個獨立演化的版本序列。在配置庫中,各分支是獨立存儲的。在軟件版本演化圖的眾多分支中,有一條是主線(master),也稱主干。所有其它分支都從主線分出,并有可能會合并回主線。使用分支原因是需要創(chuàng)建一個不同的版本,或者一組人員需要在一個相對獨立的環(huán)境中互相配合共同完成一個大的任務。深層次原因是軟件開發(fā)進程面臨著兩個基本問題,即適當隔離和適當共享。適當隔離是在工作過程中,各人或各組需獨立地工作,不希望被別人意外地干擾,也不希望干擾別人。適當共享是各人或各組的工作,在適當?shù)臅r候,以適當?shù)姆绞剑蚕砗图伞7种瑫r對隔離和共享提供了支持。一條分支被創(chuàng)建后,它的生長是獨立的,工作在一條分支上,不會與主線或其它分支相互影響。分支的起點是分支的基礎,是分支繼承的內容,不同分支上的工作成果,可在適當?shù)臅r候合并。
通常對于小型分布式系統(tǒng)項目或產品,尤其成員大部分是熟悉GIT系統(tǒng)的研發(fā)人員,筆者最佳實踐是使用 GIT建立 dev, cont和 prod 三個分支分別對應開發(fā)庫、受控庫和產品庫,不需要建 3 個庫,這樣通過簡單的合并操作就可以實現(xiàn)從開發(fā)庫到受控庫、從受控庫到產品庫的代碼復制,而且可以從合并記錄中看出 3 個分支之間的關系。在分支中進行權限控制,進入要管理的項目倉庫,在分支頁簽下建好所需的分支,然后進入保護分支管理菜單,設置保護分支,按照提示操作具體分支,可以實現(xiàn)只允許管理員或者特定人員向這些分支提交/合并,從而實現(xiàn)了受控庫和產品庫受控。
對于中大型分布式系統(tǒng)項目研發(fā),尤其涉及多個廠家共同合作開發(fā)并最終集成的情況,最佳實踐是采用分組管理方式,來實現(xiàn)開發(fā)區(qū)、受控庫、產品庫的獨立管理,目錄結構跟傳統(tǒng)SVN后臺配置管理的結構類似。組(Group)是一個父子結構的目錄,其每一級都可以設置關聯(lián)的成員(Member),同時每一級下都可以創(chuàng)建項目(Project),組關聯(lián)的Member和Member對應的權限,會繼承到Group下的所有子項目和子組上,Project中除了繼承Group的Member,還可以單獨設置新的Member。這種方式可以為每個廠家分配自己負責的子項目,相對于完全分支管理,分組管理可以實現(xiàn)更嚴格的權限控制,當然也可以根據(jù)需要再做某個Project下單獨分支管理。客戶端方面,盡量選擇GUI客戶端,比如TortoiseGit,減少對GIT具體指令的依賴,這種前后端組合對于合作的各廠家版本配置技能要求會低很多。建議采用的配置管理流程圖如下:


結束語:
真視通云視頻工程實驗室在研發(fā)分布式系統(tǒng)產品時,使用成熟穩(wěn)定的分布式配置管理系統(tǒng),在自主研發(fā)模塊中,采用分支版本管理方式;在主導國內中大型分布式系統(tǒng)工程項目時,涉及多個合作單位,使用創(chuàng)新性的分組管理模式, 降低合作研發(fā)單位的配置管理技術要求,提高研發(fā)效率,保證軟件產品的完整性、一致性、可追溯性。
參考文獻:
[1] Wahli U,Brown J,Teinonen M,Trulsson L.軟件配置管理:IBM Rational ClearCase和ClearQuest UCM指南[M].李紀華,譯.北京:人民郵電出版社,2006.
[2] Gene Kim,Jez Humble,Patrick Debois,John Willis. DevOps實踐指南[M]. 劉征,王磊,馬博文,曾朝京譯.北京:人民郵電出版社,2018.
[3] GB/T 12505-90, 計算機軟件配置管理計劃規(guī)范 [S]