作者介紹
符傑超,熊貓直播基礎架構部高級運維開發工程師。主要負責熊貓直播運維自動化架構平臺建設和開發
前言
隨着熊貓直播的業務發展越來越快,業務需求的迭代和版本更新需求越來越多,對開發和運維面臨以下4個痛點:
項目需求上線越來越多
發佈週期比較長,人工操作比較繁瑣
發佈項目效率和風險的問題,比如平滑發佈,切換負載均衡
發佈過程沒有詳細的審計功能
由此,團隊內部決定在現有的發佈過程上實現開發統一的發佈系統平臺,實現熊貓直播的運維發佈流程化、標準化、自動化爲一體的統一發布要求。
下面圍繞整個Rancho發佈系統做總結梳理,總共分爲9個方面:
實現的最終目的
用戶登陸(發佈系統的第一道安全牆)
用戶權限(發佈系統的第二道安全牆)
項目權限(發佈系統的第三道安全牆)
代碼發佈前臺
代碼發佈後臺
發佈過程/結果
建立標準的wiki文檔
小結
Rancho 發佈系統流程概述架構圖
Rancho 發佈系統流程圖
Rancho發佈系統
實現的最終目的
隨着熊貓直播業務的迅猛發展、項目、產品的需求規模和版本迭代頻次是無法預估的。傳統的運維支持方式已漸漸無法滿足這種工程應用現狀。但是如果把發佈權利交付到開發人員手裏控制,運維安全是比較大的隱患。當2者都無法平衡的時候,利用高效的標準化,自動化體系將2個無法逾越的問題優化結合起來,我們結合了上述問題,實現了內部的發佈系統,對於發佈系統,實現了2個核心目標,如下:
發佈項目統一接入
在新項目接入平臺的第一次起,運維只需要把項目添加上,給對應的開發開放相對應的發佈權限,項目接入+權限都是正常狀態下,運維需要做的事情就完成了一鍵自動發佈 開發可以根據自己所擁有的項目發佈權限,進行任何時間段的發佈,同時發佈系統會對用戶,發佈項目,發佈操作,結果做到全方位的記錄
目的:
讓研發自助運維
用戶登陸(發佈系統的第一道安全牆)
對於發佈系統的登陸,我們結合了內部開發的一套SSO系統+Rancho系統並加了一層白名單策略,有以下3個方面考慮:
安全性
平臺登陸安全性,SSO採用統一認證+MD5算法+Hash算法+靜態系統唯一標識連接
統一的Session/Cookie允許連接,保持會話,過期,刪除由SSO管理雙權驗證
假如用戶在SSO可以正常登陸,但是在Rancho發佈平臺沒有登陸權限,就是禁止登陸。原因很簡單,因爲全公司每個人都擁有自己的統一登陸賬戶,防止有人試探登陸/誤操作登陸
用戶權限(發佈系統的第二道安全牆)
用戶權限,我們分爲2類角色:
管理員
具有發佈系統超級權限,可以對所有項目/用戶進行操作普通用戶
只能看到運維授權的項目,發佈、發佈詳情、查看發佈歷史、查詢,但是不可編輯、更新項目
項目權限(發佈系統的第三道安全牆)
項目權限設計,我們當時也花很多時間去討論,最終擬定方案,項目不首先對應用戶,而是在用戶和項目中間建立一個橋樑,我們命名爲項目組
原因
當多個用戶同時去擁有一個項目權限的時候,這個時候要全部用戶都要增加到這個項目體系中去如果這樣做的問題
增加繁瑣,當項目刪除改用戶權限/或者用戶不再擁有該項目權限,還要精確的刪除,否則刪除錯了,後果很嚴重,邏輯同時還要對用戶和項目,做雙層處理操作解決方案
用戶--項目組--項目方案優點
項目組方便了運維管理,如果沒有項目組,一個項目對應的權限用戶比較多的話、需要管理員分別的去增加/更新編輯比較繁瑣
系統根據項目組有效控制不同用戶之間對應項目的權限隔離發
項目組圖例
代碼發佈前臺
前臺用於開發人員進行發佈所操作的頁面,其中功能包含:
發佈頁面
發佈tag種類選擇
發佈環境/機器列表選擇
當用戶進來某個項目的時候,Rancho 發佈系統會同時異步獲取該項目所有的環境/主機列表,對用戶而言無需任何操作處理。
發佈頁面
支持機器單選、多選、全選、臨時主機添加等:
發佈tag種類
發佈tag種類選擇如下:
開發tag(可測試)
線上tag(灰度/線上)
其他tag(代表開發/線上 tag 未顯示你要發佈的 tag,發佈人員可以根據 tag號輸入,如果 git 庫裏存在,可以正常發佈,如果不存在,用戶也可以接收到對應的錯誤結果)
線上/開發tag,Rancho 發佈系統會自動實時更新git庫前10個最新的tag,供用戶選擇
tag版本選擇頁面
tag比對圖
用戶選擇的tag和主幹,和最後一次發佈tag比對如下:
發佈環境/機器列表選擇
對於發佈環境我們有自己的一套命名擴展規則,有3種類型:
類型一
根據項目功能服務來命名類型二
根據發佈環境來命名類型三
前2者整合
某個項目命名情況:
項目功能服務拆分,包含:crontab、sdk、console、front等
項目發佈環境拆分,包含:online、beta、gray等
獨立情況/整合情況,如下說明:
beta環境可以獨立的命名
beta環境有sdk服務,命名爲:sdk_beta
beta環境有console,命名爲:beta_console
PS:環境命名、細化、拆解,開發人員根據項目功能類型進行自定義,
Rancho自動識別和拆解命名體系
每個發佈環境對應發佈的機器,其中一個項目頁面如下展示
前臺首頁圖
用戶登陸進來看到的所擁有項目的頁面,功能有發佈、查看、發佈歷史、需說明(只有管理員纔有展示啓用/禁用權限)
啓用:代表這個項目是正常運行發佈
禁用:可以看作刪除,但是我們不作爲真正刪除,臨時遷入回收站,如果哪天這個項目需要啓用發佈了,我們再打開進行該項目發佈
前臺發佈確認清單
發佈前讓發佈用戶再次確認上線的項目,tag,發佈環境,是否重啓機器(現有的和臨時添加的主機):
發佈清單提交請求
避免髒數據的方法:
程序監控對發佈隊列是否正常服務檢測,並且自動做干預
程序監控對數據庫/緩存正常服務檢測,並且自動做干預
程序監控對生成的task_ID是否存在,並且自動做干預
程序監控對生成的發佈指令做嚴格的判斷,是否爲不正確指令,並且自動做出干預
代碼發佈後臺
後臺項目管理的成功/失敗,對整個前臺發佈起到至關重要的
後臺操作權限爲管理員:一般是指定對應的運維人員
操作程度:簡單、易用,所有處理邏輯都交給Rancho去搞定
後臺操作新項目流程頁面
新建字段說明
名稱:
代表項目的主名稱(唯一,如果重複則提示錯誤詳情),別名代表項目的描述,可以是中文/英文,名稱可以重複
git clone url地址:
開發提供,這個地址Rancho在處理的過程中,會對本身項目權限,該項目類型標識進行判斷和提取,比如我們有2種功能發佈:rigger和ansible,而發佈語言有:golang、php、nodejs、python、lua、c++等多種混合語言,排名不分先後項目組權限:
添加該項目允許哪些項目組成員進行發佈備註:
可寫/可不寫
至此,運維管理員需要做的事情已經完成,剩下的點擊提交,剩下的事情交給Rancho去處理了。
後臺新建頁面
Rancho底層基本處理流程
項目失敗手動觸發 Rancho 處理恢復流程
發佈過程/結果
前期的工作:
後臺新建項目完成,到發佈提交申請,最後查看發佈過程/結果的驗證
某一個項目單次發佈127臺主機,用時3分32秒,截圖如下:
發佈過程的處理流程概述和原理圖例展示
發佈過程有3種場景:
負載均衡四/七層策略
無負載均衡策略
項目服務是否重啓
針對以上3種場景,分別作了不同的處理規則:
負載均衡場景
有白名單策略代表該項目擁有負載均衡策略(至於掛了多少負載均衡節點在發佈的時候,Rancho發佈系統會自動的計算,並且做相對應的平滑策略切換)無負載均衡策略
走正常的發佈流程項目服務發佈是否重啓
(Rancho支持重啓項目服務/支持不重啓項目服務)需求描述:
項目發佈更新,但是不重啓服務,看下項目代碼發佈過程是否成功/失敗。(這點對於發佈項目業務正常運行不會出現有損情況)
項目發佈更新,重啓服務(項目發佈代碼完成,自動重啓項目服務)
發佈速度:無負載均衡策略項目相對於比有LB策略的項目快2ms-30ms,根據項目綁定的LB有關聯。
項目發佈鎖圖例展現
發佈鎖作用:
防止同項目同發佈環境多任務一起發佈,會有覆蓋,衝突
項目發佈歷史統計圖例展現
狀態分爲:
正在發佈
觸發失敗
發佈成功
項目發佈手工終止圖例展現
發佈結果成功圖例展現
發佈結果失敗/終止圖例展現
失敗單臺,未執行的機器程序自動干預停止發佈實例子
發佈過程中,手工可以終止發佈功能,說明
防止發佈過程中有未知的原因或長時間緩慢/卡頓等,發佈人員可以根據業務重要評估,進行降級發佈過程停止操作,並且系統會把操作用戶、時間、項目、降級操作等做詳細記錄
正常發佈完成後,終止發佈按鈕功能會自動消失
下面截圖所示
項目回滾策略
當某個項目發佈失敗或者異常,想回滾到上個正常版本,可以以對應的tag號來進行重新發布
發佈結果日誌截圖展現
自動按天生成日誌,並且按天做發佈日誌全量彙總
建立完善的Wiki文檔
Rancho發佈系統在熊貓直播循序漸進的優化功能/需求、bug修復等、wiki文檔的規範化也要隨之建立起來。
以下是wiki文檔建立的圖例:
小結
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自動修復,並優雅提示用戶發佈錯誤修復完成,請重新發布