年關(guān)將近,各個項目也都要進(jìn)行系統(tǒng)割接驗收,對于成熟的大項目來說,業(yè)務(wù)系統(tǒng)在UAT環(huán)境測試通過后,就要考慮系統(tǒng)的PRO環(huán)境割接了。對目前我負(fù)責(zé)的項目來說,由于是涉及到很多家廠商不同的系統(tǒng),整體系統(tǒng)的割接方案不僅需要考慮到自身新建的項目同時還要兼顧各個廠商在整體割接所牽扯到的相互依賴等內(nèi)容,最終的割接上線往往是一個系統(tǒng)工程,不能有絲毫的馬虎。
系統(tǒng)割接概述
各個系統(tǒng)需處理上線前的數(shù)據(jù)初始化,系統(tǒng)環(huán)境部署,系統(tǒng)參數(shù)配置,服務(wù)部署,權(quán)限設(shè)置等基礎(chǔ)工作。對于系統(tǒng)上線,最重要的還是要有詳細(xì)的上線和割接計劃,同時有完整的檢查單CheckList,否則就很容易遺漏關(guān)鍵事項。
對于微服務(wù)平臺來講,本身就支持多環(huán)境的切換以及部署,可以通過網(wǎng)關(guān)進(jìn)行動態(tài)的服務(wù)發(fā)布和路由。
一個大項目的上線,需要多方,多個業(yè)務(wù)系統(tǒng)配合,步調(diào)一致才能夠完成。
如果對于業(yè)務(wù)系統(tǒng)的上線或割接,大家都比較清楚,需要有詳細(xì)的上線割接計劃和方案,方案中必須還包括出現(xiàn)問題后的回退方案。同時對于系統(tǒng)上線,需要考慮期初靜態(tài)數(shù)據(jù)的初始化,動態(tài)流程中數(shù)據(jù)的導(dǎo)入,系統(tǒng)配置等各項工作,這些都是在生產(chǎn)環(huán)境部署完成后必須進(jìn)行初始化和檢查的關(guān)鍵工作。
一個系統(tǒng)如果是進(jìn)行版本更新或割接,那么一定會強(qiáng)調(diào)在割接過程中的平滑性,即在系統(tǒng)上線或割接后不能對老的業(yè)務(wù),已有的業(yè)務(wù)流程造成影響。同時在割接過程中希望的是能夠最短時間完成,建設(shè)停機(jī)消耗和等待時間。
如果能夠做到應(yīng)用系統(tǒng)本身的熱部署,或者或灰度發(fā)布往往更優(yōu)。
系統(tǒng)割接上線,從自身系統(tǒng)需要考慮對已有功能的向下兼容性,從外部系統(tǒng)協(xié)同角度,需要考慮在割接完成后自身提供接口服務(wù)的注冊,已經(jīng)割接完成后自身業(yè)務(wù)系統(tǒng)消費的服務(wù)是否能夠正常提供。這些都必須步調(diào)一致來完成,否則就很容易出現(xiàn)由于各級時間差導(dǎo)致的各個業(yè)務(wù)系統(tǒng)基礎(chǔ)數(shù)據(jù)不一致,控制邏輯不同等問題。
對于系統(tǒng)割接上線完成后就是正式的生產(chǎn)環(huán)境,如果要在生產(chǎn)環(huán)境進(jìn)行最終的系統(tǒng)功能驗證往往直接會影響到業(yè)務(wù),也可能影響到基礎(chǔ)數(shù)據(jù)的不一致。而這個時候常見的做法主要有:
其一就是將生產(chǎn)環(huán)境的應(yīng)用和數(shù)據(jù)再復(fù)制回測試環(huán)境,然后再測試環(huán)境進(jìn)行模擬生產(chǎn)環(huán)境的進(jìn)一步驗證;其次就是在割接完成后必須要提前對消費的服務(wù)進(jìn)行連通性側(cè)設(shè)驗證,確保在生產(chǎn)環(huán)境割接和部署完成后能夠正確的消費到外部系統(tǒng)的服務(wù)。
割接前的準(zhǔn)備
生產(chǎn)環(huán)境安裝和部署手冊
這里面實際是包括兩個方面內(nèi)容,一個是標(biāo)準(zhǔn)的數(shù)據(jù)庫和應(yīng)用中間件的安裝,一個是應(yīng)用程序的部署,服務(wù)的部署。對于數(shù)據(jù)庫和中間件的安裝和基礎(chǔ)配置,數(shù)據(jù)庫和應(yīng)用中間件的參數(shù)調(diào)優(yōu)等,往往應(yīng)該提前就很早做完。而實際上線都是指的應(yīng)用和服務(wù)部署。
對于應(yīng)用和服務(wù)部署,最重要的就是基于持續(xù)集成的思路,應(yīng)該是將UAT環(huán)境測試通過的部署包遷移到生產(chǎn)環(huán)境進(jìn)行部署,整個部署包不再進(jìn)行重新編譯構(gòu)建,而只是應(yīng)該修改相關(guān)的配置文件和參數(shù)設(shè)置。這樣可以確保部署到生產(chǎn)環(huán)境的應(yīng)用和程序是測試環(huán)境測試通過的版本。
而實際我們在做項目的時候,往往在交維前各個環(huán)境都是我們自己管理和部署,不一定形成了很完整的文檔,導(dǎo)致這個環(huán)境部署工作很隨意,這也是導(dǎo)致后續(xù)生產(chǎn)環(huán)境部署后出現(xiàn)問題的一個原因。
對于IT管理和治理比較規(guī)范的企業(yè)而言,往往有嚴(yán)格的版本發(fā)布和上線流程,即使是對于全新項目生產(chǎn)環(huán)境的上線也不能由乙方自己去操作,必須填寫上線申請單,提供安裝腳本和部署包,部署詳細(xì)步驟說明,轉(zhuǎn)由交付IT運維人員進(jìn)行操作。在這種情況下往往上線過程會更加嚴(yán)謹(jǐn)受控。
數(shù)據(jù)初始化腳本
對于應(yīng)用的數(shù)據(jù)初始化腳本實際上包括兩個方面的內(nèi)容,一個內(nèi)容是應(yīng)用本身的參數(shù)配置腳本,一個是涉及到應(yīng)用的靜態(tài)數(shù)據(jù)初始化和導(dǎo)入腳本。這兩部分腳本都必須提前準(zhǔn)備好,對于前者往往涉及到應(yīng)用系統(tǒng)本身的元數(shù)據(jù)管理功能存儲到數(shù)據(jù)庫,也可能存儲在應(yīng)用服務(wù)器的操作系統(tǒng),應(yīng)用本身的配置文件中,都必須考慮到。而對于靜態(tài)數(shù)據(jù)初始化腳本,往往需要提供相應(yīng)的初始化sql腳本進(jìn)行導(dǎo)入,而不是簡單的提供Excel,這樣才能夠方便甲方的系統(tǒng)管理員進(jìn)行批量導(dǎo)入。
對于數(shù)據(jù)初始化腳本,應(yīng)該有完整的數(shù)據(jù)導(dǎo)入和校驗邏輯,異常提升邏輯,以方面在數(shù)據(jù)初始化失敗的時候查找問題。同時在數(shù)據(jù)導(dǎo)入后,最好再提供相應(yīng)的數(shù)據(jù)驗證腳本,對導(dǎo)入的數(shù)據(jù)的正確性進(jìn)行驗證和確認(rèn)。而不是完全依靠人工的方式去核查和比對。
數(shù)據(jù)遷移方案
在新老系統(tǒng)割接時,可能會涉及到 新老系統(tǒng)的數(shù)據(jù)庫使用不同的情況,因此需要做好數(shù)據(jù)庫遷移的整體行方案,要做到 保障業(yè)務(wù)中斷時間最小化,數(shù)據(jù)遷移前做好遷移數(shù)據(jù)量的評估(所需硬件資源,網(wǎng)絡(luò)資源,遷移時間等),遷移后的數(shù)據(jù)校驗,遷移容災(zāi)備份方案等要遵循相應(yīng)的遷移原則去制定方案
- 資源保護(hù)原則
- 必須保證原系統(tǒng)數(shù)據(jù)的正確性和準(zhǔn)確性。
- 對原有系統(tǒng)的數(shù)據(jù)在一段時間內(nèi)進(jìn)行保護(hù)。
- 數(shù)據(jù)過濾原則
- 在不影響新系統(tǒng)運行的前提下,適當(dāng)放寬數(shù)據(jù)過濾條件。
- 對于錯誤的數(shù)據(jù)分錯誤級別進(jìn)行標(biāo)識,方便手工調(diào)整數(shù)據(jù)。
- 對于過時的無用的數(shù)據(jù),通過一定的條件進(jìn)行篩選。
- 對于有些數(shù)據(jù),嚴(yán)重影響系統(tǒng)運行的,則必須在轉(zhuǎn)換前進(jìn)行處理。
- 對于新系統(tǒng)中需要的關(guān)鍵數(shù)據(jù),原系統(tǒng)中不存在或者不滿足的,需要在數(shù)據(jù)遷移前手工補(bǔ)錄。
- 對于原系統(tǒng)擁有,但新系統(tǒng)不需要的數(shù)據(jù),不進(jìn)行遷移。
- 對于原系統(tǒng)有嚴(yán)重錯誤數(shù)據(jù),不進(jìn)行遷移。
- 數(shù)據(jù)照搬原則
- 對原系統(tǒng)的數(shù)據(jù),原則上不要做修改或拆分,在必要的情況下,可以對原數(shù)據(jù)進(jìn)行一些簡單的加減運算,以適合新系統(tǒng)的需要。
- 新老系統(tǒng)對照原則
- 在原系統(tǒng)中的數(shù)據(jù)在新系統(tǒng)找不到對應(yīng)表,如果不是關(guān)鍵數(shù)據(jù),在新系統(tǒng)中用不著,不進(jìn)行遷移。
- 對于新系統(tǒng)要用的數(shù)據(jù)如果原系統(tǒng)這邊沒有對應(yīng)表,那么在數(shù)據(jù)遷移前要進(jìn)行手工維護(hù)。
- 當(dāng)原系統(tǒng)中的字段長度比新系統(tǒng)對應(yīng)字段的長度長,如果不是關(guān)鍵字段,新系統(tǒng)修改字段長度,如果是關(guān)鍵字段進(jìn)行截取或者改用其他不重要的字段進(jìn)行存取。
應(yīng)用上線和部署完成后的檢查單CheckList
這個清單相當(dāng)重要,一定不要相信自己的腦袋能夠記住所有的檢查項而沒有遺漏,一個應(yīng)用系統(tǒng)的上線涉及到數(shù)據(jù)庫,中間件,應(yīng)用程序,數(shù)據(jù),接口,應(yīng)用功能多方面的內(nèi)容,要確保上線功能沒有問題必須每個點都需要檢查到位,因此必須要有詳細(xì)的檢查清單,按照清單進(jìn)行逐一的檢查才可以。
檢查單就是起到這個作用,我們只需要提前想清楚所有的檢查點,并給出具體的檢查方法,然后在系統(tǒng)部署和上線完成后,按檢查單里面的檢查項進(jìn)行逐一的檢查就可以了。這樣可以確保沒有任何的遺漏。
人工驗證
這個步驟也不能少,即我們的應(yīng)用在上線完成后,往往會在生產(chǎn)環(huán)境部署完成的應(yīng)用上進(jìn)行一個初步的冒煙測試,確保所有功能都沒有問題。在這個過程中可能會產(chǎn)生垃圾數(shù)據(jù),可以在測試完成后進(jìn)行清除。整個測試過程為了不影響到實際的組織和用戶,我們也可以在系統(tǒng)里面單獨建立一個臨時組織和用戶,用分配的臨時用戶進(jìn)行相應(yīng)的單據(jù)創(chuàng)建,流程審批,單據(jù)生效,接口和業(yè)務(wù)聯(lián)通流轉(zhuǎn)等方面的測試,確保整個端到端流程是完整的。
當(dāng)然還有一種方法就是我們在生產(chǎn)環(huán)境正式部署和配置完成后,可以將生產(chǎn)環(huán)境的整個內(nèi)容再完全克隆回UAT環(huán)境,在UAT環(huán)境進(jìn)行相應(yīng)的測試工作,這樣可以確保生產(chǎn)環(huán)境不進(jìn)垃圾數(shù)據(jù),同時又確保生產(chǎn)環(huán)境的配置沒有任何問題。在從生產(chǎn)環(huán)境克隆回來的時候,注意重點是克隆生產(chǎn)環(huán)境數(shù)據(jù)庫和參數(shù)配置內(nèi)容,而對于測試環(huán)境的一些參數(shù)配置項仍然需要保留測試環(huán)境的。
割接方案模版
-
系統(tǒng)當(dāng)前現(xiàn)狀分析
- 系統(tǒng)部署架構(gòu)現(xiàn)狀
- 系統(tǒng)當(dāng)前硬件資源詳細(xì)描述
- 系統(tǒng)技術(shù)架構(gòu)現(xiàn)狀
- 核心數(shù)據(jù)庫,中間件,技術(shù)組件說明
第一部分重點說明當(dāng)前應(yīng)用部署架構(gòu)現(xiàn)狀,硬件和存儲等IT硬件設(shè)施邏輯架構(gòu)和詳細(xì)資源清單說明。同時說明業(yè)務(wù)系統(tǒng)的IT技術(shù)架構(gòu),使用到的核心數(shù)據(jù)庫,中間件,技術(shù)組件。
在邏輯架構(gòu)中,應(yīng)該能夠體現(xiàn)出具體各個中間件,技術(shù)組件,應(yīng)用的邏輯部署關(guān)系。
如果是全新的業(yè)務(wù)系統(tǒng)部署上線,則不存在這部分內(nèi)容的描述。
-
割接后系統(tǒng)說明
- 系統(tǒng)目標(biāo)部署架構(gòu)
- 系統(tǒng)硬件資源列表
- 系統(tǒng)應(yīng)用部署列表
- 系統(tǒng)技術(shù)架構(gòu)
- 核心數(shù)據(jù)庫,中間件,技術(shù)組件說明
- 目標(biāo)架構(gòu)和當(dāng)前現(xiàn)狀差異分析
第二部分應(yīng)該重點描述割接后的系統(tǒng)架構(gòu),其中目標(biāo)架構(gòu)仍然包括了硬件基礎(chǔ)設(shè)施架構(gòu),應(yīng)用部署清單也包括了軟件技術(shù)架構(gòu)。同時需要分析目標(biāo)架構(gòu)和現(xiàn)狀差異。
-
割接方案
- 硬件割接方案說明
- 軟件割接方案說明
- 數(shù)據(jù)割接方案說明
對于系統(tǒng)的割接可以理解為硬件和兩個不同的層面。
有些割接可能只涉及到硬件的增加,比如數(shù)據(jù)庫增加一個RAC節(jié)點,原來用的HaProxy需要割接到硬件的F5硬件均衡設(shè)備,數(shù)據(jù)庫存儲容量需要進(jìn)行擴(kuò)容等。
還有一些割接只涉及到軟件層面,比如軟件重大版本的部署。
也存在同時涉及到軟件和硬件層面的割接,比如傳統(tǒng)的軟件架構(gòu)當(dāng)前升級為微服務(wù)架構(gòu),你可以看到軟件層面,硬件層面都存在重大變化和修改。
同時在割接方案中也存在僅僅進(jìn)行數(shù)據(jù)割接的情況,比如硬件部署環(huán)境和軟件當(dāng)前部署版本均沒有發(fā)生變化,但是需要對數(shù)據(jù)庫中數(shù)據(jù)進(jìn)行割接。比如對于數(shù)據(jù)庫中的物料信息進(jìn)行新舊代碼切換等操作。
割接方案簡單來說就是要說清楚從現(xiàn)狀到目標(biāo)的具體變化點。因此在進(jìn)行割接方案闡述的時候也可以進(jìn)一步的配合系統(tǒng)物理部署架構(gòu)和邏輯部署架構(gòu)圖進(jìn)一步進(jìn)行對比闡述。以方面閱讀人能夠更加明顯的看到割接前后的差異點和變化點。
-
割接影響分析和割接準(zhǔn)備
- 割接原則說明
- 割接影響分析(硬件,軟件,數(shù)據(jù),用戶)
- 割接前的準(zhǔn)備工作
- 需要提前準(zhǔn)備和安裝的硬件和中間件
- 數(shù)據(jù)備份工作
割接影響分析是割接方案里面最重要的一個內(nèi)容,即需要分析割接對整體業(yè)務(wù)系統(tǒng)運行的影響情況,在整個影響分析中識別和分析關(guān)鍵的風(fēng)險點。
影響分析包括了硬件,軟件,數(shù)據(jù)各個層面的分析。同時也包括以用戶視角的影響分析和評估。有些割接屬于底層割接對用戶沒有影響,但是有些應(yīng)用層面的割接往往割接完成后對用戶訪問方式操作入口,以及具體功能都會有影響,這些也需要進(jìn)一步分析說明。
割接前的準(zhǔn)備工作需要詳細(xì)描述的內(nèi)容包括了:
需要提前準(zhǔn)備的硬件和網(wǎng)絡(luò)環(huán)境
需要提前準(zhǔn)備和安裝的數(shù)據(jù)庫和中間件,技術(shù)組件等
需要進(jìn)行的環(huán)境配置文件,數(shù)據(jù)庫備份工作
-
詳細(xì)割接計劃
割接組織和人員
割接時間
割接詳細(xì)的步驟和參與人員
-
割接詳細(xì)內(nèi)容說明
- 當(dāng)前環(huán)境備份操作
- 環(huán)境準(zhǔn)備和中間件安裝
- 應(yīng)用安裝部署
- 數(shù)據(jù)割接和切換
- 環(huán)境配置等
- 割接完成后的驗證和確認(rèn)
在割接計劃部分需要說明割接組織人員,割接的詳細(xì)步驟,每個步驟的時間和參與人員,對于每個割接步驟又需要在割接詳細(xì)內(nèi)容部分給出詳細(xì)的割接過程說明。
在割接完成后還需要有專門的割接驗證步驟說明,以確保割接成功。
-
割接風(fēng)險分析和應(yīng)對
- 割接風(fēng)險分析
- 割接回退和恢復(fù)方案詳細(xì)說明
- 割接應(yīng)急方案說明
對于割接風(fēng)險實際上包括兩個層面,一個是在割接過程中就發(fā)生了問題這個時候直接進(jìn)行回退操作即可。也可能是割接本身沒有問題,但是系統(tǒng)上線后出現(xiàn)問題,這個時候可能已經(jīng)產(chǎn)生了新的數(shù)據(jù)到數(shù)據(jù)庫,因此不能簡單的采用回退操作,必須有詳細(xì)的應(yīng)急處理方案和回退方案。
如果是簡單的回退那么就會造成數(shù)據(jù)丟失,需要業(yè)務(wù)人員重新進(jìn)行補(bǔ)錄。因此在這種情況下往往需要考慮的是各種部分回退的策略,或者準(zhǔn)備新數(shù)據(jù)自動簽約回老架構(gòu)和數(shù)據(jù)庫的腳本等。
在當(dāng)前業(yè)務(wù)系統(tǒng)間本身存在關(guān)聯(lián)依賴和集成,因此割接影響分析不僅僅是分析對自己系統(tǒng)的影響,還需要分析割接上線后如此系統(tǒng)出現(xiàn)重大問題,對其它外部依賴系統(tǒng)造成的影響。比如上線后,新的數(shù)據(jù)已經(jīng)傳輸給其它業(yè)務(wù)系統(tǒng),那么這個時候回退就還涉及到其它業(yè)務(wù)系統(tǒng)也存在相應(yīng)的數(shù)據(jù)回退操作,其復(fù)雜度遠(yuǎn)超過對單個系統(tǒng)的回退處理。
總結(jié)
割接方案需要各個系統(tǒng)的架構(gòu)師、系統(tǒng)運維、實施人員、測試人員共同編寫,要確保系統(tǒng)的相互依賴關(guān)系,保障割接后的系統(tǒng)正常穩(wěn)定的運行,同時也需要做好系統(tǒng)容災(zāi)等方案,萬一割接后出現(xiàn)重大問題,及時回退切換。