傅 強,雷 蒙
(中國科學(xué)技術(shù)信息研究所,北京 100038)
隨著IT 技術(shù)和信息化建設(shè)的發(fā)展,應(yīng)用系統(tǒng)功能體系不斷完善,應(yīng)用系統(tǒng)部署規(guī)模日益增長。考慮到互聯(lián)網(wǎng)用戶服務(wù)質(zhì)量要求,應(yīng)用系統(tǒng)通常采用模塊化開發(fā)建設(shè)和分布式部署模式,少數(shù)系統(tǒng)部署規(guī)模甚至突破數(shù)萬臺服務(wù)器。系統(tǒng)開發(fā)建設(shè)以模塊化方式組織,在長期系統(tǒng)服務(wù)、運行管理過程中積累大量系統(tǒng)模塊版本以及部署記錄等信息。如何有效管理這些模塊,配置、記錄信息,是現(xiàn)階段運維管理的挑戰(zhàn)。在運維管理過程中妥善記錄各類應(yīng)用模塊的部署情況,可以支撐系統(tǒng)回退,從而有利于實現(xiàn)系統(tǒng)故障的快速部署調(diào)整。
復(fù)雜信息系統(tǒng)運維部署管理通常使用自動化服務(wù)器配置管理工具,可以對所管理的對象實行自動化配置,如系統(tǒng)管理、安裝軟件等,實現(xiàn)運維信息管理、部署操作管理、機房設(shè)備管理、應(yīng)用系統(tǒng)管理,常用的工具有Chef、Ansible、Fabric等。這些管理工具詳細記錄復(fù)雜信息系統(tǒng)中每個應(yīng)用模塊的信息,包括部署文件、配置文件、部署記錄、版本信息、數(shù)據(jù)庫、文件備份、接口情況、服務(wù)監(jiān)控等,保障了復(fù)雜信息系統(tǒng)的運維管理工作平穩(wěn)有序開展。
在復(fù)雜信息系統(tǒng)的運維過程中,服務(wù)故障、系統(tǒng)漏洞、安全問題等時常發(fā)生,運維人員在故障定位、原因分析、系統(tǒng)升級等過程中通?;ㄙM較長時間,影響系統(tǒng)正常對外服務(wù)。一個應(yīng)用模塊的部署一般存在多個版本,如部署版本1、版本2、版本3.5,應(yīng)用模塊的多個部署版本是由功能完善、性能調(diào)優(yōu)或bug 修復(fù)造成的。當(dāng)一個較高版本的應(yīng)用模塊出現(xiàn)運維問題時,為快速做好故障處置,降低版本、降維運行是一個現(xiàn)實可行且實施高效的技術(shù)選擇。當(dāng)一個版本從較高版本(如版本3.5)回退到較低版本(如版本2)時,需要實施部署回退。
信息系統(tǒng)的建設(shè)過程中,各個應(yīng)用模塊分別部署在不同服務(wù)器上,每個應(yīng)用模塊的部署版本共同組成了信息系統(tǒng)的當(dāng)前部署版本。例如,某個信息系統(tǒng)共計4 個應(yīng)用模塊,該信息系統(tǒng)的部署情況、應(yīng)用模塊關(guān)系與應(yīng)用版本如圖1 所示,表示應(yīng)用模塊的部署版本為3,到的箭頭表示調(diào)用了的服務(wù)。隨著信息系統(tǒng)功能不斷發(fā)展迭代、不斷優(yōu)化和修復(fù)bug 后,組成信息系統(tǒng)的應(yīng)用模塊可能會增加,相關(guān)模塊的部署版本會升級,圖1 中信息系統(tǒng)升級后的部署情況如圖2 所示。從圖2 可見,信息系統(tǒng)升級時,增加了1 個應(yīng)用模塊,同時應(yīng)用模塊的部署版本從1 升級為2。
圖1 4 個應(yīng)用模塊的信息系統(tǒng)
圖2 5 個應(yīng)用模塊的信息系統(tǒng)
當(dāng)某個應(yīng)用模塊因為功能缺陷、安全問題等原因需進行調(diào)整時,可以通過部署回退操作恢復(fù)系統(tǒng)服務(wù)。由于應(yīng)用模塊版本間可能存在依賴關(guān)系,穩(wěn)妥方案是系統(tǒng)回退到出問題模塊部署之前的系統(tǒng)版本。例如,圖2 中的應(yīng)用模塊或發(fā)生故障時,信息系統(tǒng)將從圖2 回退到圖1 的部署狀態(tài)。
在實際信息化工作中,信息系統(tǒng)的集成和部署規(guī)模都是龐大的,以科技部的科技計劃項目申報管理系統(tǒng)——國家科技管理信息系統(tǒng)公共服務(wù)平臺為例,經(jīng)過15 年的發(fā)展,其部署規(guī)模約為300 臺服務(wù)器,存在大量的應(yīng)用模塊和部署版本。以信息系統(tǒng)運維工作為基礎(chǔ),本文研究復(fù)雜信息系統(tǒng)回退方法,并應(yīng)用在故障處置、系統(tǒng)降維運行過程中。通過這種方法,可以有效降低運維管理強度,提升故障處理效率。
運維工作需要記錄的內(nèi)容一般包括四個方面。
1)基本信息。包含應(yīng)用的名稱、工程名、開發(fā)單位、版本號、上線時間等。
2)配置參數(shù)。服務(wù)器IP、服務(wù)端口號、部署路徑、中間件名稱、中間件版本號等。
3)部署與備份文件。當(dāng)前應(yīng)用部署文件,以及以往的各類應(yīng)用備份、用戶文件備份、數(shù)據(jù)庫備份等。
4)運維記錄。運維人員操作內(nèi)容與操作時間,包括應(yīng)用升級、應(yīng)用重啟、修改配置、更新數(shù)據(jù)、安全補丁等。
為實現(xiàn)應(yīng)用部署回退,本文提出一種應(yīng)用部署模型,包含應(yīng)用基本信息、服務(wù)性能、備份文件、運維記錄等,該模型表達如下:
式中:表示應(yīng)用基本信息,由多個鍵值對組成,包括應(yīng)用名稱、部署名稱、版本號等基本屬性;表示應(yīng)用的配置參數(shù),是系統(tǒng)部署、正常運行相關(guān)的各種信息;表示部署與備份文件,記錄應(yīng)用不同版本對應(yīng)的部署、備份文件位置;表示運維記錄,主要記錄應(yīng)用不同版本的上線、更新、下線等操作時間等信息。
本文采用有向圖{,},表示某一時刻復(fù)雜信息系統(tǒng)部署關(guān)系,這種方法與鄰接矩陣表示圖的方法類似,將其定義為復(fù)雜信息系統(tǒng)部署關(guān)系的鄰接矩陣表示法。其中為所有應(yīng)用的集合,也就是圖中的頂點,可用一維數(shù)組存儲應(yīng)用部署模型的信息。為應(yīng)用之間的關(guān)系,即圖中的邊,可用二維數(shù)組表示兩個應(yīng)用之間的關(guān)聯(lián)關(guān)系。
對于任意兩個應(yīng)用a和a,兩者的部署關(guān)系為a調(diào)用a的服務(wù),則在{,}中存在一條從a到a的邊,記為<a,a>(≠),且r=1。本文定義{,}的鄰接矩陣表示如下,是一個×的矩陣:
以5個應(yīng)用組成的系統(tǒng)為例,系統(tǒng)部署關(guān)系如圖3所示。圖3 中:..version=1,..version=2,..version=3,..version=4,..version=5,則這個包含5 個應(yīng)用系統(tǒng)的部署關(guān)系圖用一個5×5 的矩陣表示為:
圖3 系統(tǒng)部署關(guān)系示例
本文提出的復(fù)雜信息系統(tǒng)部署關(guān)系鄰接矩陣表示法,采用圖的鄰接矩陣表示法記錄復(fù)雜信息系統(tǒng)應(yīng)用模塊部署關(guān)系的同時,還將每一個應(yīng)用模塊的部署版本記錄在鄰接矩陣中,有利于應(yīng)用模塊版本控制與部署關(guān)系的統(tǒng)一運維管理。
復(fù)雜信息系統(tǒng)部署關(guān)系隨著運維部署操作會產(chǎn)生變化,在不同的時間點,復(fù)雜信息系統(tǒng)的部署關(guān)系是不同的,因此可以用與時間點定義復(fù)雜信息系統(tǒng)在某個時刻的部署關(guān)系。結(jié)合復(fù)雜信息系統(tǒng)部署管理的上述特征,本文提出一種復(fù)雜信息系統(tǒng)部署關(guān)系模型,={,,}。實際上,是包含每個時刻復(fù)雜信息系統(tǒng)部署關(guān)系的集合。
式中:G是t時刻復(fù)雜信息系統(tǒng)的部署關(guān)系圖,最早的系統(tǒng)部署關(guān)系圖為,最新的系統(tǒng)部署關(guān)系圖為G。根據(jù)復(fù)雜信息系統(tǒng)運維管理的增量變化特點,可以得出當(dāng)t< t時,A?A且R?R。
復(fù)雜信息系統(tǒng)運維管理過程中,每一個應(yīng)用系統(tǒng)、部署關(guān)系會發(fā)生變化,都會導(dǎo)致應(yīng)用、部署關(guān)系發(fā)生變化。例如,一個新的應(yīng)用模塊部署、一個在線應(yīng)用模塊升級、一個應(yīng)用模塊下線等??梢?,復(fù)雜信息系統(tǒng)的部署關(guān)系{,}隨著特定部署操作,存在以下5 個特點。
1)應(yīng)用模塊會發(fā)生變更,包括基本信息、服務(wù)性能、備份文件、運維記錄等。
2)應(yīng)用部署關(guān)系隨應(yīng)用模塊變更而變更。
3)在沒有應(yīng)用變更時,部署關(guān)系維持不變,發(fā)生新的運維操作時,才可能發(fā)生變化。
4)變更是在一個特定時間點發(fā)生的。
5)部署關(guān)系的變更,通常是由一個或少數(shù)幾個應(yīng)用的變更引起的,且僅與這些應(yīng)用模塊相關(guān)的部署關(guān)系會發(fā)生變更。
基于上述特點,復(fù)雜信息系統(tǒng)的部署管理過程可以采用有限狀態(tài)機(Finite State Machine,F(xiàn)SM)表示運維部署操作引發(fā)的復(fù)雜信息系統(tǒng)整體狀態(tài)的變化。本文提出一個適用于復(fù)雜信息系統(tǒng)部署狀態(tài)模型,由三元組{,,}表示,其中:是部署狀態(tài)模型的狀態(tài)集合;是各類運維部署操作集合,分為常規(guī)操作、變更操作和回退操作;是一個狀態(tài)遷移關(guān)系的矩陣,×?,?×。
在部署狀態(tài)模型中,運維操作觸發(fā)信息系統(tǒng)部署狀態(tài)的改變。是信息系統(tǒng)所有部署狀態(tài)的集合,信息系統(tǒng)在某一個時間點的部署狀態(tài)只對應(yīng)一個特定的S。的任意2 個狀態(tài)S和S都存在時間上的先后關(guān)系,當(dāng)S早于S時,<。信息系統(tǒng)每一次部署狀態(tài)變化都是由某一個運維部署操作引起的,其中常規(guī)操作通常不會改變部署狀態(tài),變更操作會觸發(fā)部署狀態(tài)變遷為新的狀態(tài),回退操作會觸發(fā)部署狀態(tài)變遷為舊的狀態(tài)。表示因運維操作觸發(fā)的一次部署狀態(tài)遷移關(guān)系集合,可以看作是一個矩陣,這個矩陣記錄了和的關(guān)系。的階是由的數(shù)量決定的,因此矩陣是一個 ||階矩陣。
圖4 給出了一個信息系統(tǒng)部署狀態(tài)模型的例子,其中={,,}。這個狀態(tài)機模型的狀態(tài)遷移關(guān)系矩陣如表1 所示,={,,,?},?記為空運維部署操作。
圖4 部署狀態(tài)模型示例
表1 部署狀態(tài)模型狀態(tài)遷移
結(jié)合系統(tǒng)部署關(guān)系模型,本文提出一種復(fù)雜信息系統(tǒng)部署回退算法。當(dāng)復(fù)雜信息系統(tǒng)的部分應(yīng)用模塊發(fā)生故障時,通過回退算法將故障應(yīng)用模塊的部署版本回退到可用版本,同時處理好所有與故障應(yīng)用模塊存在依賴關(guān)系應(yīng)用的部署關(guān)系與版本回退情況,快速恢復(fù)系統(tǒng)故障。發(fā)生故障的應(yīng)用模塊?在部署關(guān)系模型G的A中,且??A。在回退算法中,針對故障應(yīng)用模塊?無故障的上一個部署版本,結(jié)合部署關(guān)系、部署關(guān)系模型,通過部署回退算法計算出能穩(wěn)定運行的部署關(guān)系模型對象G,從而實現(xiàn)部署關(guān)系模型G到穩(wěn)定部署關(guān)系模型G的部署調(diào)整與服務(wù)切換,實現(xiàn)復(fù)雜信息系統(tǒng)故障快速恢復(fù)。
按照與故障應(yīng)用模塊?的關(guān)系,部署關(guān)系模型G中應(yīng)用集合A可劃分為?的父節(jié)點集合A、子節(jié)點集合A、無關(guān)聯(lián)節(jié)點集合A,即A=A+A+A+?。根據(jù)部署關(guān)系,從應(yīng)用集合A的整體上分析,A調(diào)用?的服務(wù),?調(diào)用A的服務(wù),A與?沒有服務(wù)調(diào)用關(guān)系。因此,?的版本回退只影響A的運行,并不會影響A和A,部署回退算法執(zhí)行過程中重點關(guān)注?和A的部署版本計算,A和A可維持當(dāng)前部署版本不變。
復(fù)雜信息系統(tǒng)部署回退算法如下:
上述復(fù)雜信息系統(tǒng)部署回退算法主要分為4 個步驟,如圖5 所示。
圖5 復(fù)雜信息系統(tǒng)部署回退算法
1)尋找故障應(yīng)用模塊的穩(wěn)定部署版本。在復(fù)雜信息系統(tǒng)部署關(guān)系模型中,遍歷每一個部署關(guān)系模型對象G,尋找故障應(yīng)用模塊?的上一個穩(wěn)定的部署版本?,以及?所在的G和應(yīng)用集合A,這個穩(wěn)定版本記為。
2)尋找故障應(yīng)用模塊父節(jié)點集合。在部署關(guān)系模型G中,遍歷部署關(guān)系鄰接矩陣,尋找對?有依賴關(guān)系的應(yīng)用模塊,即?的父節(jié)點,然后再遞歸尋找?父節(jié)點的父節(jié)點,所有符合條件的父節(jié)點應(yīng)用模塊集合記為A。
3)尋找故障應(yīng)用模塊的無關(guān)聯(lián)節(jié)點集合??紤]到G演變到G的過程中可能出現(xiàn)新增的應(yīng)用模塊,因此故障應(yīng)用模塊的無關(guān)聯(lián)節(jié)點在G中尋找。在應(yīng)用集合A中,除去故障應(yīng)用模塊?,以及?的父節(jié)點集合A,剩余部分就是故障應(yīng)用模塊的無關(guān)聯(lián)節(jié)點集合A。
4)生成可部署的應(yīng)用組合。合并步驟1)中故障應(yīng)用模塊的穩(wěn)定部署版本、步驟2)中故障應(yīng)用模塊的父節(jié)點集合以及步驟3)中故障應(yīng)用模塊的無關(guān)聯(lián)節(jié)點集合,就形成了回退算法的計算結(jié)果,即可恢復(fù)故障的部署關(guān)系模型G。
在實際復(fù)雜信息系統(tǒng)運維管理過程中應(yīng)用本文提出的部署回退算法,從服務(wù)監(jiān)控、故障定位、算法執(zhí)行、部署文件、應(yīng)用更新、系統(tǒng)備份、服務(wù)啟動等運維工作出發(fā),可以形成一個閉環(huán)的運維操作流程,如圖6 所示。
圖6 回退算法在運維工作中的應(yīng)用
1)服務(wù)監(jiān)控。為實時掌握復(fù)雜信息系統(tǒng)的運行與服務(wù)情況,需要開展自動化服務(wù)監(jiān)控。自動化的服務(wù)監(jiān)控依賴監(jiān)控軟件,開源的監(jiān)控軟件有Zabbix、Nagios 等,收費的監(jiān)控軟件產(chǎn)品有北塔軟件等。服務(wù)監(jiān)控是為了能夠掌握復(fù)雜信息系統(tǒng)中每個應(yīng)用模塊、中間件、操作系統(tǒng)、數(shù)據(jù)庫、網(wǎng)絡(luò)等各個方面的情況,本節(jié)重點是發(fā)現(xiàn)應(yīng)用模塊故障,例如頁面加載失敗、功能異常等問題,以此發(fā)現(xiàn)系統(tǒng)故障。
2)故障定位。運維人員收到監(jiān)控系統(tǒng)的故障報警后,立刻啟動故障定位與恢復(fù)處置。首先,運維人員根據(jù)報警信息,定位故障應(yīng)用系統(tǒng)?的名稱、服務(wù)器、版本號等相關(guān)信息。然后,運維人員根據(jù)系統(tǒng)服務(wù)情況和應(yīng)用部署信息,通過運維操作恢復(fù)故障。在故障定位與恢復(fù)過程中,對于無法在當(dāng)前應(yīng)用部署版本上實現(xiàn)故障恢復(fù),需要啟動整體集成系統(tǒng)做版本回退操作的情況時,執(zhí)行本文提出的部署回退算法。
3)算法執(zhí)行。以故障應(yīng)用模塊?為輸入,執(zhí)行部署回退算法,利用本文提出的應(yīng)用部署模型、部署關(guān)系鄰接矩陣、部署關(guān)系模型,可快速計算故障應(yīng)用模塊?的回退應(yīng)用版本?,以及相關(guān)聯(lián)父節(jié)點應(yīng)用節(jié)點集合A、其他應(yīng)用節(jié)點集合A,最終輸出待部署系統(tǒng)部署關(guān)系模型G。
4)部署文件。根據(jù)部署回退算法產(chǎn)生的部署關(guān)系模型G,遍歷A中的每一個應(yīng)用a以及a的版本號,通過應(yīng)用部署模型a.記錄的備份文件路徑,形成待部署應(yīng)用關(guān)系模型G的應(yīng)用部署文件路徑列表。
5)應(yīng)用更新。依據(jù)應(yīng)用部署文件路徑列表,拷貝A中所有應(yīng)用的部署與配置文件,存放在指定的服務(wù)器路徑下,完成所有應(yīng)用模塊部署配置文件的拷貝與更新。
6)系統(tǒng)備份。任何一個信息系統(tǒng)都需開展系統(tǒng)備份工作,根據(jù)運維管理要求,一般在應(yīng)用模塊版本更新時會創(chuàng)建應(yīng)用程序備份,形成本文提出的應(yīng)用部署模型的備份文件。復(fù)雜信息系統(tǒng)的備份文件統(tǒng)一保存,與應(yīng)用系統(tǒng)存在多對一的對應(yīng)關(guān)系,這些關(guān)系也都記錄在應(yīng)用部署模型中,為回退算法的應(yīng)用提供備份文件支撐。
7)服務(wù)啟動。針對已完成拷貝和更新的應(yīng)用列表,啟動所有服務(wù),完成復(fù)雜信息系統(tǒng)故障后的版本回退,實現(xiàn)系統(tǒng)服務(wù)的快速恢復(fù)。同時,記錄相關(guān)的應(yīng)用版本號,完成應(yīng)用備份,持續(xù)開展服務(wù)監(jiān)控。
本文根據(jù)信息系統(tǒng)運維部署實際情況,提出了一種適用于復(fù)雜信息系統(tǒng)運維管理的部署回退方法,可實現(xiàn)應(yīng)用模塊故障時快速恢復(fù)整體系統(tǒng)服務(wù)。首先定義了復(fù)雜信息系統(tǒng)中應(yīng)用模塊的部署模型,通過有向圖表示應(yīng)用模塊之間的部署關(guān)系;再由部署關(guān)系定義了復(fù)雜信息系統(tǒng)的部署關(guān)系模型;最后利用狀態(tài)機描述了復(fù)雜信息系統(tǒng)部署狀態(tài)隨著運維部署操作的變化關(guān)系,結(jié)合部署狀態(tài)模型,提出了部署回退算法以及算法應(yīng)用方法。
下一步將重點研究多個應(yīng)用模塊故障的部署回退方法,進一步提升復(fù)雜信息系統(tǒng)運維管理過程的故障應(yīng)急響應(yīng)效率。