熊貓直播Rancho發佈系統構建之路

作者介紹

wKiom1li3OyjVxZHAADRabjloFA352.jpg-wh_50



符傑超熊貓直播基礎架構部高級運維開發工程師。主要負責熊貓直播運維自動化架構平臺建設和開發

前言

        隨着熊貓直播的業務發展越來越快,業務需求的迭代和版本更新需求越來越多,對開發和運維面臨以下4個痛點:

  • 項目需求上線越來越多

  • 發佈週期比較長,人工操作比較繁瑣

  • 發佈項目效率和風險的問題,比如平滑發佈,切換負載均衡

  • 發佈過程沒有詳細的審計功能

       由此,團隊內部決定在現有的發佈過程上實現開發統一的發佈系統平臺,實現熊貓直播的運維發佈流程化、標準化、自動化爲一體的統一發布要求。

       下面圍繞整個Rancho發佈系統做總結梳理,總共分爲9個方面:

  • 實現的最終目的

  • 用戶登陸(發佈系統的第一道安全牆)

  • 用戶權限(發佈系統的第二道安全牆)

  • 項目權限(發佈系統的第三道安全牆)

  • 代碼發佈前臺

  • 代碼發佈後臺

  • 發佈過程/結果

  • 建立標準的wiki文檔

  • 小結

Rancho 發佈系統流程概述架構圖

wKioL1li3YPidrkZAACu3sM-94Y647.jpg-wh_50

Rancho 發佈系統流程圖

wKioL1li3biyL5vIAADh78GSaAQ883.jpg-wh_50

Rancho發佈系統

實現的最終目的

       隨着熊貓直播業務的迅猛發展、項目、產品的需求規模和版本迭代頻次是無法預估的。傳統的運維支持方式已漸漸無法滿足這種工程應用現狀。但是如果把發佈權利交付到開發人員手裏控制,運維安全是比較大的隱患。當2者都無法平衡的時候,利用高效的標準化,自動化體系將2個無法逾越的問題優化結合起來,我們結合了上述問題,實現了內部的發佈系統,對於發佈系統,實現了2個核心目標,如下: 

  • 發佈項目統一接入
    在新項目接入平臺的第一次起,運維只需要把項目添加上,給對應的開發開放相對應的發佈權限,項目接入+權限都是正常狀態下,運維需要做的事情就完成了

  • 一鍵自動發佈 開發可以根據自己所擁有的項目發佈權限,進行任何時間段的發佈,同時發佈系統會對用戶,發佈項目,發佈操作,結果做到全方位的記錄

目的:
       讓研發自助運維

用戶登陸(發佈系統的第一道安全牆)

       對於發佈系統的登陸,我們結合了內部開發的一套SSO系統+Rancho系統並加了一層白名單策略,有以下3個方面考慮:

  • 安全性
    平臺登陸安全性,SSO採用統一認證+MD5算法+Hash算法+靜態系統唯一標識

  • 連接
    統一的Session/Cookie允許連接,保持會話,過期,刪除由SSO管理

  • 雙權驗證
    假如用戶在SSO可以正常登陸,但是在Rancho發佈平臺沒有登陸權限,就是禁止登陸。原因很簡單,因爲全公司每個人都擁有自己的統一登陸賬戶,防止有人試探登陸/誤操作登陸

用戶權限(發佈系統的第二道安全牆)

      用戶權限,我們分爲2類角色:

  • 管理員
    具有發佈系統超級權限,可以對所有項目/用戶進行操作

  • 普通用戶
    只能看到運維授權的項目,發佈、發佈詳情、查看發佈歷史、查詢,但是不可編輯、更新項目 

項目權限(發佈系統的第三道安全牆)

        項目權限設計,我們當時也花很多時間去討論,最終擬定方案,項目不首先對應用戶,而是在用戶和項目中間建立一個橋樑,我們命名爲項目組 

  • 原因
    當多個用戶同時去擁有一個項目權限的時候,這個時候要全部用戶都要增加到這個項目體系中去

  • 如果這樣做的問題
    增加繁瑣,當項目刪除改用戶權限/或者用戶不再擁有該項目權限,還要精確的刪除,否則刪除錯了,後果很嚴重,邏輯同時還要對用戶和項目,做雙層處理操作 

  • 解決方案
    用戶--項目組--項目

  • 方案優點

  1. 項目組方便了運維管理,如果沒有項目組,一個項目對應的權限用戶比較多的話、需要管理員分別的去增加/更新編輯比較繁瑣 

  2. 系統根據項目組有效控制不同用戶之間對應項目的權限隔離發

項目組圖例

wKioL1li3d6j9EanAABA2lO5OSk784.jpg-wh_50


代碼發佈前臺

       前臺用於開發人員進行發佈所操作的頁面,其中功能包含:

  • 發佈頁面

  • 發佈tag種類選擇

  • 發佈環境/機器列表選擇

       當用戶進來某個項目的時候,Rancho 發佈系統會同時異步獲取該項目所有的環境/主機列表,對用戶而言無需任何操作處理。

發佈頁面

       支持機器單選、多選、全選、臨時主機添加等:

wKiom1li3fmDwK26AABz_u4U028874.jpg-wh_50

發佈tag種類

發佈tag種類選擇如下:

  • 開發tag(可測試)

  • 線上tag(灰度/線上)

  • 其他tag(代表開發/線上 tag 未顯示你要發佈的 tag,發佈人員可以根據 tag號輸入,如果 git 庫裏存在,可以正常發佈,如果不存在,用戶也可以接收到對應的錯誤結果)

  • 線上/開發tag,Rancho 發佈系統會自動實時更新git庫前10個最新的tag,供用戶選擇

tag版本選擇頁面

wKiom1li3hqQ_iktAABavlPih5E143.jpg-wh_50


tag比對圖

用戶選擇的tag和主幹,和最後一次發佈tag比對如下:

wKiom1li3jqBR5DeAADY6M23Mkc318.jpg-wh_50

發佈環境/機器列表選擇

       對於發佈環境我們有自己的一套命名擴展規則,有3種類型:

  • 類型一
    根據項目功能服務來命名

  • 類型二
    根據發佈環境來命名 

  • 類型三 

  • 前2者整合 

       某個項目命名情況:

  • 項目功能服務拆分,包含:crontab、sdk、console、front等

  • 項目發佈環境拆分,包含:online、beta、gray等

      獨立情況/整合情況,如下說明:

  • beta環境可以獨立的命名 

  • beta環境有sdk服務,命名爲:sdk_beta 

  • beta環境有console,命名爲:beta_console

PS:環境命名、細化、拆解,開發人員根據項目功能類型進行自定義,
Rancho自動識別和拆解命名體系

      每個發佈環境對應發佈的機器,其中一個項目頁面如下展示

wKioL1li3lryQ1ExAABpx_AQTdU751.jpg-wh_50


前臺首頁圖

       用戶登陸進來看到的所擁有項目的頁面,功能有發佈、查看、發佈歷史、需說明(只有管理員纔有展示啓用/禁用權限)

啓用:代表這個項目是正常運行發佈
禁用:可以看作刪除,但是我們不作爲真正刪除,臨時遷入回收站,如果哪天這個項目需要啓用發佈了,我們再打開進行該項目發佈

wKiom1li3p-wH4O3AAB2tSARVlg730.jpg-wh_50



前臺發佈確認清單

       發佈前讓發佈用戶再次確認上線的項目,tag,發佈環境,是否重啓機器(現有的和臨時添加的主機):

wKioL1li3qmBAfwFAACAU7wHSXg909.jpg-wh_50


發佈清單提交請求

    避免髒數據的方法:

  • 程序監控對發佈隊列是否正常服務檢測,並且自動做干預

  • 程序監控對數據庫/緩存正常服務檢測,並且自動做干預

  • 程序監控對生成的task_ID是否存在,並且自動做干預

  • 程序監控對生成的發佈指令做嚴格的判斷,是否爲不正確指令,並且自動做出干預

代碼發佈後臺

  • 後臺項目管理的成功/失敗,對整個前臺發佈起到至關重要的

  • 後臺操作權限爲管理員:一般是指定對應的運維人員

  • 操作程度:簡單、易用,所有處理邏輯都交給Rancho去搞定

後臺操作新項目流程頁面

新建字段說明

名稱:

代表項目的主名稱(唯一,如果重複則提示錯誤詳情),別名代表項目的描述,可以是中文/英文,名稱可以重複


git clone url地址:
開發提供,這個地址Rancho在處理的過程中,會對本身項目權限,該項目類型標識進行判斷和提取,比如我們有2種功能發佈:rigger和ansible,而發佈語言有:golang、php、nodejs、python、lua、c++等多種混合語言,排名不分先後

項目組權限:
添加該項目允許哪些項目組成員進行發佈

備註:

可寫/可不寫

      至此,運維管理員需要做的事情已經完成,剩下的點擊提交,剩下的事情交給Rancho去處理了。

後臺新建頁面

wKiom1li3raykvzXAABJ2C7OF8M445.jpg-wh_50


Rancho底層基本處理流程


wKiom1li30KyES_cAAB4UoM09ZA782.jpg-wh_50

項目失敗手動觸發 Rancho 處理恢復流程

wKiom1li303AUl6fAAC5FkYqBh8452.jpg-wh_50


發佈過程/結果

    前期的工作:
           後臺新建項目完成,到發佈提交申請,最後查看發佈過程/結果的驗證

   某一個項目單次發佈127臺主機,用時3分32秒,截圖如下:

wKioL1li4CKjBZ0CAAAqHLM5IU0721.jpg-wh_50


發佈過程的處理流程概述和原理圖例展示

wKiom1li33PQQARYAAChOmEtBT4414.jpg-wh_50

發佈過程有3種場景:

  • 負載均衡四/七層策略

  • 無負載均衡策略

  • 項目服務是否重啓

針對以上3種場景,分別作了不同的處理規則:

  • 負載均衡場景
    有白名單策略代表該項目擁有負載均衡策略(至於掛了多少負載均衡節點在發佈的時候,Rancho發佈系統會自動的計算,並且做相對應的平滑策略切換)

  • 無負載均衡策略
    走正常的發佈流程

  • 項目服務發佈是否重啓
    (Rancho支持重啓項目服務/支持不重啓項目服務)需求描述:

  1. 項目發佈更新,但是不重啓服務,看下項目代碼發佈過程是否成功/失敗。(這點對於發佈項目業務正常運行不會出現有損情況)

  2. 項目發佈更新,重啓服務(項目發佈代碼完成,自動重啓項目服務)

發佈速度:無負載均衡策略項目相對於比有LB策略的項目快2ms-30ms,根據項目綁定的LB有關聯。


項目發佈鎖圖例展現

wKioL1li34nTmLcZAACcV-CsyQA547.jpg-wh_50

       發佈鎖作用:
               防止同項目同發佈環境多任務一起發佈,會有覆蓋,衝突



項目發佈歷史統計圖例展現

wKiom1li35bRNvuxAAA2sVJcsl8214.jpg-wh_50

狀態分爲: 

  • 正在發佈

  • 觸發失敗

  • 發佈成功


項目發佈手工終止圖例展現

wKioL1li35-ACewJAACEQTfuQF4404.jpg-wh_50



發佈結果成功圖例展現

wKiom1li36mxFtIoAAB0VuRejYc031.jpg-wh_50


發佈結果失敗/終止圖例展現

wKiom1li37OxclaCAACTsCp7RgU037.jpg-wh_50

      失敗單臺,未執行的機器程序自動干預停止發佈實例子 



發佈過程中,手工可以終止發佈功能,說明

  • 防止發佈過程中有未知的原因或長時間緩慢/卡頓等,發佈人員可以根據業務重要評估,進行降級發佈過程停止操作,並且系統會把操作用戶、時間、項目、降級操作等做詳細記錄

  • 正常發佈完成後,終止發佈按鈕功能會自動消失

下面截圖所示

wKioL1li376Sdw82AAB0PfgTQtU671.jpg-wh_50


項目回滾策略

       當某個項目發佈失敗或者異常,想回滾到上個正常版本,可以以對應的tag號來進行重新發布

發佈結果日誌截圖展現

        自動按天生成日誌,並且按天做發佈日誌全量彙總

wKiom1li387AJ307AAEK3ppXWDk241.jpg-wh_50


建立完善的Wiki文檔

       Rancho發佈系統在熊貓直播循序漸進的優化功能/需求、bug修復等、wiki文檔的規範化也要隨之建立起來。

       以下是wiki文檔建立的圖例:

wKiom1li39uj_CegAACF01kHxpM838.jpg-wh_50



小結

Rancho發佈系統已經在線上運行了將近5個月的時間,目前 Rancho系統功能包含了:

  • 項目建立

  • 用戶登陸權限嚴格的隔離

  • 項目鎖機制

  • 項目前臺

  • 項目後臺

  • LB 4/7層和 Nginx upstream 白名單策略

  • 平滑摘取/綁定主機

  • 支持Rigger發佈功能和Ansible發佈功能

  • 多語言混合並行發佈(Golang、PHP、Nodejs、C++、Lua、Python、Shell等,語言排名不分先後)

  • 異步實時處理髮布任務

  • 實時可視化展現發佈結果

  • 多環境發佈

  • 跨多機房發佈

  • 手工/自動干預終止發佈

  • 避免嚴重的錯誤影響到正常業務

  • 詳細的發佈操作記錄:
    用戶操作、時間、發佈環境、發佈tag、發佈主機成功次數統計、發佈主機失敗次數統計、發佈主機程序自動干預終止次數統計、發佈主機手工干預終止次數統計、發佈主機正在發佈中次數統計等

目前熊貓直播Rancho發佈系統解決的痛點:

  • 研發自助運維
    熊貓直播產品業務線的發佈更新/回滾變更等操作,都由各自的項目線開發人員操作發佈/回滾,運維不直接參與整個發佈/回滾流程,遇到發佈錯誤/異常,運維才介入和開發一起排查相關問題 

  • 發佈時間週期長
    目前發佈系統異步處理整個發佈流程,點擊發布提交之後,頁面關閉都可以,發佈人員想看結果的時候,才登陸系統查看即可 

  • 平滑切換負載均衡
    發佈系統增加了白名單策略,發佈項目上線前,Rancho發佈系統會自動判斷白名單策略項目,如果該項目存在白名單策略,Rancho發佈系統會自動做整個負載均衡下線—上線—綁定上線流程操作

  • 發佈系統詳細的審計功能
    從用戶登陸-創建發佈清單-點擊發布-發佈過程-發佈結果都做了詳細的記錄,記錄緯度:登陸時間、發佈起始時間、發佈完成時間、用戶、發佈環境、發佈項目(平滑,服務是否重啓,tag,主機數量,主機信息清單),發佈結果(成功、失敗、終止)等

目前發佈次數/項目總數統計

       2017年2月16日上線到目前,累計發佈工單12000次,最多單次工單發佈主機100臺+,成功96%,失敗3%,終止1%,接入發佈項目將近100+。

Rancho發佈系統未來優化

       Rancho發佈系統未來優化的路還有很多,優化方向分爲以下3點:

  • 接入發佈預警平臺
    當某個項目出現異常的時候,運維能及時收到短信/郵件的提示

  • 定時作業發佈
    可以按照用戶自定義的發佈時間,定時發佈代碼 

  • 發佈錯誤/異常自動修復
    目前Rancho發佈系統已經可以收集到全部錯誤發佈類型,但是真正修復還需人工,以後當錯誤出現了,自動上報到修復庫裏進行存檔,在下一次同樣錯誤出現的時候,Rancho自動修復,並優雅提示用戶發佈錯誤修復完成,請重新發布


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章