關注嘉爲科技,獲取運維新知
藍鯨智雲,簡稱藍鯨,是騰訊遊戲運營部“騰訊智營”下的子品牌。它是一套基於 PaaS 的企業研發運營一體化技術解決方案,提供了一個完整的研發、運維、運營的PaaS技術平臺。平臺提供了完善的前後臺開發框架、調度引擎、公共組件等模塊,幫助業務的產品和技術人員快速構建低成本、免運維的支撐工具和運營系統;是騰訊遊戲運營部沉澱多年的技術運營支撐體系,承擔着數百款業務線上運營的使命。
對於藍鯨不太瞭解和熟悉的同學可以移步這裏:
http://bk.tencent.com/index/,
還有這裏:
http://docs.bk.tencent.com/product_white_paper/introduction/。
請相信,你打開的不是兩個鏈接,而是運維的新世界和新天地。
今天咱們的主角是藍鯨這艘航空母艦上的一個主力輸出炮位,它的名字叫“標準運維”。其實在我們之前的文章《先標準化還是先自動化:IT運維管理升級,該如何做是好?》中已經提到過這位仁兄,它能力強大以至於能夠兼顧運維操作和運維流程的標準化和自動化。
但在那篇文章裏對這位仁兄的介紹畢竟有些浮光掠影,今天作爲本文的主角,我們來着重介紹下這位“大俠”的十八般武藝。
小故事:汽車製造業零部件通用化之路
在步入正題之前,請允許我先講一個小故事:早期的時候汽車廠商生產汽車,哪怕同一個廠商的不同型號的汽車,所需要的零部件幾乎是完全不同的;一個型號的汽車的任意一個零件,在其他型號的車上幾乎是完全用不上的。
這帶來兩個問題:一個是由於零部件不通用,不同型號汽車需要完全採購不同的零部件,導致每個型號汽車採購零部件的成本都比較高;另外就是零部件完全不通用,事實上不利於流水線的複用、標準化和自動化。
所以從上個世紀開始,各大車廠內部都在極力推進零部件通用化。2009年的時候,汽車業巨頭豐田汽車已經實現了70-80%零部件可以達到共用的差異化設計:儀表盤在20種左右汽車上可以安裝;手動柄在40種以上汽車上可以安裝。
豐田公司甚至提出了“不根據產品製造零部件,而是根據零部件製造產品”的經營理念,這樣數以倍計的降低了生產的成本(2000年時候,年度成本降低總額由之前的1000億日元翻倍爲2000億日元),並且對於不同汽車生產流程的標準化和自動化的推進也產生了很大的積極作用。
初登場:標準運維爲何會誕生呢?
有的同學可能會說了:你說的這個跟今天介紹的標準運維有啥關係呢?彆着急,請聽我慢慢道來。
我們在企業內執行IT運維操作的過程中,其實不同的運維場景,也有不同的運維流程,不同的運維流程包含不同的運維操作步驟。
比如我們有這麼兩個運維場景:開新區、故障替換。這兩個運維場景的運維流程如下所示:
“開新區”運維場景對應的運維流程:
“故障替換”運維場景對應的運維流程:
對比兩個運維流程,發現第一個運維操作步驟都是“創建新主機”,這裏我們假設內部使用的是vSphere虛擬化平臺,實際上這兩個流程中都需要登錄到vsphere虛擬化控制檯,分別創建兩個虛擬機出來。每個運維流程,都要做一遍,即便能夠一鍵創建VM,也比較麻煩,對吧?何況完成這一步之後,後面還有很多步驟要執行。
這裏的運維場景就類似要製造某個型號的汽車,運維流程是製造汽車的流程,運維操作步驟是製造汽車要用的零部件。就像汽車零部件的通用化一樣,我們也要實現操作步驟的通用化和複用化,通過通用化的操作步驟的靈活組裝,將運維場景固化爲統一的流程,藉此提升運維場景的標準化和自動化。
那我們能不能考慮把“創建新主機”這個操作作爲一個通用的原子操作,就像汽車製造中的一個通用的零部件一樣,在每個運維流程中都能夠複用呢?並且還能夠像汽車流水線一樣,把這些通用零部件(原子操作)通過不同的流程方式編排起來之後,通過輸入不同的原子操作(操作步驟)參數,實現不同運維場景的一鍵流程化和自動化。
這就是標準運維這個強大引擎誕生的背景。
標準運維是擁有可視化的圖形界面,並進行任務流程編排和執行的系統。
標準運維有兩大核心服務:
一、調度編排服務
基於藍鯨集成平臺服務總線(ESB)原生集成藍鯨平臺的各個能力模塊,比如CMDB、藍鯨監控、故障自愈等;並能夠對接企業內部各個系統API的能力,將企業內部多系統間的工作整合到一個流程模版中,實現一鍵自動化調度。
二、自助化服務
標準運維通過與藍鯨集成平臺深度整合,爲用戶提供了“輕應用”和“職能化”功能,讓用戶可以將業務日常的運維工作交給產品和職能化人員執行,實現業務的發佈、變更等工作自助化。
標準運維功能詳解
一、產品架構
標準運維的產品結構如圖所示:
1、接入層包含權限控制、API接口和數據統計等;
2、任務管理層主要對應標準運維的任務編排和任務控制功能,任務編排包含基礎單元原子框架和原子展示層,任務控制包括創建任務實例的模板校驗和參數校驗,以及任務實例執行時給提供的操作接口如暫停、繼續、撤銷任務等;
3、流程引擎負責解析上層的任務實例,映射節點原子對應的服務,並通過底層的藍鯨服務總線(ESB)調用其他系統的API(如配置平臺的創建集羣,作業平臺的快速執行腳本等),流程引擎還包括了具體的任務執行引擎和流程控制、上下文管理等模塊;
4、標準運維作爲藍鯨平臺的SaaS組件自從推出到現在經歷了多個版本的變化。以下是版本變化的歷程,目前最新的標準運維支持分支和並行執行、輸出參數、字流程等高級功能;標準運維的功能進一步變得強大。
二、功能介紹
1、標準運維首頁
標準運維在藍鯨平臺上體現爲一個工具APP。首頁界面如下所示:是一個全局視圖,包含業務的任務執行統計、流程類型統計、輕應用類型統計、業務動態以及快速創建任務等內容。
2、任務流程
任務流程展示了當前業務下的已創建的流程模板列表頁面,包含了快速搜索、新建流程、新建任務、編輯流程、預覽流程、克隆流程、權限管理、刪除、查看執行歷史等操作。
3、新建流程
可以通過對原子節點、子流程節點與網關節點的組合,變量的配置與引用,配置出一個業務流程。
流程名稱:是用來描述流程模板的,默認值是“new時間格式串”,可以自行修改,注意不能包含頁面提示中列舉的特殊字符。
流程節點:用戶可以從左邊的工具欄,拖拽合適的節點到畫布中,並通過連線,組成合法的流程模板。
工具欄中流程節點包含流程控制節點和任務節點。流程控制節點包括:
開始節點——標識流程的開始;
結束節點——標識流程的結束。
流程控制節點還包括:
並行網關——標識並行執行的開始,
分支網關——標識分支執行的開始,
匯聚網關——標識並行或分支的結束。
請注意,每一個並行網關或者分支網關都需要配置一個匯聚網關來標識並行或分支流程的結束。
分支網關和並行網關類似,區別在於分支網關出度上的多個節點在執行時會根據分支條件啓動分支表達式爲True的一個分支流程,其他的分支則不會被執行。啓動的分支執行完成後就立刻啓動對應的匯聚網關,接着執行後續的流程節點。
任務節點包括原子節點和子流程節點。原子節點是標準運維內置的最小執行單元,一般對應於藍鯨服務總線(ESB)的一次 API調用或者標準運維內置服務如定時。
單擊原子節點可以配置原子節點的參數。其中原子類型可以選擇一個標準運維接入的原子,輸入參數、輸出參數和選擇的原子對應。
每個原子的參數一般不同,如“作業平臺(JOB)-快速執行腳本”是對應作業平臺的快速執行腳本API,需要填寫腳本類型、腳本內容、腳本參數、超時時間、目標IP、目標賬戶等輸入參數,在執行時,標準運維會把填寫的前端參數轉換爲ESB需要的參數格式並調用API,然後根據API返回結果把JOB任務ID、JOB任務鏈接、執行結果(成功或失敗)作爲輸出參數展示在執行詳情中,後續的流程節點也可以引用前面節點的輸出參數。
子流程節點可以選擇已經創建的流程模板,在新的流程中引用並作爲子流程執行。子流程節點的輸入參數是選擇的流程模板中顯示屬性爲“顯示” 的全局變量,也就是該子流程模板單獨創建任務時需要填寫的任務參數。輸出變量是選擇的流程模板中勾選了輸出屬性的全局變量。
4、支持全局變量
全局變量是一個流程模板的公共參數,通過 KEY 來做唯一性約束。用戶可以在任務節點的輸入參數和分支網關表達式中引用,標準運維會在執行任務時自動替換全局變量的引用爲全局變量的值。
全局變量的來源有三種:
一是通過任務節點的輸入參數勾選生成,這類全局變量的類型是“組件”,並且不能更改;默認值和來源原子的輸入參數的表單類型一致,如原子節點的參數是單選框,勾選生成的全局變量也是單選框。
二是通過任務節點的輸出參數勾選生成,這類全局變量類型也是“組件”,並且不能更改;無默認值屬性,因爲這類全局變量的值是由生成該變量的原子節點、子流程節點的輸出結果自動生成的,用戶無法手動設置;此外,這類全局變量的顯示屬性是“隱藏”,並且不能更改,表示執行任務時不需要用戶手動填寫這類參數。
三是用戶在全局變量區點擊“新增變量”生成,手動添加的全局變量類型可以選擇輸入框、文本框、日期時間、整數、IP選擇器等,並且可以隨時切換;這類變量可以自定義校驗規則,這樣在創建任務填寫參數時,可以避免填寫不合法的參數值。
5、任務執行
通過上述的任務流程的創建,事實上我們可以將許多非常複雜的運維操作場景編排成一個標準運維的流程。
比如下方是一個企業內部常規的應用版本發佈流程,在沒有標準運維之前執行起來是一個非常複雜的過程。需要在不同的服務器,不同的應用系統,不同的管理工具之間來回切換;需要記錄和核對每一步的步驟,並且需要人工確保每一步都沒有錯誤。
而有了標準運維之後,我們可以將上述的發佈過程分解成一個一個的原子操作,然後通過標準運維創建流程,把這些原子操作串起來,如下圖所示。其中最左邊的“1、2、3、4、5”大的步驟,包括檢查環境、屏蔽周邊告警、版本部署作業、服務檢測、發佈業務公告等。
每個大的步驟中包含按照並行或者串行執行的原子步驟。例如第1步檢查環境中包含“配置平臺(CC)-創建集羣”、“藍鯨服務(BK)-HTTP請求”等8個小的原子操作。這些原子都是在一個統一的框架中,通過python語言編寫原子後端邏輯並按需調整好整原子前端。
如下圖所示:右邊的原子庫中包含了目前已經編寫好的所有原子。我們只需要將這些原子拖拽到左邊的界面中,構建流程即可。並且這些原子在後續創建其他流程的時候,是可以複用的。
最新版本的標準運維,界面更加炫酷,支持分支、輸出參數、子流程等;並且提供更加直觀的可視化界面。如下圖所示:
流程是可以複用的。用戶可以在“任務流程”頁點擊流程模板的“新建任務”按鈕創建一個任務實例。
新建任務時,用戶需要選擇要執行的任務節點(也可以通過點擊執行方案快速選擇要執行的任務節點),並點擊“下一步”。注意,只有設置了可選節點屬性爲“ON”的任務節點,才能在節點選擇階段選擇不執行,其他的任務節點必須執行。
選擇節點後,用戶需要填寫任務名稱和全局變量參數,並點擊“下一步”。
在參數填寫階段,用戶還可以點擊“預覽”,查看將要執行的任務流程圖,這裏會自動去掉在節點選擇階段選擇不執行的任務節點。
在最後一步,用戶可以點擊“查看參數”確認變量替換後生成的每個任務節點的參數,如果不符合預期,可以點擊“修改參數”重新填寫任務的全局變量參數,確認無誤後,點擊“執行”就可以立即啓動當前任務流程實例了。
在任務執行過程中,用戶可以暫停任務,繼續任務或者終止任務,任務執行到某個原子失敗後也可以選擇“跳過”或者修改參數後“重試”。
通過上面的標準運維編排,事實上我們可以將幾乎所有的簡單的,複雜的運維場景編排爲一鍵可以執行,並且通過填寫不同的執行參數可以無限複用的任務流程。
例如我們可以將下屬的新集羣搭建流程通過標準運維編排爲流程。這裏面涉及到與主機、數據庫、應用程序、進程、監控、CMDB等各種組件和IT管理系統之間的交互和驅動,是一個非常複雜的流程。但由於這些組件和系統都能夠提供API接口,能夠通過ESB接入藍鯨平臺,因此所有這些操作都是可以通過開發原子、編排流程固化到標準運維上的一個流程中來。
同理下述的業務發佈流程也可以固化成標準運維中的一個一鍵式流程。
下方的模塊故障替換流程也可以固化爲一個標準運維的流程。
6、輕應用
在輕應用頁面,用戶可以根據一個已執行完成的任務創建一個輕應用到指定用戶的藍鯨桌面。
新建輕應用
用戶可以選擇一個流程模板創建出一個輕應用,這個輕應用可以在藍鯨PaaS的應用市場中打開或添加到桌面,對使用人員而言,輕應用只需要關注一個流程模板的參數填寫和任務操作,由於頁面足夠的簡潔和友好,一個非技術人員也可以通過輕應用執行任務,這也就是標準運維提供的自助化服務之一。
注意,只有業務在配置平臺設置的運維人員、開發人員、產品人員、測試人員和在PaaS人員管理中設置的職能化角色才能訪問輕應用,如果需要某個用戶可以通過輕應用創建任務和執行任務,請提前在任務流程中選擇輕應用引用的流程模板,在權限管理中對用戶授權。
編輯輕應用
如果需要修改輕應用的名稱、簡介或者LOGO,請在輕應用列表中,通過鼠標選擇需要修改的輕應用,點擊編輯圖標後,在彈窗中填寫修改後的參數。注意,不能修改輕應用引用的流程模板,如果需要這樣做,請刪除舊輕應用後重新創建新的輕應用,並引用新的流程模板。
刪除輕應用
如果需要刪除輕應用,請在標準運維輕應用列表中,通過鼠標選擇需要修改的輕應用,點擊刪除圖標後,在彈窗中二次確認並刪除,刪除成功後會同步刪除PaaS上的輕應用。
7、職能化中心
標準運維爲用戶提供了“職能化中心”功能,可以讓運維將業務日常標準化的發佈、變更等工作交給職能化人員(業務操作員,負責實施運維工作中常規性、重複性的操作)來操作,讓業務運維有更多時間和精力去優化和提升業務的質量和體驗。
如果一個用戶在藍鯨集成平臺的角色管理中被設置爲“職能化”角色,那麼該用戶進入標準運維時只有職能化中心和幫助文檔功能。在職能化中心頁面,職能化人員可以看到所有業務的職能化任務,並在這裏認領任務,按照運維提單的指定時間執行任務,並反饋任務執行結果給提單人員。
注意,業務運維人員在提交職能化任務單據給職能化人員執行前,必須在對應任務流程模板的權限管理中給職能化人員授權,即在“可填寫信息的人”和“可執行的人”選擇所有職能化人員或者指定職能化的某個人。
三、原子開發:一切操作皆原子
藍鯨平臺提供了原子開發的完整框架,通過這個框架可以快速實現跨系統的各種類型操作的原子化。下面簡單介紹下原子開發的步驟。
1、創建Django APP 和目錄結構
在根目錄下執行 Django-admin startapp custom_atoms ,然後新建components/collections 和 static/custom_atoms 目錄。
2、修改settings配置
打開conf/settings_custom.py文件,找到INSTALL_APPS_CUSTOM,加入步驟1)中創建的custom_atoms。
3、接入ESB API
如果需要調用自定義的API,請在完成ESB接入後,更新標準運維bluking/component下的文件。
4、原子後臺開發
在custom_atoms/components/collections 目錄下創建 test.py 文件,其中需要定義的屬性和類如下所示。
test.py 屬性詳解:
-
group_name:原子所屬分類(一般是對應 API 的系統簡稱,如配置平臺(CC))
-
class TestCustomService(Service):原子後臺執行邏輯
-
need_schedule = True:是否是異步執行,默認爲 False
-
interval = StaticIntervalGenerator(5):異步原子的輪詢策略
-
def execute:前端參數獲取、API 參數組裝、結果解析、結果輸出
-
def schedule:輪詢邏輯、結果輸出
-
def outputs_format:輸出參數格式化
-
class TestCustomComponent(Component):原子定義
-
name: 原子名稱
-
code:唯一編碼
-
bound_service:綁定後臺服務
-
form:前端表單定義文件路徑
TestCustomService中execute函數詳解:
-
可以是任何 python 代碼,如果對應於 ESB API 調用,一般分爲參數組裝、API 調用、結果解析。
-
data 是原子前端數據,對應於前端的表單,可以用 get_one_of_inputs 獲取某一個參數;執行完成可以使用 set_outputs 寫入返回值和異常信息(ex_data)。
-
parent_data 是任務的公共參數,包括 excutor—執行者,operator—操作員,biz_cc_id—所屬業務 ID。詳細請查看 gcloud/taskflow3/utils.py。
-
返回 True 表示原子執行成功,False 表示執行失敗。
TestCustomService 中 execute函數詳解:
-
返回列表格式。
-
列表格式的每一項定義一個返回字段,是 execute 函數中的 set_outputs 輸出的字段的子集;key—輸出字段標識,name—輸出字段含義,type—輸出字段類型(str、int等python 數據結構)。
TestCustomService 中 shedule 函數詳解:
-
由 interval 控制調用策略,如 pipeline.core.flow.activity.StaticIntervalGenerator(每隔多少秒輪詢一次)、DefaultIntervalGenerator(每次輪詢間隔時間是上一次的兩倍)。
-
使用 self.finish_schedule 結束輪詢。
-
返回 True 表示原子執行成功,False 表示執行失敗。
5、原子前端開發
在 custom_atoms/static/custom_atoms 目錄下創建 test 目錄,並創建 test_custom.js 文件,注意文件路徑和原子後臺定義的 form 保持一致。通過 $.atoms 註冊原子前端配置,其中各項含義是:
-
test_custom:原子後臺定義的 code。
-
tagcode:參數 code,請保持全局唯一,命名規範爲“系統名參數名”。
-
type:前端表單類型,可選 input、textarea、radio、checkbox、select、datetime、datatable、upload、combine等。
-
attrs:對應type的屬性設置,如 name、validation。
6、原子測試
創建流程模板,新增原子節點,原子類型選擇新開發的原子,展示的輸入參數和前端配置項一致,輸出參數和後臺outputs_format一致,其中執行結果是系統默認,值是True或False,表示節點執行結果是成功還是失敗。
根據上一步創建的流程模板,新建任務執行後查看結果。
7、提交代碼
執行 python manage.py collectstatic –noinput,然後就可以提交代碼並打包發佈了。
四、驅動一切:企業服務總線(ESB)
企業服務總線是藍鯨集成平臺中一個關鍵的組件。
企業服務總線有兩個作用:
其一,爲整個藍鯨體系服務,藍鯨的其他平臺,如:配置平臺、作業平臺、數據平臺、容器管理平臺、AI 平臺,均可以將各平臺的特性以 API 的形式對接到組件中,便於集成平臺上的 SaaS 調用,整合各個平臺的強大功能,發揮最實用的價值。
其二,第三方系統,如微信公衆號/企業號、郵件系統、OA 系統、AD 系統、財務系統、虛擬化平臺等非藍鯨體系內的運營系統,同樣以 API 的形式將特性對接到組件,豐富和完善整個集成平臺企業服務總線的服務。從而使集成平臺之上的 SaaS 可以調度一些,連接一切。
“ESB 管理”僅限於“管理員”角色操作,從“開發者中心”—>“ESB 管理”進入使用。
“ESB 管理”給出了詳細的使用文檔,分爲以下幾個部分:
-
簡介:概述 ESB,並指出 ESB 接入的兩種方式:編碼方式(採用 Python 語法)和自助接入方式(又稱 API Gateway)
-
系統管理:ESB 來自於哪個系統,可以看成是ESB的分類
-
通道管理:ESB 訪問的路徑管理
-
組件自助接入:目前僅支持 http 請求形式的自助接入
-
使用指南:詳細的 ESB 接入、使用教程,以及如何爲新加入的組件生產/更新“組件文檔”
-
ESB 文檔:查詢藍鯨官方,自己接入組件的使用樣例
通過ESB事實上可以實現企業的例如ITSM工單系統、AD、Exchange、數據庫管理系統、存儲、網絡設備、備份系統、監控系統、虛擬化平臺、公有云平臺等等。
而這些平臺上的所有操作,在提供了API接口的情況下,都可以分解爲一個又一個的原子。因此事實上標準運維就具備了驅動這些平臺和資源的幾乎所有操作的能力。
並且這些流程還能夠輸出給工單系統,實現工單自動化;輸出給監控系統,實現故障自愈操作;輸出給資源自動化交付SaaS工具,實現各種資源的一鍵自動交付;輸出給用戶自助類APP,實現用戶IT資源的自助申請和管理;輸出給業務應用自動化類APP,實現應用對底層各種資源的自動驅動等等。
標準運維以自己的“不變”可以應對運維場景的“萬變”,是不是非常厲害呢。
有興趣的同學有福了,現在社區版也可以用標準運維這個工具了。騰訊藍鯨最新社區版4.1已經正式發佈,稍後將在其上釋放標準運維SaaS工具,果斷下載起來吧:http://bk.tencent.com/index/。
注:本文關於標準運維和服務總線部分介紹,摘自官方白皮書。文檔鏈接:
http://docs.bk.tencent.com/product_white_paper/gcloud/
本文首發於微信公衆號:嘉爲科技,轉載請註明出處。