域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過(guò)
(本文作者:觀測(cè)云資深系統(tǒng)開發(fā)工程師 熊豹)
2023 年 4 月 23 日,觀測(cè)云正式發(fā)布自研時(shí)序數(shù)據(jù)庫(kù) GuanceDB,并在當(dāng)天應(yīng)用到了觀測(cè)云所有 SaaS 節(jié)點(diǎn)的底座。此次升級(jí)性能提升的效果立竿見影,對(duì)比之前使用 InfluxDB 的環(huán)境資源占用大幅降低、查詢性能顯著提升,我們成功地吃上了自己的狗糧。
我們也深知 talk is cheap show me the benchmark 的道理,這里發(fā)布我們?cè)诮谕瓿傻?GuanceDB 性能壓測(cè)報(bào)告。
壓測(cè)方案說(shuō)明
本次測(cè)試的目標(biāo)是對(duì)比 GuanceDB、InfluxDB 和某知名開源時(shí)序數(shù)據(jù)庫(kù)(簡(jiǎn)稱 xxDB)在相同的寫入負(fù)載和查詢條件下的性能表現(xiàn)及資源占用情況。
關(guān)于測(cè)試工具:
我們對(duì)比 tsbs、prometheus-benchmark 兩種時(shí)序數(shù)據(jù)庫(kù)的壓測(cè)方案。
其中 prometheus-benchmark 構(gòu)造了更偏真實(shí)環(huán)境的持續(xù)寫入負(fù)載,指標(biāo)數(shù)值的變化也更真實(shí),所以我們主要參考 prometheus-benchmark 來(lái)構(gòu)造本次測(cè)試。
原 prometheus-benchmark 方案中使用了 vmagent 來(lái)抓取和寫入指標(biāo),但我們今天測(cè)試的 3 種數(shù)據(jù)庫(kù)對(duì) Prometheus 寫入?yún)f(xié)議支持力度不一,沒(méi)法一起比較。所以我們對(duì) vmagent 進(jìn)行了一些改造,讓其支持了 InfluxDB 的行寫入?yún)f(xié)議。
本次測(cè)試的最終方案如下:
1.部署的一個(gè)單機(jī)的 node-exporter ,其暴露宿主機(jī)的 1383 個(gè)真實(shí)指標(biāo)
2.部署 Nginx 反代并緩存 node-exporter 結(jié)果 1s,降低頻繁請(qǐng)求的壓力
3.調(diào)整 agent 的抓取配置,模擬生成不同的 node-exporter 實(shí)例數(shù)以生成不同的寫入負(fù)載
4.agent 以相同的請(qǐng)求大小、頻率將數(shù)據(jù)同時(shí)以 influx 協(xié)議 http 接口寫入三種時(shí)序數(shù)據(jù)庫(kù)
軟件版本:
1.GuanceDB: v1.0.0
2.InfluxDB: v1.8.10
3.xxDB
主機(jī)配置:
1.壓測(cè)機(jī):1 臺(tái)阿里云 ecs.g7.16xlarge 云主機(jī):64 core,128 GB RAM
2.存儲(chǔ)集群:3 臺(tái)阿里云 ecs.g7.4xlarge 云主機(jī):16 core,64 GB RAM,200 GB PL1 類型 ESSD
部署方式:
因?yàn)?InfluxDB 的開源版本不支持集群模式,所以我們也將分兩組進(jìn)行測(cè)試。一組是 InfluxDB 與 GuanceDB、xxDB 的單機(jī)版本對(duì)比,另一組是 GuanceDB 與 xxDB 的集群模式進(jìn)行對(duì)比,集群模式都使用 3 個(gè)存儲(chǔ)節(jié)點(diǎn)。
參數(shù)優(yōu)化:
GuanceDB 對(duì)大部分場(chǎng)景都做了自動(dòng)調(diào)優(yōu),所以我們不用手動(dòng)調(diào)整配置。
InfluxDB 默認(rèn)對(duì)高基數(shù)場(chǎng)景做了一些保護(hù),我們調(diào)整 max-series-per-database = 0 放開了限制,cache-max-memory-size 增大到了 10g,并且開啟 tsi1 索引。
xxDB 我們也參考文檔進(jìn)行了針對(duì)性的調(diào)優(yōu)。
至此完成所有配置,開始測(cè)試。
寫入測(cè)試
● 單機(jī)組
本組測(cè)試進(jìn)行的測(cè)試輪次比較多,這里我們挑選某一輪展示詳細(xì)監(jiān)控截圖。
在此輪測(cè)試中,我們虛擬了 344 個(gè) node-exporter 實(shí)例,生成大約 50w 條活躍時(shí)間線,5s 抓取一次,時(shí)序點(diǎn)寫入 QPS 10w。
GuanceDB 資源開銷:CPU 占用率 2%,內(nèi)存占用約 3 GB。
InfluxDB 資源開銷:CPU 占用率 16%,內(nèi)存占用約 7.4 GB。
xxDB 資源開銷:CPU 占用率 61%,內(nèi)存占用 9 GB。
匯總結(jié)果表格如下:
完成了限定性能的測(cè)試場(chǎng)景后,我們很好奇要多大的壓力才能將各臺(tái)數(shù)據(jù)庫(kù)主機(jī)的資源打滿,尤其對(duì) GuanceDB,響應(yīng) 10w 寫入 QPS 僅僅花費(fèi)了 2% 的 CPU 開銷,它的性能上限在哪里?隨即我們開始加大 QPS,當(dāng)各臺(tái)主機(jī)的 CPU,內(nèi)存和磁盤若有一項(xiàng)被打滿時(shí),即被認(rèn)為到達(dá)瓶頸。
實(shí)際測(cè)試結(jié)果都是主機(jī)的 CPU 先被打滿,此時(shí)內(nèi)存占用和磁盤寫入帶寬都還有余量,所以我們就以 CPU 利用率為瓶頸指標(biāo)畫出以下對(duì)比圖:
在單機(jī)場(chǎng)景下,當(dāng) CPU 達(dá)到滿載時(shí),xxDB 的寫入 QPS 約 15w,InfluxDB 約 90w,GuanceDB 約 270w。本輪 GuanceDB 獲得第一,寫入性能是 InfluxDB 的 3 倍。也可以看到在 CPU 利用率超過(guò) 20% 后,性能不再呈線性增長(zhǎng),都有一定程度衰退。
● 集群組
我們按照之前的方法繼續(xù)測(cè)試 3 節(jié)點(diǎn)集群:
在集群場(chǎng)景下,仍然是 CPU 利用率先達(dá)到瓶頸。同樣在 CPU 滿載情況下,GuanceDB 此時(shí)的寫入 QPS 約為 860w,xxDB 約為 45w。
對(duì)比之前 GuanceDB 和 xxDB 的單機(jī)寫入性能測(cè)試,理想情況下 N 個(gè)節(jié)點(diǎn)的集群版的寫入性能應(yīng)該是單機(jī)版的 N 倍,呈線性增長(zhǎng),實(shí)測(cè) 3 節(jié)點(diǎn)集群符合性能預(yù)期。
查詢測(cè)試
查詢測(cè)試將混合單機(jī) InfluxDB、集群版 GuanceDB、集群版 xxDB 一起進(jìn)行。集群一般可以將數(shù)據(jù)和查詢分?jǐn)偛⒖梢栽诠?jié)點(diǎn)之間并行查詢,理論上這個(gè)測(cè)試方式對(duì) InfluxDB 不太公平,但條件受限,暫且這么設(shè)計(jì)。
我們虛擬 688 個(gè) node-exporter 實(shí)例,生成大約 100w 個(gè)活躍時(shí)間線,5s 抓取一次,時(shí)序點(diǎn)寫入 QPS 20w。在持續(xù)寫入 24 小時(shí)后,我們?cè)贉y(cè)試一些常見語(yǔ)句的查詢性能和對(duì)比存儲(chǔ)空間占用。
GuanceDB 同時(shí)支持 DQL 和 PromQL 兩種查詢語(yǔ)法。DQL 是觀測(cè)云自研的多模數(shù)據(jù)查詢語(yǔ)言,同時(shí)支持指標(biāo)、日志、對(duì)象等多種類型負(fù)載數(shù)據(jù)的查詢和分析,語(yǔ)法表達(dá)非常簡(jiǎn)潔。語(yǔ)法設(shè)計(jì)上跟 SQL 接近,但更加適應(yīng)時(shí)序分析場(chǎng)景,學(xué)習(xí)曲線平滑。
這里我們一共對(duì)比了四種查詢語(yǔ)法在相同語(yǔ)義的 1h、8h、24h 不同時(shí)間范圍下的響應(yīng)時(shí)間:
查詢 1 響應(yīng)時(shí)間:
注:圖示中 0ms 表示響應(yīng)時(shí)間不到 1ms。
查詢 2 響應(yīng)時(shí)間:
查詢 3 響應(yīng)時(shí)間:
注:圖示中 -1ms 表示請(qǐng)求響應(yīng)時(shí)間超過(guò)了 60s 不計(jì)數(shù)。
空間占用對(duì)比
在上述的查詢測(cè)試構(gòu)造的寫入壓力(活躍時(shí)間線 100w,時(shí)序點(diǎn)寫入 QPS 20w)下,運(yùn)行 24 小時(shí)后,我們對(duì)比存儲(chǔ)空間占用。
總結(jié)
經(jīng)過(guò)數(shù)輪的寫入和查詢性能測(cè)試,相信各位對(duì) GuanceDB 的綜合性能表現(xiàn)已經(jīng)有了比較清晰的認(rèn)識(shí)了。GuanceDB 對(duì)比 InfluxDB 寫入性能提升 3 倍,存儲(chǔ)空間占用減少 68%,查詢性能提升 30 倍以上。 GuanceDB 相比 xxDB 提升則更明顯,背后的原因是 xxDB 雖然明面上是支持了 Schemaless 數(shù)據(jù)的寫入,但是對(duì) Schemaless 的場(chǎng)景明顯優(yōu)化不足,所以表現(xiàn)欠佳。
GuanceDB 的優(yōu)異性能來(lái)自于我們構(gòu)建的高效的火山模型查詢引擎、SIMD 指令加速、對(duì) Schemaless 數(shù)據(jù)的最優(yōu)先支持等,也因?yàn)槲覀冋驹诹?VictoriaMetrics 的肩膀上。非常感謝 VictoriaMetrics 開源社區(qū)對(duì)我們的支持,我們將持續(xù)貢獻(xiàn)回報(bào)社區(qū),共同促進(jìn)可觀測(cè)領(lǐng)域技術(shù)的發(fā)展與進(jìn)步。
我們?cè)?5 月中下旬也將發(fā)布 GuanceDB 的單機(jī)版本,歡迎大家到時(shí)關(guān)注和測(cè)試。 如有同學(xué)對(duì) GuanceDB 感興趣,或有任何疑問(wèn),可以隨時(shí)站內(nèi)和我聯(lián)絡(luò),或者在觀測(cè)云社群里溝通。
申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!