摘要:根據(jù)和查出所需的。因菜哥的一個導(dǎo)致,然后開始了漫長的,一共歷時個小時特別說明,我們組叫菜哥和他的朋友們。
本文作者是菜哥和他的朋友們隊(duì)的于暢同學(xué),他們的項(xiàng)目 TiPrometheus 已經(jīng)被 Prometheus adapter 合并。該項(xiàng)目分兩個小項(xiàng)目,分別解決了時序數(shù)據(jù)的存儲與計(jì)算問題。存儲主要兼容 Prometheus 語法和數(shù)據(jù)格式,實(shí)現(xiàn)了精確查詢、模糊查詢,完全兼容現(xiàn)有語法。所有數(shù)據(jù)僅存在 TiKV 中。計(jì)算主要通過 TiKV 調(diào)用 Lua 實(shí)現(xiàn),通過 Lua 動態(tài)擴(kuò)展實(shí)現(xiàn)數(shù)據(jù)計(jì)算的功能。項(xiàng)目簡介
既然你關(guān)注了 TiDB, 想必你一定是個關(guān)注 Infrastructure 的硬漢(妹)子。監(jiān)控作為 Infra 不可或缺的一環(huán),其核心便是 TSDB(time series database) 。
TSDB 是一種以時間為主要索引的數(shù)據(jù)庫,主要用來存儲大量以時間為序列的指標(biāo)數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)也比較簡單,通常包括特征信息,指標(biāo)數(shù)據(jù)和 timestamp。常見的 TSDB 包括 InfluxDB, OpenTSDB, Prometheus。
而 Prometheus 是一整套監(jiān)控系統(tǒng),時序數(shù)據(jù)庫是它的存儲部分,下面這張架構(gòu)圖來自于 Prometheus 官方,簡單概括了其架構(gòu)和生態(tài)的組成。
Prometheus 還支持一個圖上沒有體現(xiàn)的功能 Remote Storage,可以進(jìn)行遠(yuǎn)程的讀寫,對查詢是透明的。這個功能主要是用來做長存儲。我們的項(xiàng)目就是實(shí)現(xiàn)了一個基于 TiKV 的 TSDB 來做 Prometheus 的 Remote Storage。
核心實(shí)現(xiàn)Prometheus 記錄的數(shù)據(jù)結(jié)構(gòu)分為兩部分 label, samples。label 記錄了一些特征信息。samples 包含了指標(biāo)數(shù)據(jù)和 timestamp。
"labels": [{ "job": "node", "instance": "123.123.1.211:9090", }] "samples":[{ "timestamp": 1473305798 "value": 0.9 }]
label 和時間范圍結(jié)合,可以查詢到需要的 value。
為了查詢這些記錄,我們需要構(gòu)建兩種索引 label index 和 time index,并以特殊的 key 存儲 value。
label index每對 label 為會以 index:label:
每個 sample 項(xiàng)會以 index:timeseries:
我們將每一條 samples 記錄以 timeseries:doc:
下面做一個梳理
寫入過程生成 labelID
構(gòu)建 label index,index:label:
構(gòu)建 time index,index:timeseries:
寫入時序數(shù)據(jù),timeseries:doc:
根據(jù)倒排索引查出 labelID 的集合,多對 label 的查詢會對 labelID 集合求交集。
根據(jù) labelID 和時間范圍內(nèi)的時間分片查詢包含的 timestamp。
根據(jù) labelID 和 timestamp 查出所需的 value。
扯完這些沒用的我們來聊些正經(jīng)的。我們?yōu)槭裁匆鲞@樣一個項(xiàng)目
在 2018 年下半年,PingCAP 組織的 Hackathon,當(dāng)時作為萌新即將參加比賽,想著一定要文體兩開花,弘揚(yáng)開源文化。
萌生了四個想法:
TiKV TSDB
Machine Learning on TiSpark
魔改 TiKV + Lua 做成 mapreduce
geo 全文檢索
核心想法能做出來,符合參賽要求。
確實(shí)能解決生產(chǎn)問題而不是一個比賽項(xiàng)目。
摸了摸頭發(fā),覺得 ML on TiSpark 太硬核,根本做不完。
TiHaoop 也太硬核,也做不完。
geo 沒在廠里的生產(chǎn)中遇到什么問題。
最后輾轉(zhuǎn)反側(cè)思考一番,拍腦袋決定雙線操作,做基于 TiKV 的 TSDB 和 TiKV + Lua,完成時序檢索功能的同時,增加更豐富的算子(比賽前兩天才想好做什么)。
比賽過程 周五原計(jì)劃,提前看看 rust,作為 rust 萌新。
于是前一天和同事借了本 rust 書,準(zhǔn)備一天速成 rust。
后來發(fā)現(xiàn)還是看電視劇更管用。
Day1(周六)周六參加比賽的時候,原以為會有個很長的開場致辭,所以決定 10 點(diǎn)再去。
到了現(xiàn)場,發(fā)現(xiàn)大家已經(jīng)開始擼代碼了???
整體過程還算順利,但其中也遇到了一些問題。
Prometheus 的依賴和 TiKV 的一些依賴不兼容,于是 fork 一份 Prometheus 依賴,野路子改兩行,兼容了。
下午 5 點(diǎn)的時候,時序基本實(shí)現(xiàn)了,但聯(lián)調(diào)發(fā)現(xiàn)有數(shù)據(jù)讀寫不一致的情況。因菜哥的一個 bug 導(dǎo)致,然后開始了漫長的 debug,一共歷時 5 個小時(特別說明,我們組叫菜哥和他的朋友們)。
晚 10 點(diǎn),準(zhǔn)備回家了,不準(zhǔn)備再 debug 了,一個 bug 查了 5 個小時。作為娛樂隊(duì),熬夜寫代碼是不可能。
各回各家,各找各媽。
Day2(周日)開始漫長的半天精通 Lua 虛擬機(jī) + rust。
也遇到了一些問題,比如為什么 TiKV 編譯這么慢???一天只有 24 次編譯機(jī)會???
下午 2 點(diǎn),作為第一個講的團(tuán)隊(duì),我們及時生成了一個 PPT ,畢竟 PPT 工程師的基礎(chǔ)還在。
一周后的周一之前寫的渣代碼,簡單寫了個 README。抱著嘗試的心態(tài),給 Prometheus adapter 提了個 PR。
然后,居然被合進(jìn)去了!!!
一下午寫的代碼居然被合進(jìn)去了!!!
成果徹底打通了 TiKV 和 Prometheus。
為 TiKV 的時序存儲和計(jì)算提供了一個思路(之前做過 TiDB 存儲時序數(shù)據(jù))。
為 Prometheus 的長存儲提供了一個還算好用的方案(M3 其實(shí)還可以,Thanos 是分片機(jī)制,不能算真正意義的分布式存儲)。
已在公司生產(chǎn)環(huán)境試用,需要經(jīng)過大數(shù)據(jù)量的測試,如果沒問題計(jì)劃替代現(xiàn)有方案。
感悟參加 Hackathon,和周末加兩天班沒有太大的區(qū)別。
最先開始來,只是想混個獎品,比如說書包。去年參加 DevCon 給的布袋用了一年,還沒壞,今年準(zhǔn)備再領(lǐng)一個。
見到了很多年齡比我們小,但技術(shù)又還不錯的小伙伴,比如蘭海他們組,udf 那個組。也見到了一些年齡稍長的參賽者。
他們的存在,讓我們在充滿雜事的日常工作中又有了繼續(xù)奮斗的動力。
似乎,當(dāng)時選擇這個行業(yè)沒有錯,而不僅僅是一份工作。
Just for fun。
感謝感謝唐劉老師和申礫老師的指導(dǎo)。
感謝 PingCAP 舉辦了這場大型網(wǎng)友見面活動,收獲頗豐。
項(xiàng)目地址:https://github.com/bragfoo/TiPrometheus (代碼比較渣,思路供參考)
打個廣告:由菜哥和他的朋友們翻譯的書:《Go 語言并發(fā)之道》已登陸京東、淘寶。
非常棒一本 Go 語言書籍,搜索即可購買。
參考資料:
https://fabxc.org/tsdb/
https://docs.influxdata.com/influxdb/v1.7/concepts/storage_engine/
https://github.com/prometheus/prometheus/tree/release-1.8/storage
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/17870.html
摘要:當(dāng)我們正準(zhǔn)備做前期調(diào)研和設(shè)計(jì)的時候,主辦方把唐長老拉去做現(xiàn)場導(dǎo)師,參賽規(guī)則規(guī)定導(dǎo)師不能下場比賽,囧,于是就這樣被被動放了鴿子。川總早早來到現(xiàn)場。 本文作者是來自 TiBoys 隊(duì)的崔秋同學(xué),他們的項(xiàng)目 TBSSQL 在 TiDB Hackathon 2018 中獲得了一等獎。TiDB Batch and Streaming SQL(簡稱 TBSSQL)擴(kuò)展了 TiDB 的 SQL 引擎...
摘要:本文由紅鳳凰粉鳳凰粉紅鳳凰隊(duì)的成員主筆,他們的項(xiàng)目在本屆中獲得了二等獎。用戶在平臺上進(jìn)行第一章部署的學(xué)習(xí),了解到可以通過進(jìn)行部署。收到事件后,更新。由于位置是由屬性給出的,因此為其加上,即可實(shí) 本文由紅鳳凰粉鳳凰粉紅鳳凰隊(duì)的成員主筆,他們的項(xiàng)目 TiDB Lab?在本屆 TiDB Hackathon 2018 中獲得了二等獎。TiDB Lab 為 TiDB 培訓(xùn)體系增加了一個可以動態(tài)觀...
閱讀 3521·2023-04-25 14:57
閱讀 2568·2021-11-22 14:56
閱讀 2092·2021-09-29 09:45
閱讀 1775·2021-09-22 15:53
閱讀 3324·2021-08-25 09:41
閱讀 907·2019-08-29 15:22
閱讀 3298·2019-08-29 13:22
閱讀 3130·2019-08-29 13:08