李小紅



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