《從無到有:熊貓直播 Rancho 發(fā)布系統(tǒng)構(gòu)建之路》要點(diǎn):
本文介紹了從無到有:熊貓直播 Rancho 發(fā)布系統(tǒng)構(gòu)建之路,希望對您有用。如果有疑問,可以聯(lián)系我們。
本文由高效運(yùn)維社區(qū)熱心群友投稿整理發(fā)布,高效運(yùn)維社區(qū)致力于陪伴您的職業(yè)生涯,與您一起愉快的成長.
符杰超
熊貓直播 基礎(chǔ)架構(gòu)部高級運(yùn)維開發(fā)工程師
主要負(fù)責(zé)熊貓直播運(yùn)維自動(dòng)化架構(gòu)平臺建設(shè)和開發(fā)
隨著熊貓直播的業(yè)務(wù)發(fā)展越來越快,業(yè)務(wù)需求的迭代和版本更新需求越來越多,對開發(fā)和運(yùn)維面臨以下4個(gè)痛點(diǎn):
- 項(xiàng)目需求上線越來越多.
- 發(fā)布周期比較長,需要人工操作比較繁瑣.
- 發(fā)布項(xiàng)目效率和風(fēng)險(xiǎn)的問題,比如平滑發(fā)布,切換負(fù)載均衡.
- 發(fā)布過程沒有詳細(xì)的審計(jì)功能.
由此,團(tuán)隊(duì)內(nèi)部決定在現(xiàn)有的發(fā)布過程上實(shí)現(xiàn)開發(fā)統(tǒng)一的發(fā)布系統(tǒng)平臺,實(shí)現(xiàn)熊貓直播的運(yùn)維發(fā)布流程化、標(biāo)準(zhǔn)化、自動(dòng)化為一體的統(tǒng)一發(fā)布要求,下面圍繞整個(gè) Rancho 發(fā)布系統(tǒng)做總結(jié)梳理,總共分為9個(gè)方面:
- 實(shí)現(xiàn)的最終目的
- 用戶登陸(發(fā)布系統(tǒng)的第一道安全墻)
- 用戶權(quán)限(發(fā)布系統(tǒng)的第二道安全墻)
- 項(xiàng)目權(quán)限(發(fā)布系統(tǒng)的第三道安全墻)
- 代碼發(fā)布前臺
- 代碼發(fā)布后臺
- 發(fā)布過程/結(jié)果
- 標(biāo)準(zhǔn)的 wiki 文檔建立
- 小結(jié)
Rancho 發(fā)布系統(tǒng)流程概述架構(gòu)圖:
Rancho 發(fā)布系統(tǒng)流程完整架構(gòu)圖:
隨著熊貓直播業(yè)務(wù)的迅猛發(fā)展,項(xiàng)目、產(chǎn)品的需求規(guī)模和版本迭代頻次是無法預(yù)估的.傳統(tǒng)的運(yùn)維支持方式已漸漸無法滿足這種工程應(yīng)用現(xiàn)狀.但是如果把發(fā)布權(quán)利交付到開發(fā)人員手里控制,運(yùn)維安全是比較大的隱患.當(dāng)2者都無法平衡的時(shí)候,利用高效的標(biāo)準(zhǔn)化,自動(dòng)化體系將2個(gè)無法逾越的問題優(yōu)化結(jié)合起來,我們結(jié)合了上述問題,實(shí)現(xiàn)了內(nèi)部的發(fā)布系統(tǒng),對于發(fā)布系統(tǒng),實(shí)現(xiàn)了2個(gè)核心目標(biāo),如下:
- 發(fā)布項(xiàng)目統(tǒng)一接入
在新項(xiàng)目接入平臺的第一次起,運(yùn)維只需要把項(xiàng)目添加上,給對應(yīng)的開發(fā)開放相對應(yīng)的發(fā)布權(quán)限,項(xiàng)目接入+權(quán)限都是正常狀態(tài)下,運(yùn)維需要做的事情就完成了.- 一鍵自動(dòng)發(fā)布
開發(fā)可以根據(jù)自己所擁有的項(xiàng)目發(fā)布權(quán)限,進(jìn)行任何時(shí)間段的發(fā)布,同時(shí)發(fā)布系統(tǒng)會(huì)對用戶,發(fā)布項(xiàng)目,發(fā)布操作,結(jié)果做到全方位的記錄.
總結(jié):讓研發(fā)自助運(yùn)維.
對于發(fā)布系統(tǒng)的登陸,我們結(jié)合了內(nèi)部開發(fā)的一套 SSO 系統(tǒng)+Rancho 系統(tǒng)并加了一層白名單策略,有以下3個(gè)方面考慮:
- 安全性:
平臺登陸安全性,SSO 采用統(tǒng)一認(rèn)證+MD5 算法+Hash算法+靜態(tài)系統(tǒng)唯一標(biāo)識.- 連接:
統(tǒng)一的 Session/Cookie 允許連接,保持會(huì)話,過期,刪除由SSO管理.- 雙權(quán)驗(yàn)證:
假如用戶在 SSO 可以正常登陸,但是在 Rancho 發(fā)布平臺沒有登陸權(quán)限,就是禁止登陸.原因很簡單,因?yàn)槿久總€(gè)人都擁有自己的統(tǒng)一登陸賬戶,防止有人試探登陸/誤操作登陸.
用戶權(quán)限,我們分為2類角色:
- 管理員:
具有發(fā)布系統(tǒng)超級權(quán)限,可以對所有項(xiàng)目/用戶進(jìn)行操作.- 普通用戶:
只能看到運(yùn)維授權(quán)的項(xiàng)目,發(fā)布,發(fā)布詳情,查看發(fā)布?xì)v史,查詢,但是不可編輯,更新項(xiàng)目.
項(xiàng)目權(quán)限設(shè)計(jì),我們當(dāng)時(shí)也花很多時(shí)間去討論,最終擬定方案,項(xiàng)目不首先對應(yīng)用戶,而是在用戶和項(xiàng)目中間建立一個(gè)橋梁,我們命名為項(xiàng)目組.
原因:當(dāng)多個(gè)用戶同時(shí)去擁有一個(gè)項(xiàng)目權(quán)限的時(shí)候,這個(gè)時(shí)候要全部用戶都要增加到這個(gè)項(xiàng)目體系中去.
如果這樣做的問題是:增加繁瑣,當(dāng)項(xiàng)目刪除改用戶權(quán)限/或者用戶不再擁有該項(xiàng)目權(quán)限,還要精確的刪除,否則刪除錯(cuò)了,后果很嚴(yán)重,邏輯同時(shí)還要對用戶和項(xiàng)目,做雙層處理操作.
解決方案:
用戶—-項(xiàng)目組——項(xiàng)目
方案優(yōu)點(diǎn):
- 項(xiàng)目組方便了運(yùn)維管理,如果沒有項(xiàng)目組,一個(gè)項(xiàng)目對應(yīng)的權(quán)限用戶比較多的話,需要管理員分別的去增加/更新編輯比較繁瑣.
- 系統(tǒng)根據(jù)項(xiàng)目組有效控制不同用戶之間對應(yīng)項(xiàng)目的權(quán)限隔離發(fā)布.
項(xiàng)目組圖例:
前臺用于開發(fā)人員進(jìn)行發(fā)布所操作的頁面,其中功能包含:
- 發(fā)布頁面
- 發(fā)布tag種類選擇
- 發(fā)布環(huán)境/機(jī)器列表選擇
當(dāng)用戶進(jìn)來某個(gè)項(xiàng)目的時(shí)候,Rancho 發(fā)布系統(tǒng)會(huì)同時(shí)異步獲取該項(xiàng)目所有的環(huán)境/主機(jī)列表,對用戶而言無需任何操作處理.
支持機(jī)器單選,多選,全選,臨時(shí)主機(jī)添加等:
發(fā)布 tag 種類選擇如下:
- 開發(fā)tag(可測試)
- 線上tag(灰度/線上)
- 其他tag(代表開發(fā)/線上 tag 未顯示你要發(fā)布的 tag,發(fā)布人員可以根據(jù) tag號輸入,如果 git 庫里存在,可以正常發(fā)布,如果不存在,用戶也可以接收到對應(yīng)的錯(cuò)誤結(jié)果)
- 線上/開發(fā)tag,Rancho 發(fā)布系統(tǒng)會(huì)自動(dòng)實(shí)時(shí)更新git庫前10個(gè)最新的tag,供用戶選擇.
如下:
用戶選擇的 tag 和主干,和最后一次發(fā)布 tag 比對如下:
對于發(fā)布環(huán)境我們有自己的一套命名擴(kuò)展規(guī)則,有3種類型:
- 類型一:根據(jù)項(xiàng)目功能服務(wù)來命名
- 類型二:根據(jù)發(fā)布環(huán)境來命名
- 類型三:前2者整合
比如某個(gè)項(xiàng)目命名情況:
- 項(xiàng)目功能服務(wù)拆分,包含:crontab,sdk,console,front等,
- 項(xiàng)目發(fā)布環(huán)境拆分,包含:online,beta,gray等
獨(dú)立情況/整合情況,如下說明:
- beta環(huán)境可以獨(dú)立的命名
- beta環(huán)境有sdk服務(wù),命名為:sdk_beta
- beta環(huán)境有console,命名為:beta_console
PS:環(huán)境命名,細(xì)化,拆解,開發(fā)人員根據(jù)項(xiàng)目功能類型,自定義,
Rancho自動(dòng)識別和拆解命名體系.
每個(gè)發(fā)布環(huán)境對應(yīng)發(fā)布的機(jī)器,其中一個(gè)項(xiàng)目頁面如下展示:
用戶登陸進(jìn)來看到的所擁有項(xiàng)目的頁面,功能有發(fā)布,查看,發(fā)布?xì)v史,需說明(只有管理員才有展示啟用/禁用權(quán)限)
啟用:代表這個(gè)項(xiàng)目是正常運(yùn)行發(fā)布
禁用:可以看作刪除,但是我們不作為真正刪除,臨時(shí)遷入回收站,如果哪天這個(gè)項(xiàng)目需要啟用發(fā)布了,我們再打開進(jìn)行該項(xiàng)目發(fā)布.
發(fā)布前讓發(fā)布用戶再次確認(rèn)上線的項(xiàng)目,tag,發(fā)布環(huán)境,是否重啟,機(jī)器(現(xiàn)有的和臨時(shí)添加的主機(jī)):
避免臟數(shù)據(jù)的方法:
- 程序監(jiān)控對發(fā)布隊(duì)列是否正常服務(wù)檢測,并且自動(dòng)做干預(yù).
- 程序監(jiān)控對數(shù)據(jù)庫/緩存正常服務(wù)檢測,并且自動(dòng)做干預(yù).
- 程序監(jiān)控對生成的task_ID是否存在,并且自動(dòng)做干預(yù).
- 程序監(jiān)控對生成的發(fā)布指令做嚴(yán)格的判斷,是否為不正確指令,并且自動(dòng)做出干預(yù).
- 后臺項(xiàng)目管理的成功/失敗,對整個(gè)前臺發(fā)布起到至關(guān)重要的.
- 后臺操作權(quán)限為管理員:一般是指定對應(yīng)的運(yùn)維人員.
- 操作程度:簡單、易用,所有處理邏輯都交給Rancho去搞定.
新建字段說明:
名稱:代表項(xiàng)目的主名稱(唯一,如果重復(fù)則提示錯(cuò)誤詳情),別名:代表項(xiàng)目的描述,可以是中文/英文,名稱可以重復(fù).
git clone url地址:
開發(fā)提供,這個(gè)地址Rancho在處理的過程中,會(huì)對本身項(xiàng)目權(quán)限,該項(xiàng)目類型標(biāo)識進(jìn)行判斷和提取,比如我們有2種功能發(fā)布:rigger和ansible,而發(fā)布語言有:golang,php,nodejs,python,lua,c++等多種混合語言,排名不分先后.項(xiàng)目組權(quán)限:
添加該項(xiàng)目允許哪些項(xiàng)目組成員進(jìn)行發(fā)布.備注:可寫/可不寫
至此,運(yùn)維管理員需要做的事情已經(jīng)完成,剩下的點(diǎn)擊提交,剩下的事情交給 Rancho 去處理了.
前期的工作:后臺新建項(xiàng)目完成,到發(fā)布提交申請,最后查看發(fā)布過程/結(jié)果的驗(yàn)證.
描述,發(fā)布過程有3種場景負(fù)載均衡四/七層策略和無負(fù)載均衡策略/項(xiàng)目服務(wù)是否重啟.針對以上3種場景,分別作了不同的處理規(guī)則:
- 負(fù)載均衡場景:
有白名單策略代表該項(xiàng)目擁有負(fù)載均衡策略(至于掛了多少負(fù)載均衡節(jié)點(diǎn)在發(fā)布的時(shí)候,Rancho 發(fā)布系統(tǒng)會(huì)自動(dòng)的計(jì)算,并且做相對應(yīng)的平滑策略切換).- 無負(fù)載均衡策略:
走正常的發(fā)布流程.- 項(xiàng)目服務(wù)發(fā)布是否重啟
(Rancho 支持重啟項(xiàng)目服務(wù)/支持不重啟項(xiàng)目服務(wù))需求描述:
熊貓直播發(fā)布項(xiàng)目的時(shí)候,有2種情況:
- 項(xiàng)目發(fā)布更新,但是不重啟服務(wù),看下項(xiàng)目代碼發(fā)布過程是否成功/失敗.(這點(diǎn)對于發(fā)布項(xiàng)目業(yè)務(wù)正常運(yùn)行不會(huì)出現(xiàn)有損情況)
- 項(xiàng)目發(fā)布更新,重啟服務(wù)(項(xiàng)目發(fā)布代碼完成,自動(dòng)重啟項(xiàng)目服務(wù))
發(fā)布速度:無負(fù)載均衡策略項(xiàng)目相對于比有LB策略的項(xiàng)目快2ms-30ms,根據(jù)項(xiàng)目綁定的LB有關(guān)聯(lián).
發(fā)布鎖作用:防止同項(xiàng)目同發(fā)布環(huán)境多任務(wù)一起發(fā)布,會(huì)有覆蓋,沖突.
狀態(tài):正在發(fā)布,觸發(fā)失敗,發(fā)布成功
失敗單臺,未執(zhí)行的機(jī)器程序自動(dòng)干預(yù)停止發(fā)布實(shí)例子
- 防止發(fā)布過程中有未知的原因或長時(shí)間緩慢/卡頓等,發(fā)布人員可以根據(jù)業(yè)務(wù)重要評估,進(jìn)行降級發(fā)布過程停止操作,并且系統(tǒng)會(huì)把操作用戶,時(shí)間,項(xiàng)目,降級操作等做詳細(xì)記錄).
- 正常發(fā)布完成后,終止發(fā)布按鈕功能會(huì)自動(dòng)消失.
下面截圖所示:
當(dāng)某個(gè)項(xiàng)目發(fā)布失敗或者異常,想回滾到上個(gè)正常版本,可以以對應(yīng)的 tag 號來進(jìn)行重新發(fā)布.
(自動(dòng)按天生成日志,并且按天做發(fā)布日志全量匯總)
Rancho 發(fā)布系統(tǒng)在熊貓直播循序漸進(jìn)的優(yōu)化功能/需求,bug修復(fù)等,wiki文檔的規(guī)范化也要隨之建立起來,以下是wiki文檔建立的圖例:
Rancho 發(fā)布系統(tǒng)已經(jīng)在線上運(yùn)行了將近5個(gè)月的時(shí)間,目前 Rancho 系統(tǒng)功能包含了:
- 項(xiàng)目建立
- 用戶登陸權(quán)限嚴(yán)格的隔離
- 項(xiàng)目鎖機(jī)制
- 項(xiàng)目前臺
- 項(xiàng)目后臺
- LB 4/7層和 Nginx upstream 白名單策略
- 平滑摘取/綁定主機(jī)
- 支持Rigger發(fā)布功能和Ansible發(fā)布功能
- 多語言混合并行發(fā)布(Golang,PHP,Nodejs,C++,Lua,Python,Shell等,語言排名不分先后)
- 異步實(shí)時(shí)處理發(fā)布任務(wù)
- 實(shí)時(shí)可視化展現(xiàn)發(fā)布結(jié)果
- 多環(huán)境發(fā)布
- 跨多機(jī)房發(fā)布
- 手工/自動(dòng)干預(yù)終止發(fā)布
- 避免嚴(yán)重的錯(cuò)誤影響到正常業(yè)務(wù)
- 詳細(xì)的發(fā)布操作記錄:用戶操作,時(shí)間,發(fā)布環(huán)境,發(fā)布tag,發(fā)布主機(jī)成功次數(shù)統(tǒng)計(jì),發(fā)布主機(jī)失敗次數(shù)統(tǒng)計(jì),發(fā)布主機(jī)程序自動(dòng)干預(yù)終止次數(shù)統(tǒng)計(jì),發(fā)布主機(jī)手工干預(yù)終止次數(shù)統(tǒng)計(jì),發(fā)布主機(jī)正在發(fā)布中次數(shù)統(tǒng)計(jì)等.
目前熊貓直播 Rancho 發(fā)布系統(tǒng)解決的痛點(diǎn):
- 研發(fā)自助運(yùn)維:熊貓直播產(chǎn)品業(yè)務(wù)線的發(fā)布更新/回滾變更等操作,都由各自的項(xiàng)目線開發(fā)人員操作發(fā)布/回滾,運(yùn)維不直接參與整個(gè)發(fā)布/回滾流程,遇到發(fā)布錯(cuò)誤/異常,運(yùn)維才介入和開發(fā)一起排查相關(guān)問題.
- 發(fā)布時(shí)間周期長:目前發(fā)布系統(tǒng)異步處理整個(gè)發(fā)布流程,點(diǎn)擊發(fā)布提交之后,頁面關(guān)閉都可以,發(fā)布人員想看結(jié)果的時(shí)候,才登陸系統(tǒng)查看即可.
- 平滑切換負(fù)載均衡:發(fā)布系統(tǒng)增加了白名單策略,發(fā)布項(xiàng)目上線前,Rancho發(fā)布系統(tǒng)會(huì)自動(dòng)判斷白名單策略項(xiàng)目,如果該項(xiàng)目存在白名單策略,Rancho發(fā)布系統(tǒng)會(huì)自動(dòng)做整個(gè)負(fù)載均衡下線—上線—綁定上線流程操作.
- 發(fā)布系統(tǒng)詳細(xì)的審計(jì)功能:從用戶登陸-創(chuàng)建發(fā)布清單-點(diǎn)擊發(fā)布-發(fā)布過程-發(fā)布結(jié)果都做了詳細(xì)的記錄,記錄緯度:登陸時(shí)間,發(fā)布起始時(shí)間,發(fā)布完成時(shí)間,用戶,發(fā)布環(huán)境,發(fā)布項(xiàng)目(平滑,服務(wù)是否重啟,tag,主機(jī)數(shù)量,主機(jī)信息清單),發(fā)布結(jié)果(成功,失敗,終止)等.
目前發(fā)布次數(shù)/項(xiàng)目總數(shù)統(tǒng)計(jì): 2017年2月16日上線到目前,累計(jì)發(fā)布工單12000次,最多單次工單發(fā)布主機(jī)100臺+,成功96%,失敗3%,終止1%,接入發(fā)布項(xiàng)目將近100+.
Rancho 發(fā)布系統(tǒng)未來優(yōu)化的路還有很多,優(yōu)化方向分為以下3點(diǎn):
- 接入發(fā)布預(yù)警平臺:
當(dāng)某個(gè)項(xiàng)目出現(xiàn)異常的時(shí)候,運(yùn)維能及時(shí)收到短信/郵件的提示.- 定時(shí)作業(yè)發(fā)布:
可以按照用戶自定義的發(fā)布時(shí)間,定時(shí)發(fā)布代碼.- 發(fā)布錯(cuò)誤/異常自動(dòng)修復(fù):
目前Rancho發(fā)布系統(tǒng),已經(jīng)可以收集到全部錯(cuò)誤發(fā)布類型,但是真正修復(fù)還需人工,以后當(dāng)錯(cuò)誤出現(xiàn)了,自動(dòng)上報(bào)到修復(fù)庫里進(jìn)行存檔,在下一次同樣錯(cuò)誤出現(xiàn)的時(shí)候,Rancho 自動(dòng)修復(fù),并優(yōu)雅提示用戶發(fā)布錯(cuò)誤修復(fù)完成,請重新發(fā)布.
文章來自微信公眾號:高效運(yùn)維
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/2221.html