研發運維一體化解決方案UAVStack升級系統設計

1、背景

做爲微服務架構系統,UAVStack的主要服務組件包括:前端

  • 中間件加強框架(英文名MonitorFramework,簡稱MOF探針):部署在業務系統
  • 監控代理程序 (英文名MonitorAgent,簡稱MA):部署在業務系統
  • 健康管理服務 (英文名HealthManager,簡稱HM):部署在後臺服務羣

隨着業務量的增加,部署在業務系統及後臺的組件也會相應增長。當總量達到必定量級後,組件升級迭代的成本和效率都會面臨很大挑戰:git

  • 人工迭代:人工/時間成本高,錯誤率也高github

  • 對接發佈系統:shell

    • 優勢:流程化、標準化架構

    • 缺點:對接成本高,每次裝卸組件都要一一對接。併發

所以,UAVStack基於自身特色開發了一套升級系統,實現了下列功能:框架

  • 運維數據實時同步:確保組件基礎信息的實效性及對稱性
  • 操做便捷:支持版本構建、信息查看、任務下發等
  • 任務粒度清晰:提供任務詳情、問題診斷、重試、歷史留痕等功能

2、UAVStack升級系統架構圖

  • Apphub:前端應用,發起升級指令
  • MA/HM:自帶升級進程的組件。支持自升級,升級成功後自重啓
  • upgrade server(升級中心):存放升級版本,提供下載功能
  • upgrade client(升級進程):執行具體升級任務

3、升級中心與升級進程

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、升級過程

(狀態機)

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便可完成以上操做

5、UAVStack升級系統亮點

5.1 運維數據實時同步

同步業務系統的節點信息與當前組件的版本信息時,每每主要依賴人工維護或相關發佈系統。而UAVStack自然的實時畫像數據則解決了運維信息同步不及時這一問題,不只再也不須要人爲干預,還能支持運維信息自動發現。經過畫像數據,能夠實時查看組件部署狀況。

5.2 操做便捷

不須要人爲干預便可實現信息自動維護,支持實時過濾與查看、批量操做及任務下發。

5.3 任務粒度清晰

  • 歷史留痕

  • 過程留痕

  • 問題診斷、重試

6、總結

這套基於UAVStack自身特點的升級系統下降了運維成本、提高了迭代效率,單人迭代數十個組件迭代只需幾分鐘便可完成,已成功支持測試版本切換與迭代約400次,支持線上版本迭代約350次。

官方網站:https://uavorg.github.io/main/

開源地址:https://github.com/uavorg

做者:劉波安野

首發: UAVStack智能運維

相關文章
相關標籤/搜索