研發運維一體化解決方案UAVStack升級系統設計
一、背景
作為微服務架構系統,UAVStack的主要服務元件包括:
- 中介軟體增強框架(英文名MonitorFramework,簡稱MOF探針):部署在業務系統
- 監控代理程式 (英文名MonitorAgent,簡稱MA):部署在業務系統
- 健康管理服務 (英文名HealthManager,簡稱HM):部署在後臺服務群
隨著業務量的增長,部署在業務系統及後臺的元件也會相應增加。當總量達到一定量級後,元件升級迭代的成本和效率都會面臨很大挑戰:
-
人工迭代:人工/時間成本高,錯誤率也高
-
對接釋出系統:
-
優點:流程化、標準化
-
缺點:對接成本高,每次裝卸元件都要一一對接。
-
因此,UAVStack基於自身特點開發了一套升級系統,實現了下列功能:
- 運維資料實時同步:確保元件基礎資訊的實效性及對稱性
- 操作便捷:支援版本構建、資訊檢視、任務下發等
- 任務粒度清晰:提供任務詳情、問題診斷、重試、歷史留痕等功能
二、UAVStack升級系統架構圖
- Apphub:前端應用,發起升級指令
- MA/HM:自帶升級程序的元件。支援自升級,升級成功後自重啟
- upgrade server(升級中心):存放升級版本,提供下載功能
- upgrade client(升級程序):執行具體升級任務
三、升級中心與升級程序
upgrade server升級中心
- 一個獨立的HM元件
- Web端CRUD後臺介面支撐,服務端
- 提供升級動作(action)入口,服務端
- 分配升級事件(event)
- 提供升級包下載能力,服務端
- 提供反饋入口,服務端
upgrade client升級程序
- 獨立程序,指令碼觸發
- 升級動作,事件驅動
- 從接收引數中提取server地址
- 升級包下載,客戶端
- 過程留痕、任務反饋,客戶端
在分配event的同時,upgrade server升級中心會將詳細的event資訊一起傳送給MA/HM。MA/HM接收到指令event後呼叫shell,拉起獨立的程序upgrade client,同時附帶詳細的event資訊。upgrade client作為獨立程序完成對指定元件的升級。
upgrade server具備擴容能力,能夠處理海量元件升級任務。當多個HM對同一個event做分配時,需要做特殊處理,保證event只會被派發一次。當多個作業人提交action時,若對同一個元件提交了多次不同的event事件,也需要做特殊處理,保證一個元件的event事件的單次完整性。
為降低程式碼複雜程度,提高功能可靠性,減少對第三方的依賴,同時考慮到action資料已經落地,最終決定通過儲存實現event分配,即對儲存併發下發修改指令,確保只有一條指令可以成功。而升級程序則通過檔案鎖保證了event事件的單次完整性。
四、升級過程
(狀態機)
4.1 upgrade server通過event判斷是否UAV自升級
1)UAV自升級:具備接收升級指令,自升級,自重啟(HM、MA)
- upgrade server作為HM也可以被升級
2)第三方升級:不能接收升級指令,升級後不能自重啟(MOF以及其他軟體目錄)
- 升級工作過程和原理與UAV自升級一致。
- 任何安裝了MA的軟體都可以使用升級功能
4.2 upgrade server分配任務
- NEW:action資料落地,解析event資料
- ALLOCATION:掃描event資料,獲取升級事件(傳送修改指令佔坑,標明當前HM負責的event)
- 成功獲取的event放入佇列,等待派送
- 佇列消費:讀取event資訊,獲取單次升級目標等資訊;打包event資訊,同時附加當前HM Server回撥地址等;最後對指定升級目標發起升級指令。
4.3 upgrade client執行升級任務
基於業務程式碼實現事件驅動:每個處理過程被視為一個事件。升級成功後,將事件標識為成功;否則預設為失敗。升級成功或失敗都需要指定下一個動作,從而實現靈活處理並形成業務閉環。
- BEGIN (檔案鎖獲取) >
BACKUP >
PACKAGE_DOWN_LOAD >
OVERRIDE_FILE >
STOP_UAV_PRO(UAV自升級)>
START_UAV_PRO(UAV自升級)>
END_ACTION(釋放檔案鎖、現場清理、反饋回撥)>
END
- 處理過程發生異常/錯誤:
OVERRIDE_FILE_CALLBACK(回刷備份檔案)> END_ACTION (同理)>END
- 多次併發event事件:若無法獲取檔案鎖,則程序執行失敗,任務直接結束。檔案鎖釋放後,方可繼續處理event事件
4.4 upgrade client重啟MA、HM
- 優先stop>start,停止不成功則kill pid
- 利用crontab啟動應用程序,關鍵解決按原有啟動引數啟動
- MSCP程式啟動時,會利用crontab的特性新增值守
- 基於liunx本身的命令,獲取到程序pid即可完成以上操作
五、UAVStack升級系統亮點
5.1 運維資料實時同步
同步業務系統的節點資訊與當前元件的版本資訊時,往往主要依賴人工維護或相關釋出系統。而UAVStack天然的實時畫像資料則解決了運維資訊同步不及時這一問題,不僅不再需要人為干預,還能支援運維資訊自動發現。通過畫像資料,可以實時檢視元件部署情況。
5.2 操作便捷
不需要人為干預即可實現資訊自動維護,支援實時過濾與檢視、批量操作及任務下發。
5.3 任務粒度清晰
- 歷史留痕
- 過程留痕
- 問題診斷、重試
六、總結
這套基於UAVStack自身特色的升級系統降低了運維成本、提升了迭代效率,單人迭代數十個元件迭代只需幾分鐘即可完成,已成功支援測試版本切換與迭代約400次,支援線上版本迭代約350次。
官方網站:https://uavorg.github.io/main/
開源地址:https://github.com/uavorg
作者:劉波安野
首發: