蘋果做封面下載網(wǎng)站中央新聞直播今天
目錄
9 ?智能關鍵技術方案
智能關鍵技術一:自治運維系統(tǒng)
智能關鍵技術二:庫內(nèi)AI引擎
智能關鍵技術三:智能優(yōu)化器
10 ?驅動接口關鍵技術方案
GaussDB架構介紹(二)從數(shù)據(jù)持久化存取層(DataNode)關鍵技術方案、全局事務管理層(GTM)關鍵技術方案、集群管理層(CM)關鍵技術方案、OM運維管理關鍵技術方案等方面介紹了GaussDB架構,本篇將從智能關鍵技術方案、驅動接口關鍵技術方案繼續(xù)解讀GaussDB架構。
9 ?智能關鍵技術方案
智能關鍵技術一:自治運維系統(tǒng)
GaussDB 自治運維系統(tǒng)“DBMind”的整體系統(tǒng)框圖如下圖所示,包含四個維度:
數(shù)據(jù)采集層
數(shù)據(jù)采集層主要功能實現(xiàn)指標數(shù)據(jù)采集,采集頻率分為秒級采集和分鐘級采集。其中秒級采集包括操作系統(tǒng)資源信息采集和數(shù)據(jù)庫實例信息采集,例如操作系統(tǒng)層面CPU、內(nèi)存、IO讀寫、網(wǎng)絡資源信息采集,數(shù)據(jù)庫實例狀態(tài)、數(shù)據(jù)庫內(nèi)關鍵指標(內(nèi)存、連接數(shù)、TPS、QPS、讀寫頻率等);分鐘級采集包括審計日志采集、數(shù)據(jù)庫日志采集和全量SQL流水采集。
DBMind數(shù)據(jù)平臺提供Agent進程用于采集上述指標;若客戶系統(tǒng)配置普羅米修斯進行信息采集,DBMind提供openGauss-exporter,內(nèi)置數(shù)據(jù)庫多維度指標采集以及二次數(shù)據(jù)計算,實現(xiàn)與用戶既有普羅米修斯平臺對接。
數(shù)據(jù)庫采集端程序需要部署在同數(shù)據(jù)庫物理機節(jié)點,數(shù)據(jù)庫多節(jié)點集群環(huán)境中,每個物理節(jié)點部署一個Agent采集端(或者普羅米修斯采集端)。數(shù)據(jù)庫采集端程序通常占用資源很少,通過配置文件可以制定不同指標采集頻率,以免占用資源影響數(shù)據(jù)庫業(yè)務正常運行。
圖1 DBMind整體系統(tǒng)框架圖
-
數(shù)據(jù)計算層
數(shù)據(jù)計算層提供數(shù)據(jù)存儲、數(shù)據(jù)分析及元數(shù)據(jù)管理能力。其中數(shù)據(jù)存儲用于接收來自數(shù)據(jù)采集層發(fā)生來的數(shù)據(jù),存儲數(shù)據(jù)源可以是多種維度或者類型,包括普羅米修斯、時序數(shù)據(jù)庫(OpenTSDB)、MongoDB、SQLite等,DBMind內(nèi)置對接接口,AI模塊與存儲數(shù)據(jù)源的交互,獲取數(shù)據(jù)并進行處理。DBMind默認提供SQLite數(shù)據(jù)庫,方便普通開發(fā)者來使用AI自治功能;在企業(yè)業(yè)務中,存儲層設計要復雜的多,可以使用多個開源組件組合使用,例如普羅米修斯+時序數(shù)據(jù)庫,或者kafka+時序數(shù)據(jù)庫等多種方案。
若企業(yè)業(yè)務中,處理少量業(yè)務集群節(jié)點,可通過下面方案實現(xiàn):
圖2 小規(guī)模節(jié)點管控層方案
在圖2方案,使用nginx進行業(yè)務分流,mgrsrv服務對數(shù)據(jù)進行初步處理后,將數(shù)據(jù)寫入關系型數(shù)據(jù)庫?;诳煽啃钥紤],對于三個組件,分別加入備機進行可靠性保護。
若企業(yè)業(yè)務處理上萬業(yè)務節(jié)點的數(shù)據(jù),圖2方案無法滿足客戶業(yè)務訴求。故在方案設計時,需要引入分布式消息中間件、數(shù)據(jù)庫中間件(DDM),同時因為nginx掛載節(jié)點有上限,需要對mgrsvr進行分區(qū)管理。
圖3 大規(guī)模節(jié)點管控層方案
如圖3所示,consumer服務可以和mgrsvr部署在同一個節(jié)點上,mq集合代表分布式消息中間件,通??梢圆捎瞄_源軟件rocketmq或者rabbitmq,引入消息中間件目的是降低目標數(shù)據(jù)庫的壓力。DDM是華為云的數(shù)據(jù)庫中間件,若采用開源軟件,也可使用mycat或者dble等,可進行存儲大規(guī)模被采集的數(shù)據(jù)。在整體業(yè)務角度,縱向通過分層設計,橫向通過分區(qū)設計,保證全部業(yè)務可通過管控層完成數(shù)據(jù)處理。
在數(shù)據(jù)計算層除了時序存儲數(shù)據(jù)庫外,還可以設計其他存儲單元,例如算法模型庫和故障規(guī)則庫。其中算法模型庫存儲自治管理服務生成的AI模型,例如參數(shù)推薦訓練模型;在算法模型庫中,可以存儲傳統(tǒng)機器學習(例如監(jiān)督學習)模型、強化學習模型。故障規(guī)則庫是記錄數(shù)據(jù)庫常見故障案例,將這些案例通過拆解和分析,生成規(guī)則引擎。
自治服務層
自治服務層包含三個主要部分:SQL診斷和調優(yōu)、自治安全、數(shù)據(jù)庫智能運維。其中SQL診斷和調優(yōu)提供多種SQL治理和調優(yōu)能力,包括慢SQL發(fā)現(xiàn)、SQL表現(xiàn)評估、智能索引推薦、智能查詢重寫等服務。自治安全通過AI技術實現(xiàn)敏感信息發(fā)覺、SQL注入檢測和異常行為分析。數(shù)據(jù)庫智能運維功能實現(xiàn)在數(shù)據(jù)庫系統(tǒng)、OS系統(tǒng)和數(shù)據(jù)庫集群層面的運維和調優(yōu),其中數(shù)據(jù)庫系統(tǒng)服務包括數(shù)據(jù)庫參數(shù)智能推薦、智能巡檢、數(shù)據(jù)庫分布鍵推薦和智能業(yè)務調度;在操作系統(tǒng)層面,實現(xiàn)慢盤檢測和恢復、網(wǎng)絡丟包檢測;在數(shù)據(jù)庫集群層面,基于故障或者負載需求,提供自動擴縮容、異常節(jié)點修復服務。
監(jiān)控展示層
DBMind提供監(jiān)控展示層,通過WEB形式,方便用戶直觀感受運維管理帶來的遍歷。在展示界面方面,集成Grafana實現(xiàn)實施數(shù)據(jù)或指標的展示,同時AI趨勢預測,給出后續(xù)時段的數(shù)據(jù)走向。告警界面展示系統(tǒng)中可能存在的問題或故障,分為致命、嚴重、一般,界面中只顯示致命問題。
為方便用戶系統(tǒng)觀察集群狀態(tài),提供健康指數(shù)報告和詳細綜合報告。健康指數(shù)報告給出當前系統(tǒng)的健康評分等級,默認80分以上屬于運行健康狀況,小于60分則存在嚴重隱患,急需修復。綜合報告詳細描述系統(tǒng)各維度信息,包括集群狀態(tài)、負載運行情況、常見數(shù)據(jù)庫指標項信息。
智能關鍵技術二:庫內(nèi)AI引擎
GaussDB 庫內(nèi)AI引擎架構如下圖:
圖4 DB4AI架構圖
用戶接口層
在用戶接口層,實現(xiàn)SQL-like語法,提供Create Model、Predict等關鍵字,支持AI算法訓練和預測。當前支持的AI算法包括:GD(梯度下降法)、KMeans(聚類)、XGBoost、決策樹等。
查詢優(yōu)化層
查詢優(yōu)化層提供AI訓練執(zhí)行計劃和AI預測執(zhí)行計劃,該計劃依據(jù)內(nèi)部統(tǒng)計信息和AI算子調用關系,生成相應執(zhí)行計劃。可以把AI算子看做執(zhí)行器中的計算單元,例如Join、AGG等,AI算子執(zhí)行代價基于執(zhí)行邏輯、獲取的數(shù)據(jù)行數(shù)、算法復雜度共同決定。同時在執(zhí)行計劃生成后,可通過Explain語句查看詳細的執(zhí)行開銷,分析路徑選型的正確性。
AI底座和執(zhí)行層
在AI底座中,提供超參優(yōu)化能力,即用戶不指定超參數(shù)或者指定超參數(shù)的范圍,自動選擇適合的參數(shù),該功能極大提升用戶使用的效率,同時達到最佳的訓練性能。
在執(zhí)行器中,提供多種AI算子,例如GD算子可支持邏輯回歸、分類;KMeans算子支持聚類。在每個算子實現(xiàn)過程中,遵循執(zhí)行器算子實現(xiàn)邏輯,下層對接Scan算子,上次提供AI算子的訓練或推理結果。在訓練完成后,訓練模型將實時保存到系統(tǒng)表中,用戶可以查詢gs_model_warehouse系統(tǒng)表來獲取模型信息。
存儲層
在存儲層,DB4AI提供數(shù)據(jù)集管理功能,即用戶可以抽取某個表或多個表中的列信息,組成一個數(shù)據(jù)集,用于后續(xù)模型訓練。數(shù)據(jù)集管理功能類似git模式提供多版本管理,目的是保障訓練數(shù)據(jù)的一致性。同時在這過程中,可通過特征處理和數(shù)據(jù)清洗保障數(shù)據(jù)的可用性。
同時對已生成的模型進行管理,包括模型評估、定期模型驗證、模型導入、模型導出等能力,在驗證模型失效后,模型漂移功能可以進行模型刷新,保障模型可用。
異構計算層
DB4AI框架支持異構計算層,實現(xiàn)CPU和AI算力的統(tǒng)一調度,滿足數(shù)據(jù)庫語句執(zhí)行和AI訓練的完美結合。在實現(xiàn)方面,CPU算力,特指ARM及X86芯片,可用于基礎機器學習算子調用及并行計算執(zhí)行;AI算子,例如昇騰及GPU芯片,可用于重度分析算子(Join、AGG)及深度學習算子使用,加速大數(shù)據(jù)及多層網(wǎng)絡場景下計算需求。
智能關鍵技術三:智能優(yōu)化器
貝葉斯網(wǎng)絡模型原理
貝葉斯網(wǎng)絡是一種概率圖模型,拓撲結構通常為一個有向無環(huán)圖。貝葉斯網(wǎng)絡的優(yōu)勢在于能夠利用條件獨立假設對多變量數(shù)據(jù)進行建模,并且自適應變量之間的相關性,具體是指每個變量的概率分布只和與它直接連接的父親節(jié)點有關。使用這種方法能夠比基于簡單的獨立性假設的模型獲得更高的建模準確率,也能夠比完整的聯(lián)合分布建模獲得更高的執(zhí)行效率。在關系數(shù)據(jù)表中,每一列數(shù)據(jù)都可以成為一個變量,比如下表中包含A,B,C三列數(shù)據(jù):
表1
A | B | C |
A1 | B1 | C1 |
A1 | B1 | C1 |
A1 | B1 | C1 |
A2 | B1 | C1 |
A2 | B2 | C2 |
A2 | B2 | C2 |
分別使用基于獨立性假設的單列建模和基于條件獨立假設的貝葉斯網(wǎng)絡計算查詢 SELECT * FROM table WHERE A=A1 AND B=B1 AND C=C1的選擇率:
單列建模:P(A=A1, B=B1, C=C1)=P(A1)P(B1)P(C1)=0.5 * 0.67 * 0.67=0.22
貝葉斯網(wǎng)絡:P(A=A1, B=B1, C=C1)= P(A1)P(B1|A1)P(C1|B1)=0.5*1.0*1.0=0.5
可以看出貝葉斯網(wǎng)絡在列相關性強的場景下能夠更加準確地估計出多列查詢選擇率(和基數(shù))。
貝葉斯網(wǎng)絡結構搜索
貝葉斯網(wǎng)絡的拓撲結構決定于變量之間的互相關性,直觀上看,將互相關性強的變量進行連接并計算條件概率有助于提高分布建模準確性。假設有兩列數(shù)據(jù)A和B,互相關性定義如下:
針對例1中的數(shù)據(jù),可以計算出A和B列的互相關性:
在本功能中,對于P(a,b),P(a)和P(b)的計算通過使用哈希表統(tǒng)計獲得,首先計算單列統(tǒng)計頻率,然后計算兩列統(tǒng)計頻率,最后掃描兩列統(tǒng)計表并且通過訪問單列統(tǒng)計表獲得單列頻率,使用公式計算出相關性。最后計算總體相關性。
得到的臨時表ab_mutual_correlation結構如下所示:
表2
counta | countb | countab |
3 | 4 | 3 |
3 | 4 | 1 |
3 | 2 | 2 |
遍歷上述臨時表,對每一行求得互相關性,然后求和之后就是A和B列的整體相關性。
貝葉斯網(wǎng)絡對于每個節(jié)點父親節(jié)點的數(shù)量是沒有要求的,但是父親節(jié)點越多,條件概率建模的難度也越大,消耗的空間和時間代價也會相應變大。所以在本子系統(tǒng)中,我們只采用樹型的網(wǎng)絡拓撲結構。這種結構中每個節(jié)點只有一個父親節(jié)點,所以只需要保存本節(jié)點可以另一個父親節(jié)點的條件概率即可,示例如下:
圖5
在有了樹型限制之后,結構搜索空間就少了很多,現(xiàn)在的目標就是找到一顆總互相關性最大的生成樹,這里本系統(tǒng)采用chow-liu算法,也是一種加權最大生成樹算法,算法流程如下:
圖6 貝葉斯網(wǎng)絡結構搜索流程圖
根據(jù)搜索出的貝葉斯網(wǎng)絡結構,構造出包含所有邊的字符串,比如”a,b,a,c”或者”a,b,b,c”傳入貝葉斯網(wǎng)絡算子進行模型創(chuàng)建。
貝葉斯網(wǎng)絡訓練
圖7 貝葉斯網(wǎng)絡訓練流程圖
貝葉斯網(wǎng)絡訓練過程中,算子首先會遍歷一遍樣本數(shù)據(jù),獲得每列數(shù)據(jù)不同值統(tǒng)計;然后對于每列數(shù)據(jù),根據(jù)是否是連續(xù)數(shù)據(jù)類型進行數(shù)據(jù)分桶或者高頻值抽取以減小存儲和計算代價;對數(shù)據(jù)分桶采用等高分桶,盡量使每個桶內(nèi)的頻度是相似的,每個桶中范圍值下界被存儲在數(shù)據(jù)列表中,NULL值單獨作為一個值放在列表最后;連續(xù)值高頻值抽取會將頻度最高的K各元素放置在數(shù)據(jù)列表中,除此之外的其他元素都被表示為一個通配符號放在列表最后;為了減少查找匹配代價,字符串類型數(shù)據(jù)會存儲一個額外的哈希值;列表中每個元素表示結構如下所示:
typedef struct ValueInTuple {
Datum data;
Oid type;
bool isnull;
uint32_t hashval;
} ValueInTuple;
概率建模過程中,針對形如P(離散值|離散值)的條件概率使用概率表記錄每種值的概率;針對P(離散值|連續(xù)值),將連續(xù)值通過范圍分桶當做離散值處理;針對P(連續(xù)值|離散值),使用高斯分布對連續(xù)值分布進行建模;針對P(連續(xù)值|連續(xù)值),使用高斯分布對條件連續(xù)值進行離散化分桶處理,對目標連續(xù)值進行高斯分布建模。
訓練完成之后,將模型序列化成一個二進制字符串。
貝葉斯網(wǎng)絡模型推理
圖8 貝葉斯網(wǎng)絡推理流程圖
貝葉斯網(wǎng)絡從第一個位置開始獲得一個未訪問節(jié)點,如果該節(jié)點存在未訪問父親節(jié)點,那么就遞歸訪問父親節(jié)點;如果父親節(jié)點都已經(jīng)被訪問,那么利用條件獨立性假設,利用概率表或者是高斯函數(shù)局部計算出當前節(jié)點的條件概率并且和父親節(jié)點的概率相乘作為聯(lián)合概率。然后判斷當前節(jié)點是否是葉子節(jié)點,如果是葉子節(jié)點則將聯(lián)合概率和選擇率相乘,否則繼續(xù)尋找下一個未被訪問過的節(jié)點。最后返回選擇率。
模型參數(shù)緩存策略
在基數(shù)估計的時候需要獲得相應的模型參數(shù),這個過程需要從磁盤讀取以及反序列化兩種操作,涉及到磁盤訪問以及內(nèi)存申請操作,效率較低,所以在模型數(shù)量不多的情況下可以利用全局共享緩存將其存在內(nèi)存中,下次訪問效率就會變高,但是在模型數(shù)量變多之后就需要緩存替換策略以保證內(nèi)存使用是可控的。本子系統(tǒng)采用的是異步批量替換策略,在模型訪問親和性高的場景下,當前一段時間所需要的模型都放置在內(nèi)存中,不會帶來額外的性能損失,訪問申請的也都是共享鎖支持高并發(fā);當負載偏移之后,新的模型會被訪問,從磁盤中被加載到內(nèi)存,內(nèi)存中的數(shù)量就會超過閾值,這種情況下系統(tǒng)按照每個模型的最近訪問時間歸一化之后的概率選擇1/3的舊模型替換出內(nèi)存。這種一次性替換多個模型的方法可以避免每次讀操作都要申請互斥鎖維護鏈表并且降低替換操作觸發(fā)的次數(shù)。并發(fā)analyze場景通過互斥鎖進行共享緩存訪問控制。
10 ?驅動接口關鍵技術方案
接口驅動兼容開源openGauss, 支持JDBC、ODBC、Python、GO等主流數(shù)據(jù)庫驅動接口,適用于Java/C/C++/python/go 應用程序開發(fā)者。對于高級開發(fā)者而言,亦可采用libpq動態(tài)庫接口的方式,對數(shù)據(jù)庫進行接入訪問。
以上內(nèi)容為智能關鍵技術方案、驅動接口關鍵技術方案的相關內(nèi)容,下篇圖文將接著分享GaussDB云原生架構、關鍵技術方案的精彩內(nèi)容,敬請期待!