概要设计实例_尽可能通用的运维CMDB的设计与实践
CMDB是配置管理數(shù)據(jù)庫(kù)的簡(jiǎn)稱(chēng),本文所闡述的CMDB只專(zhuān)注于存儲(chǔ)運(yùn)維相關(guān)的資源數(shù)據(jù),有別于應(yīng)用系統(tǒng)的配置管理。實(shí)際上企業(yè)一般都是自己內(nèi)部的運(yùn)維團(tuán)隊(duì)按照公司的運(yùn)維場(chǎng)景需求設(shè)計(jì)和構(gòu)建的CMDB,因?yàn)楹苌倌苡虚_(kāi)源產(chǎn)品能滿(mǎn)足他們的需求,或者是個(gè)性化的需求二次開(kāi)發(fā)比較難易實(shí)現(xiàn),所以他們都選擇了自主研發(fā),而不是使用開(kāi)源!
因此,要實(shí)現(xiàn)一個(gè)盡可能通用、靈活、可擴(kuò)展的運(yùn)維資源數(shù)據(jù)的配置和管理系統(tǒng),系統(tǒng)必須要滿(mǎn)足:
基于上述理念,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)CMDB,并開(kāi)源出來(lái),希望能得到大家的積極反饋,系統(tǒng)將持續(xù)不斷的改進(jìn),UI上還有大量工作需要去完成。
在線Demo: http://121.42.12.46:8000 用戶(hù)名: demo 密碼: 123456
pycook/cmdb?github.com具體安裝和使用見(jiàn)README
總體架構(gòu)
圖1. 總體架構(gòu)如圖1,CMDB自下而上被劃分為4層: 存儲(chǔ)層、數(shù)據(jù)層、API、UI,圖中的CIType可以理解為數(shù)據(jù)模型,例如物理機(jī)、虛擬機(jī)、應(yīng)用、網(wǎng)卡、軟件等。CI是配置項(xiàng),即CIType的實(shí)例, 例如具體的1臺(tái)物理機(jī)就是1個(gè)CI。下面概要介紹一下這4層。
存儲(chǔ)層:主要用來(lái)存儲(chǔ)CIType和CI,以及它們之間的關(guān)系。
- Mysql: 所有數(shù)據(jù)的持久化存儲(chǔ)
- Redis: 數(shù)據(jù)緩存,主要是用戶(hù)、屬性、CIType、權(quán)限等的數(shù)據(jù)緩存,減少M(fèi)ysql訪問(wèn)壓力,提升API的響應(yīng)速度
- Elasticsearch: 主要存儲(chǔ)CI的實(shí)例數(shù)據(jù),用來(lái)檢索CI。實(shí)際上ES是一個(gè)可選的方案,CI數(shù)據(jù)的檢索默認(rèn)是通過(guò)Mysql+Redis來(lái)實(shí)現(xiàn)的,當(dāng)然CI的實(shí)例數(shù)若超過(guò)一定數(shù)量級(jí),考慮到查詢(xún)效率,建議使用ES。
數(shù)據(jù)層:描述了模型數(shù)據(jù)和實(shí)例數(shù)據(jù),以及它們之間的關(guān)系。在這一層首先需要運(yùn)維按照具體的應(yīng)用場(chǎng)景來(lái)完成模型的構(gòu)建。模型包括屬性,屬性有不同的值的類(lèi)型,且有一些檢驗(yàn)規(guī)則,比如唯一、必須等的校驗(yàn),在系統(tǒng)層面避免臟數(shù)據(jù)的錄入。總結(jié)下來(lái),運(yùn)維CMDB實(shí)際上主要包括下面4種類(lèi)型的數(shù)據(jù):
當(dāng)然,每個(gè)公司的運(yùn)維場(chǎng)景各異,用戶(hù)都可以按照自己的需求來(lái)設(shè)計(jì)數(shù)據(jù)模型。
API層: 對(duì)UI提供一套統(tǒng)一、透明的調(diào)用接口,對(duì)下層各數(shù)據(jù)模塊實(shí)行接口抽象與封裝。要盡可能實(shí)現(xiàn)通用,要求CI和CI relation的查詢(xún)API必須做到通用和靈活,要考慮到用戶(hù)各種各樣的查詢(xún)需求,本系統(tǒng)實(shí)現(xiàn)了對(duì)應(yīng)的2個(gè)API,基本上滿(mǎn)足了前端對(duì)數(shù)據(jù)查詢(xún)的所有需求。
UI層: 實(shí)際上就是web portal,用戶(hù)直接訪問(wèn)CMDB的門(mén)戶(hù)。核心功能主要包括:模型配置、資源視圖、關(guān)系視圖、樹(shù)形視圖和權(quán)限管理這5個(gè)核心模塊。下面將對(duì)這5個(gè)功能模塊進(jìn)行闡述。
模型配置
圖2. 動(dòng)態(tài)建模除非是大型的成熟的企業(yè),否則很難在開(kāi)始就完全能夠定義清楚運(yùn)維的數(shù)據(jù)模型。因?yàn)槠髽I(yè)在不斷成長(zhǎng)和發(fā)展的過(guò)程中,運(yùn)維的場(chǎng)景和需求也是在不斷的變化的,所以,通用的CMDB一定要能夠讓管理員方便對(duì)CIType進(jìn)行動(dòng)態(tài)的修改。如圖2所示, 要完成動(dòng)態(tài)建模,至少要能增刪改CIType,給CIType定義屬性,也可以從屬性庫(kù)直接復(fù)用已存在的屬性,屬性可以有校驗(yàn)規(guī)則,以便盡可能保證數(shù)據(jù)的準(zhǔn)確性。屬性值的類(lèi)型支持以下5種:
此外,還可以構(gòu)建CIType之間的關(guān)系,比如事業(yè)部包含產(chǎn)品線,產(chǎn)品線包含應(yīng)用,應(yīng)用部署在物理機(jī),應(yīng)用部署在docker上。
圖3. 模型增刪改圖4. 模型屬性的定義上圖3和圖4分別是對(duì)CIType的增刪改和CIType的屬性進(jìn)行定義。下圖5則是對(duì)關(guān)系視圖進(jìn)行定義,比如構(gòu)建服務(wù)樹(shù),這個(gè)將在下面關(guān)系視圖進(jìn)行詳細(xì)的闡述。
圖5. 關(guān)系視圖的定義面板資源視圖
資源視圖即CI數(shù)據(jù)的檢索。為了保證系統(tǒng)的通用、靈活,CI數(shù)據(jù)檢索的API要能按照CI的屬性進(jìn)行各種條件過(guò)濾查詢(xún),而且這個(gè)API要盡可能覆蓋用戶(hù)不同的查詢(xún)需求。CI的通用查詢(xún)API實(shí)現(xiàn)了搜索表達(dá)式的查詢(xún),表達(dá)式支持AND、OR、NOT、IN、RANGE、COMPARISON的組合查詢(xún),如圖6所示。具體的CI查詢(xún)API使用說(shuō)明見(jiàn):
pycook/cmdb?github.com圖6. CI通用搜索如圖7,用戶(hù)能夠訂閱自己關(guān)心的資源視圖,比如物理機(jī)、應(yīng)用等。圖8則是用戶(hù)訂閱的資源視圖的數(shù)據(jù)展示,我們可以根據(jù)屬性字段查詢(xún),另外也提供了批量修改、下載、刪除等操作,也可以查看CI的生命周期,以及它的關(guān)聯(lián)CI。
圖7. 用戶(hù)訂閱關(guān)心的資源視圖圖8. 資源視圖樹(shù)形視圖
樹(shù)形視圖實(shí)際上是資源視圖按照樹(shù)形目錄的方式來(lái)進(jìn)行展示。 用戶(hù)可以訂閱某一個(gè)CIType按照不同屬性分level來(lái)展示,比如物理機(jī),我們可以定義: IDC -> 環(huán)境 -> 狀態(tài) 3個(gè)屬性分層的視圖,如圖9所示,用樹(shù)形展示。這樣方便了不同角色的用戶(hù)可以按需來(lái)設(shè)計(jì)資源的統(tǒng)計(jì)展示方式,樹(shù)形視圖是單類(lèi)CI實(shí)例數(shù)據(jù)的展示,不涉及到CI之間關(guān)系。
圖9. 樹(shù)形視圖關(guān)系視圖
關(guān)系視圖是CI之間的關(guān)系的用樹(shù)形的方式來(lái)進(jìn)行展示。同樣為了保證系統(tǒng)的通用性,CI關(guān)系查詢(xún)和CI實(shí)例的查詢(xún)API一樣要靈活且通用,本系統(tǒng)實(shí)現(xiàn)的CI關(guān)系查詢(xún)API是使用方法類(lèi)似于上文提到的CI的查詢(xún)API,只不過(guò)多了2個(gè)參數(shù):root_id 搜索的根節(jié)點(diǎn)的ci_id和level搜索的層級(jí),也就是說(shuō)可以從某一個(gè)CI出發(fā),去查詢(xún)離該CI任一level的CI,如圖10所示。從根節(jié)點(diǎn)root出發(fā)可以搜索level=1的關(guān)系節(jié)點(diǎn),也可以直接搜索level=2或者n的任一一層節(jié)點(diǎn)。具體的API使用說(shuō)明見(jiàn):
https://github.com/pycook/cmdb/blob/master/docs/cmdb_query_api.md?github.com圖10. 關(guān)系查詢(xún)關(guān)系視圖是由管理員根據(jù)需求來(lái)進(jìn)行定義,然后授權(quán)給不同的角色來(lái)使用。舉個(gè)例子: 事業(yè)部 -> 產(chǎn)品線 -> 應(yīng)用 定義這樣的一個(gè)關(guān)系視圖,我們命名為服務(wù)樹(shù), 樹(shù)的節(jié)點(diǎn)是這3層CI, 具體的數(shù)據(jù)展示是應(yīng)用下面的所有資源,可以是物理機(jī),也可以是docker,如圖11所示。
圖11. 關(guān)系視圖權(quán)限管理
權(quán)限管理:系統(tǒng)提供了基于角色的訪問(wèn)權(quán)限控制,支持角色繼承,其設(shè)計(jì)也是比較靈活,可以按需實(shí)現(xiàn)比較細(xì)粒度的權(quán)限控制,目前可以按照CIType和關(guān)系視圖來(lái)進(jìn)行權(quán)限控制,主要包括增、刪、改、查的權(quán)限控制。
圖12. 權(quán)限管理 與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的概要设计实例_尽可能通用的运维CMDB的设计与实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: form表单上传文件_SpringBoo
- 下一篇: 排查链接是否失效_如何进行移动站点流量排