基于騰訊藍鯨智云SaaS的業(yè)務配置同步管理平臺設(shè)計與實現(xiàn)
本文來自騰訊藍鯨智云社區(qū)用戶:donkey
業(yè)務背景
該平臺設(shè)計的初衷,本是源于另外一個環(huán)境治理項目的一部分,主要是負責跨環(huán)境的業(yè)務配置修改與同步,同時考慮到這塊能力除了在該項目中可以應用到外,也可以獨立作為一個單點能力提供給其他用戶使用,故考慮設(shè)計為一個saas應用模式,既支持用戶在管理端界面進行操作,也支持通過管理api與第其他第三方效能工具進行集成。
技術(shù)選型
項目主導
該項目主要針對測試域的環(huán)境治理,由測試團隊主導,而團隊已有的測試工具均以python為主,考慮到后期協(xié)同,故平臺建設(shè)也以python為準。
功能需求
配置修改
Tars:鵝廠開源的微服務框架,自帶配置管理功能,支持主流異構(gòu)服務配置管理,是目前內(nèi)部主站業(yè)務配置管理主要維護方式。
Appolo:攜程開源的配置管理中心,后期新引入,主要是針對Java類應用。
以上不管哪個方式,都需要用戶在管理端界面去手動進行修改,而想要實現(xiàn)的配置同步功能,是希望能達到業(yè)務配置的自動獲取、修改與同步,所以沒有現(xiàn)成能力可以直接使用,但可以在已有能力基礎(chǔ)上做進一步封裝,故此處主要通過Tars框架的管理api對業(yè)務配置修改做二次處理。
配置同步
此處同步主要有以下兩方面含義:
首先,是將源端環(huán)境指定配置文件的內(nèi)容,實時修改后應用到目標端環(huán)境指定配置文件中(一般都是針對環(huán)境不同但對應業(yè)務服務相同的配置),并且能被業(yè)務應用正確解析和讀?。?/p>
其次,同步范圍既可以具體到單個服務或單個配置,也可以針對環(huán)境級別下涵蓋的服務配置,并且能對同步結(jié)果進行實時檢驗。
同樣,此處配置同步功能也是基于Tars框架管理api實現(xiàn)。
內(nèi)部基建
此處主要表示該平臺功能的實現(xiàn),所依賴的內(nèi)部已有基礎(chǔ)設(shè)施能力:
Gitlab:平臺項目使用代碼托管平臺。
Tars:通過Tars管理api進行Tars業(yè)務配置的實時修改與同步。
藍鯨Saas:測試環(huán)境資源是基于藍鯨進行管理,故可以利用藍鯨Saas的擴展能力,既能省略額外的環(huán)境資源開銷,也能方便調(diào)用其他藍鯨內(nèi)置的功能如監(jiān)控、日志分析等。
藍盾:藍鯨devops流水線平臺,可以通過和藍盾進行集成(通過藍盾流水線插件擴展能力),與環(huán)境治理項目其他模塊實現(xiàn)更有效地配合,同時也可以進一步拓展配置同步平臺的應用場景。
Tapd:項目管理工具,源自鵝廠,主要用來對項目整體進度進行記錄和把控。
技術(shù)框架
即藍鯨Saas研發(fā)框架為主:
web框架:Django2
后端:Python3
前端:Vue2
UI組件庫:MagicBox
數(shù)據(jù)庫:MySQL5.7
方案實現(xiàn)
需求分析與設(shè)計
架構(gòu)設(shè)計

確定基本技術(shù)棧之后,就是基礎(chǔ)架構(gòu)的設(shè)計,因為一開始對業(yè)務線整體狀況都不是很熟悉,包括技術(shù)背景和業(yè)務背景,經(jīng)過不斷深入了解和團隊溝通之后,才逐漸迭代出來自覺更加符合企業(yè)規(guī)范的樣子,圖示的架構(gòu)設(shè)計已經(jīng)是后期進一步優(yōu)化的結(jié)果,即通過抽象出規(guī)則、策略組、任務等管理模塊,對整個配置同步過程進行自動化管控。
流程設(shè)計
有了基本的架構(gòu)設(shè)計相當于有了個骨架,但很多細節(jié)還是很模糊的,首先,就是具體用戶應該怎么去使用,才能達到配置修改和同步的目的,所以就要先把基礎(chǔ)的業(yè)務流程確定出來,而不是想一步做一步。
按照已有的架構(gòu)設(shè)計,以下是各管理模塊基本的業(yè)務流程:
規(guī)則管理

策略組管理

任務管理

原型設(shè)計
這里主要指UI原型設(shè)計,就是根據(jù)已經(jīng)確定的業(yè)務流,設(shè)計用戶交互的前端,說實話比起業(yè)務系統(tǒng)有分工明確的部門協(xié)作在搞,這個項目實際就我一人專職在弄,當時研究去畫這個原型也是花了我不少時間,無奈老板有要求,然后后期實際效果出來其實又有不少變動,這里就簡單展示下,后面會有實際效果展示。
【貼士】一開始畫原型用的Axure,很多PMO應該不陌生,后面發(fā)現(xiàn)draw.io也不錯,上手也簡單,很多圖就轉(zhuǎn)到draw.io上來了。

后端設(shè)計
完成業(yè)務流設(shè)計后,接下來就是數(shù)據(jù)流設(shè)計,有了前面的鋪墊,其實數(shù)據(jù)流這塊就輕松一些,當然這塊的設(shè)計和DB設(shè)計也是息息相關(guān)的。(如下為后端設(shè)計概要展示)

DB設(shè)計
對于有經(jīng)驗的后端開發(fā),一般看庫表設(shè)計,對于后端功能很多就知道個大概了,但是當有多個模塊的功能都要設(shè)計庫表時,怎樣才能更合理,更符合數(shù)據(jù)庫設(shè)計范式,只能靠自己在不斷折騰中去感悟了。(如下為DB設(shè)計概要展示)

編碼實現(xiàn)
貼士1:當前面的設(shè)計準備比較充分之后,編碼階段就會相對比較輕松,但有事先設(shè)計不代表就可以一蹴而就,實現(xiàn)過程也會不斷發(fā)現(xiàn)一些設(shè)計過程重沒有考慮到的因素,這就需要不斷將發(fā)現(xiàn)的設(shè)計問題,通過一定的管理方式(比如項目管理工具,此處使用的是Tapd)進行記錄和跟蹤,當然也包括過程中的需求變更和缺陷追蹤等。
貼士2:開發(fā)過程中,后端和前端實際都是獨立分開的項目,當有一定階段成果后再合并部署驗證,生產(chǎn)業(yè)務一般都是并行開發(fā),但比如像我只有一人獨立負責的時候,優(yōu)先實現(xiàn)前端,一個是前端產(chǎn)出用戶感知更明顯,一個也是更容易發(fā)現(xiàn)交互流程設(shè)計的缺陷,確定交互流程沒問題之后,再對應實現(xiàn)后端功能。
前端
具體實現(xiàn)到這里就沒有什么了,就是按照前面確定的業(yè)務流程和UI原型按部就班搞即可,就是過程中有些個人經(jīng)驗感覺可以分享一下:
藍鯨saas研發(fā)框架會通過bk_site_url這個全局變量區(qū)分本地開發(fā)環(huán)境和線上環(huán)境,故可以在前端項目配置main.js中將baseURL設(shè)置成自動判斷,而不是每次合并部署前再手動修改,避免忘記修改合并部署后前端訪問失敗。

由于Vue實例化的特性,實際不同URL訪問的html文檔可能都是同一個,這對用戶常規(guī)認為的不同URL代表不同訪問頁面的習慣是沖突的,所以此處使用vue-router插件作為路由控制,同時也能反過來通過路由變化來觸發(fā)頁面組件的變化;
使用:在項目配置main.js中引入,然后在route目錄下針對具體頁面做指定。

使用Vuex進行狀態(tài)管理,基于vue組件根據(jù)數(shù)據(jù)變化而變化的特性,當項目龐大復雜起來之后,各種父子組件、兄弟組件、跨模塊嵌套組件一層層傳值有時真會讓人崩潰,當把數(shù)據(jù)統(tǒng)一用Vuex進行納管后,項目組件狀態(tài)管理至少不再是原來那種亂糟糟的狀態(tài),讓人感覺有條理很多,同時這也是vue官方推薦的組件狀態(tài)管理解決方案。


后端
注意:在設(shè)計一些功能模塊,特別是需要做類似持久化操作的時候,要注意防重復操作,舉個例子,像調(diào)用Tars管理api進行配置寫入的功能,本地開發(fā)的時候調(diào)用寫入是正常的,部署到藍鯨上就發(fā)現(xiàn),同個配置記錄會重復寫入三次,原因在于本地部署是一個服務實例,但藍鯨線上是默認3個服務實例(提升服務可用性),做成自動化調(diào)度的時候就會出現(xiàn)重復執(zhí)行的問題,此處主要是通過添加文件鎖的方式解決。
部署
注意:著手開發(fā)之前,要先將初始化的研發(fā)框架先部署一版到藍鯨環(huán)境上,驗證沒問題之后再繼續(xù)后續(xù)的開發(fā),不然的話,先開發(fā)一部分再部署到藍鯨環(huán)境上,然后發(fā)現(xiàn)訪問出問題,日志報錯又不明顯的時候,都不知道是配置問題,代碼問題,還是組件兼容問題,比如?Saas部署到藍鯨后界面顯示空白異常處理。
功能驗收
一期效果
規(guī)則管理


計劃管理


二期效果
規(guī)則管理


策略管理

任務管理

個人總結(jié)
即便是獨立負責項目,也要講究章法,比如通過使用項目管理工具幫自己進行項目進度的把控,不至于淹沒在各種項目瑣事細節(jié)中;
可以充分設(shè)計,但不要過度實現(xiàn),特別是在項目前期對于產(chǎn)品并沒有很明確規(guī)劃的時候,先demo,再迭代,小步快跑;
一開始就要站在后期推廣角度思考項目所能帶來的業(yè)務價值,否則效能類實踐一旦落地效果不好,自己又沒有考慮長遠,很容易就被斃掉,特別像現(xiàn)在整體不景氣的職場環(huán)境背景下;
沒有過不去的檻,邁過去了,那就是你的護城河。