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