1. 程式人生 > >研發運維一體化解決方案UAVStack升級系統設計

研發運維一體化解決方案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

作者:劉波安野

首發: