數據庫元數據設計的維度和分層設計
對于元數據體系的建設思考,目前的設計是基于基礎數據配置的管理,包括多個元數據維度的管理,在此基礎上需要梳理基于系統場景的元數據設計,覆蓋如備份恢復,監控報警,實例部署等層面的元數據管理信息,通過運維任務提煉得到系統流程; 然后基于業務需求來梳理相關的業務場景的元數據相關設計,如資源申請,權限申請等,逐步梳理出主干業務流程,其中每個層之間都是相對隔離的,每個層都需要開放相關的API,在業務層不能直接暴露ORM層的相關操作。
我們在此描述的主要是元數據的核心設計部分。
元數據維度可以按照業務維度和系統維度來綜合考慮,其中業務維度相對簡單,而系統維度結構和層次要復雜一些,但是業務維度的信息是基于系統維度的設計,如對于實例的概念,對于業務來說,實例,集群在業務中都是廣義的實例范疇,所以接下來會按照系統維度的設計為主。
接口層:業務訪問維度,基于app_code, 對外統一體現為實例,如單實例,主從,集群等,都是以實例的角色出現,不顯示內部的數據信息(如不顯示數據分片節點),接口層數據源自代理層,接口層的數據為只讀模式,數據可刷新
代理層:代理層是設計中邏輯關系最為關鍵的一層,承上啟下,其中單實例在代理層需要體現service_name, 基于MHA的環境需要體現Consul或VIP的service_name,如果是集群,則需要在其中體現中間件和數據分片;如果是分布式集群,僅顯示對外服務層(如TiDB中顯示Server層,如果有多個Server,則顯示多個。
拓撲層:是邏輯關系最復雜的一層,需要支持多種拓撲結構,比如一主一從,一主多從,級聯復制,雙主復制等,其中單實例是一種特殊的復制拓撲,也需要體現,此外還需要支持分布式模型,在分布式模型中,多個節點是相對獨立的角色,無法體現多個節點間的映射。
實例層:實例層是整體元數據的基座,以IP+端口來唯一標識,實例層按照計算存儲分離的模式來考慮,不光包含數據庫實例信息,還包括中間件的相關信息,實例層是連接數據庫層的重要環節。
主機層:主機層的信息相對獨立,主要是主機層的基礎信息,可以通過外部接口進行提取,并保持周期性刷新。
實例和集群的關系
數據庫實例是基礎的服務單元,按照實例角色可以分為單實例,主庫實例,從庫實例和級聯實例。
集群類型分為高可用集群,分布式集群(分庫分表),分布式集群(NewSQL體系)
高可用集群:多個主從實例,如一主一從或者一主多從
分布式集群(分庫分表):多個數據庫實例(通常一組主從實例為一個高可用集群)和少量數據庫中間件(通常1~3個做負載均衡)
分布式集群(NewSQL體系):按照存儲計算分離模式,有計算節點,存儲節點和配置管理節點,基于分布式協議實現分布式存儲管理
同時,集群維度和實例維度會有明顯差異的運維管理流程,從長遠來看,以集群形式交付和以實例形式交付是根據業務需求來共同決定,會長期共存。
綜上,集群和實例的含義有一些交叉,但是又有明顯的區別,按照規范程度來說,實例應該盡可能以高可用集群的基礎架構形式出現,同時按照數據存儲水平擴展需要可重構成分布式集群(分庫分表)架構,同時因為現狀和使用的差異,會存在單實例,普通的主從等環境。
所以元數據的維度有實例和集群的明顯差異,但是在元數據設計中卻需要把兩者有效結合起來,元數據為和元數據分層的對應關系為:
元數據維度 |
元數據分層 |
接入層(信息緩存) |
|
實例 |
代理層拓撲層實例層 |
集群 |
|
主機 |
主機層 |
數據庫 |
數據庫層 |
業務 |
業務層 |
本文轉載自微信公眾號「楊建榮的學習筆記」,可以通過以下二維碼關注。轉載本文請聯系楊建榮的學習筆記公眾號。