李小紅
摘要:配置(Configuration) 概念對每個(gè)技術(shù)人員都不陌生,基本上每個(gè)系統(tǒng)都有配置參數(shù)。造成這種現(xiàn)象的本質(zhì)是技術(shù)人員無法掌控和預(yù)知一切,回到軟件領(lǐng)域上,就需要他們對系統(tǒng)的某些功能特性預(yù)留出控制的余地,以便在未來需要時(shí),可以人為控制系統(tǒng)的行為特征。配置即程序運(yùn)行時(shí)動態(tài)調(diào)整行為的能力。隨著用戶規(guī)模的增大和計(jì)算功能的微服務(wù)化,成百上千個(gè)微服務(wù)組件的運(yùn)行都需要依賴于各種配置文件。因此,技術(shù)人員需要通過配置中心統(tǒng)一管理配置。文章介紹如何基于CMDB[1]和Archaius[2]技術(shù)打造可靠的應(yīng)用動態(tài)配置系統(tǒng)。
關(guān)鍵詞:配置;CMDB;Archaius
中圖分類號:TP311? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2022)15-0058-03
1 動態(tài)配置系統(tǒng)背景
快速迭代的系統(tǒng)要求需求的變更能快速實(shí)現(xiàn)并上線。經(jīng)統(tǒng)計(jì),公司20%的需求是修改配置類的,如果每次修改都需要完整的上線流程,效率低下。而且傳統(tǒng)的配置文件方式和數(shù)據(jù)庫的方式已無法滿足開發(fā)人員對配置管理的要求:
1)安全性:配置跟隨源代碼保存在代碼庫中,容易造成配置泄漏;
2)時(shí)效性:修改配置,需要重啟服務(wù)才能生效;
3)局限性:無法支持灰度動態(tài)調(diào)整:例如日志開關(guān)、功能開關(guān)。
1.1 安全性
程序配置中包含有數(shù)據(jù)庫賬號或密碼,加密的密鑰等信息都明文存儲在項(xiàng)目代碼庫中,且對所有人員開放,隱藏著巨大的風(fēng)險(xiǎn)。
1.2 時(shí)效性
配置改動后,需要和修改代碼一樣,走完整的上線流程。配置修改上線涉及4方人員,8個(gè)步驟。
1.3 局限性
配置變更本身也蘊(yùn)藏著風(fēng)險(xiǎn),因?yàn)榕渲玫淖兏簿痛碇鴺I(yè)務(wù)邏輯的變化。軟件技術(shù)開發(fā)人員也希望變更能實(shí)現(xiàn)灰度上線。
2 應(yīng)用配置系統(tǒng)的設(shè)計(jì)
當(dāng)前,各大公司都有自己的應(yīng)用配置中心產(chǎn)品,調(diào)研市面上當(dāng)前比較常用的技術(shù),詳細(xì)對比情況見表1。
雖然都基本滿足需求,但為了與當(dāng)前芒果TV運(yùn)維體系的CMDB無縫結(jié)合,調(diào)研發(fā)現(xiàn),CMDBuild[5]開源項(xiàng)目非常契合需求,且與Netflix的動態(tài)配置讀取SDK完美配合。
2.1 CMDBuild
芒果TV基于開源和自研構(gòu)建了很多運(yùn)維平臺,如多云持續(xù)交付、統(tǒng)一監(jiān)控、自動化測試等。但是這些平臺各自獨(dú)立地維護(hù)配置信息,形成配置信息的孤島,導(dǎo)致配置管理困難。
存在的問題舉例:
1)配置數(shù)據(jù)手動維護(hù),且無標(biāo)準(zhǔn)工作流保障,容易導(dǎo)致配置數(shù)據(jù)與資源實(shí)際情況不匹配;
2)各平臺之間的配置數(shù)據(jù)管理沒有聯(lián)動,容易導(dǎo)致配置的不一致;
3)配置數(shù)據(jù)模型不統(tǒng)一,每個(gè)平臺采用自己的方式,互操作性差,溝通成本高;
4)配置數(shù)據(jù)沒有通過存取接口對外暴露,甚至保存在文件中,使用不方便;
5)代碼配置隨代碼一起存放在Git[6],敏感信息存在安全風(fēng)險(xiǎn);
6)CMDB是運(yùn)維標(biāo)準(zhǔn)化、自動化的基石,提供全局唯一的、權(quán)威的配置數(shù)據(jù)來源。
CMDBuild是意大利Tecnotecasrl公司開源的配置管理數(shù)據(jù)庫解決方案,遵循AGPL開源許可協(xié)議。最早發(fā)布于2006年,每年更新數(shù)次,最新版本3.0進(jìn)行了大規(guī)模的重構(gòu),于2019年4月12日發(fā)布。
CMDBuild是靈活可配置的,原生支持以下功能。
1)數(shù)據(jù)模型可配置;
2)工作流可配置;
3)報(bào)表可配置;
4)儀表盤可配置;
5)通過API對接外部系統(tǒng);
6)自定義頁面(提供GUI框架);
7)構(gòu)建連接器對接外部數(shù)據(jù)源(提供連接器框架)。
CMDBuild其實(shí)是一個(gè)配置管理引擎,軟件技術(shù)開發(fā)人員可以基于它定制出不同的CMDB解決方案。它有兩個(gè)預(yù)配置的CMDB解決方案(均為開源,但是部分功能和服務(wù)只有付費(fèi)的訂閱用戶可使用) :
1)Ready2Use:面向IT資產(chǎn)和服務(wù)管理,符合ITIL[7]最佳實(shí)踐(不僅是CMDB,更是CMS);
2)OpenMAINT:面向物業(yè)資產(chǎn)管理及維護(hù)。
CMDBuild有兩種工作模式:
1)系統(tǒng)管理模式下:系統(tǒng)管理員依據(jù)事先設(shè)計(jì)的 CMDB模型,定義數(shù)據(jù)模型、工作流、報(bào)表和儀表盤等要素,這些要素共同組成CMDB應(yīng)用;
2)數(shù)據(jù)管理模式下:數(shù)據(jù)管理員可以通過GUI界面對CMDB中的配置數(shù)據(jù)進(jìn)行管理,也可以通過 API實(shí)現(xiàn)CMDB與外部系統(tǒng)的交互和數(shù)據(jù)同步。
芒果TV的CMDB借鑒Ready2Use的模型和思路,基于Ready2Use來擴(kuò)展。
CMDBuild支持:
1)配置模型可以靈活定義、擴(kuò)展;
2)以關(guān)系圖的形式顯示配置項(xiàng)之間的關(guān)系;
3)訪問權(quán)限管理可以細(xì)化到類(Class)、卡片(Card)、字段(Field)級別;
4)可保留并查詢數(shù)據(jù)的歷史修改記錄。
CMDBuild的工作流可以根據(jù)場景需要靈活定制,可以配置審批人和權(quán)限控制,詳細(xì)記錄管理活動的細(xì)節(jié),支持配置郵件通知,支持自動任務(wù)調(diào)度。
CMDBuild提供兩種不同風(fēng)格的API接口:REST和SOAP。
基于CMDBBuild設(shè)計(jì)的應(yīng)用配置模型如下:
2.2 Archaius
Archaius是Netflix公司開源項(xiàng)目之一,基Java的配置管理類庫,主要用于多配置存儲的動態(tài)獲取。主要功能是對Apache Common Configuration類庫的擴(kuò)展。在開發(fā)中,可以將其用作分布式配置管理依賴構(gòu)件。同時(shí),它有如下一些特性:8308A0F7-E324-4974-BC57-1A42DF3979B2
1)配置可動態(tài)調(diào)整;
2)配置支持類型(Int, Long, Boolean等);
3)高性能和線程安全;
4)提供一個(gè)拉(pulling)配置的框架,可以從配置源動態(tài)拉取變更的配置;
5)支持回調(diào)(callback)機(jī)制,在配置變更時(shí)自動調(diào)用;
6)組合配置(核心內(nèi)容)。
圖3是Archaius的總體設(shè)計(jì):
3 應(yīng)用動態(tài)配置
結(jié)合CMDBuild和Archaius的應(yīng)用動態(tài)配置系統(tǒng)架構(gòu)如圖4所示:
基于此架構(gòu)的結(jié)構(gòu)圖如圖5所示。
在CMDBuild后臺修改配置后,通過工作流審核,可以按數(shù)據(jù)中心、區(qū)域、集群和服務(wù)器進(jìn)行灰度。
集群下某臺機(jī)器的配置文件名規(guī)則,以base.properties為例:
base-${CMDB_DC}-${CMDB_REGION}-${CMDB_ENV}-${CMDB_SERVER}.properties
機(jī)器開啟時(shí),會設(shè)置有環(huán)境變量:CMDB_DC、CMDB_REGION、CMDB_ENV、CMDB_SERVER。
代碼啟動時(shí),Archaius會根據(jù)環(huán)境變量優(yōu)先讀?。篵ase-${CMDB_DC}-${CMDB_REGION}-${CMDB_ENV}-${CMDB_SERVER}.properties,以此來實(shí)現(xiàn)灰度配置生效,當(dāng)未找到此文件時(shí),再讀取默認(rèn)配置文件。
4 應(yīng)用動態(tài)配置收益
使用新的動態(tài)配置系統(tǒng)后,配置修改生效流程非常簡單。
5結(jié)束語
對于配置文件,軟件技術(shù)人員并不陌生,它提供了可以動態(tài)修改程序運(yùn)行能力。引用別人的一句話就是:系統(tǒng)運(yùn)行時(shí)(runtime)飛行姿態(tài)的動態(tài)調(diào)整。把這種工作稱之為在快速飛行的飛機(jī)上修理零件,技術(shù)人員總是無法掌控和預(yù)知一切。對于系統(tǒng)來說需要預(yù)留一些控制線條,以便在需要的時(shí)候做出調(diào)整,控制系統(tǒng)方向(如灰度控制、限流調(diào)整),這對于擁抱變化的互聯(lián)網(wǎng)行業(yè)尤為重要,應(yīng)用動態(tài)配置系統(tǒng)恰好達(dá)到了此目的。
參考文獻(xiàn):
[1] 姜才康.配置管理系統(tǒng)建設(shè)實(shí)踐與探索[J].金融電子化,2018(2):68-70.
[2] 楊平. 媒體融合服務(wù)網(wǎng)格技術(shù)及應(yīng)用[C]//國家廣播電視總局科學(xué)技術(shù)委員會秘書處、中國電子學(xué)會有線電視綜合信息技術(shù)分會.全國互聯(lián)網(wǎng)與音視頻廣播發(fā)展研討會(NWC)暨中國數(shù)字廣播電視與網(wǎng)絡(luò)發(fā)展年會(CCNS)論文集(2020年特輯).國家新聞出版廣電總局科學(xué)技術(shù)委員會秘書處,2020:10.
[3] 李迪.基于Raft協(xié)議及RocksDB的分布式統(tǒng)一配置中心設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2019.
[4] 李帥.微服務(wù)架構(gòu)的研究及其在線教育系統(tǒng)的實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2018.
[5] 蘇星星. 服務(wù)器集群資源生命周期資源管理平臺的設(shè)計(jì)與實(shí)現(xiàn)[D].長沙:湖南大學(xué),2019.
[6] 宋冬生.Git——版本管理之利器[J].程序員,2007(11):118-119,10.
[7] 周盈,胡順全.基于ITIL的自動化運(yùn)維方法分析[J].中國管理信息化,2021,24(6):130-131.
【通聯(lián)編輯:唐一東】8308A0F7-E324-4974-BC57-1A42DF3979B2