亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

TiPrometheus:基于 TiDB 的 TSDB | TiDB Hackathon 2018

sourcenode / 2942人閱讀

摘要:根據和查出所需的。因菜哥的一個導致,然后開始了漫長的,一共歷時個小時特別說明,我們組叫菜哥和他的朋友們。

本文作者是菜哥和他的朋友們隊的于暢同學,他們的項目 TiPrometheus 已經被 Prometheus adapter 合并。該項目分兩個小項目,分別解決了時序數據的存儲與計算問題。存儲主要兼容 Prometheus 語法和數據格式,實現了精確查詢、模糊查詢,完全兼容現有語法。所有數據僅存在 TiKV 中。計算主要通過 TiKV 調用 Lua 實現,通過 Lua 動態(tài)擴展實現數據計算的功能。
項目簡介

既然你關注了 TiDB, 想必你一定是個關注 Infrastructure 的硬漢(妹)子。監(jiān)控作為 Infra 不可或缺的一環(huán),其核心便是 TSDB(time series database) 。

TSDB 是一種以時間為主要索引的數據庫,主要用來存儲大量以時間為序列的指標數據,數據結構也比較簡單,通常包括特征信息,指標數據和 timestamp。常見的 TSDB 包括 InfluxDB, OpenTSDB, Prometheus。

而 Prometheus 是一整套監(jiān)控系統(tǒng),時序數據庫是它的存儲部分,下面這張架構圖來自于 Prometheus 官方,簡單概括了其架構和生態(tài)的組成。

Prometheus 還支持一個圖上沒有體現的功能 Remote Storage,可以進行遠程的讀寫,對查詢是透明的。這個功能主要是用來做長存儲。我們的項目就是實現了一個基于 TiKV 的 TSDB 來做 Prometheus 的 Remote Storage。

核心實現

Prometheus 記錄的數據結構分為兩部分 label, samples。label 記錄了一些特征信息。samples 包含了指標數據和 timestamp。

"labels": [{
    "job":        "node",
    "instance":   "123.123.1.211:9090",
}]
"samples":[{
    "timestamp": 1473305798
    "value": 0.9
}]

label 和時間范圍結合,可以查詢到需要的 value。

為了查詢這些記錄,我們需要構建兩種索引 label index 和 time index,并以特殊的 key 存儲 value。

label index

每對 label 為會以 index:label:# 為key,labelID 為 value 存入。新的記錄會追加到 value 后面。這是一種搜索中常用的倒排索引。

time index

每個 sample 項會以 index:timeseries:: 為 key,timestamp 為 value。splitTime為時間切片的起始點。新的 timestamp 會追加到 value 后面。

doc 存儲

我們將每一條 samples 記錄以 timeseries:doc:: 為 key 存入 TiKV,其中 labelID 是 label 全文的散列值。

下面做一個梳理

寫入過程

生成 labelID

構建 label index,index:label:# "labelID,labelID"

構建 time index,index:timeseries:: "ts,ts"

寫入時序數據,timeseries:doc:: "value"

查詢過程

根據倒排索引查出 labelID 的集合,多對 label 的查詢會對 labelID 集合求交集。

根據 labelID 和時間范圍內的時間分片查詢包含的 timestamp。

根據 labelID 和 timestamp 查出所需的 value。

扯完這些沒用的我們來聊些正經的。
我們?yōu)槭裁匆鲞@樣一個項目

在 2018 年下半年,PingCAP 組織的 Hackathon,當時作為萌新即將參加比賽,想著一定要文體兩開花,弘揚開源文化。

萌生了四個想法:

TiKV TSDB

Machine Learning on TiSpark

魔改 TiKV + Lua 做成 mapreduce

geo 全文檢索

核心想法

能做出來,符合參賽要求。

確實能解決生產問題而不是一個比賽項目。

摸了摸頭發(fā),覺得 ML on TiSpark 太硬核,根本做不完。

TiHaoop 也太硬核,也做不完。

geo 沒在廠里的生產中遇到什么問題。

最后輾轉反側思考一番,拍腦袋決定雙線操作,做基于 TiKV 的 TSDB 和 TiKV + Lua,完成時序檢索功能的同時,增加更豐富的算子(比賽前兩天才想好做什么)。

比賽過程 周五

原計劃,提前看看 rust,作為 rust 萌新。

于是前一天和同事借了本 rust 書,準備一天速成 rust。

后來發(fā)現還是看電視劇更管用。

Day1(周六)

周六參加比賽的時候,原以為會有個很長的開場致辭,所以決定 10 點再去。

到了現場,發(fā)現大家已經開始擼代碼了???

整體過程還算順利,但其中也遇到了一些問題。

Prometheus 的依賴和 TiKV 的一些依賴不兼容,于是 fork 一份 Prometheus 依賴,野路子改兩行,兼容了。

下午 5 點的時候,時序基本實現了,但聯(lián)調發(fā)現有數據讀寫不一致的情況。因菜哥的一個 bug 導致,然后開始了漫長的 debug,一共歷時 5 個小時(特別說明,我們組叫菜哥和他的朋友們)。

晚 10 點,準備回家了,不準備再 debug 了,一個 bug 查了 5 個小時。作為娛樂隊,熬夜寫代碼是不可能。

各回各家,各找各媽。

Day2(周日)

開始漫長的半天精通 Lua 虛擬機 + rust。

也遇到了一些問題,比如為什么 TiKV 編譯這么慢???一天只有 24 次編譯機會???

下午 2 點,作為第一個講的團隊,我們及時生成了一個 PPT ,畢竟 PPT 工程師的基礎還在。

一周后的周一

之前寫的渣代碼,簡單寫了個 README。抱著嘗試的心態(tài),給 Prometheus adapter 提了個 PR。

然后,居然被合進去了!?。?/strong>

一下午寫的代碼居然被合進去了?。?!

成果

徹底打通了 TiKV 和 Prometheus。

為 TiKV 的時序存儲和計算提供了一個思路(之前做過 TiDB 存儲時序數據)。

為 Prometheus 的長存儲提供了一個還算好用的方案(M3 其實還可以,Thanos 是分片機制,不能算真正意義的分布式存儲)。

已在公司生產環(huán)境試用,需要經過大數據量的測試,如果沒問題計劃替代現有方案。

感悟

參加 Hackathon,和周末加兩天班沒有太大的區(qū)別。

最先開始來,只是想混個獎品,比如說書包。去年參加 DevCon 給的布袋用了一年,還沒壞,今年準備再領一個。

見到了很多年齡比我們小,但技術又還不錯的小伙伴,比如蘭海他們組,udf 那個組。也見到了一些年齡稍長的參賽者。

他們的存在,讓我們在充滿雜事的日常工作中又有了繼續(xù)奮斗的動力。

似乎,當時選擇這個行業(yè)沒有錯,而不僅僅是一份工作。

Just for fun。

感謝

感謝唐劉老師和申礫老師的指導。

感謝 PingCAP 舉辦了這場大型網友見面活動,收獲頗豐。

項目地址: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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/17870.html

相關文章

  • TBSSQL 那些事 | TiDB Hackathon 2018 優(yōu)秀項目分享

    摘要:當我們正準備做前期調研和設計的時候,主辦方把唐長老拉去做現場導師,參賽規(guī)則規(guī)定導師不能下場比賽,囧,于是就這樣被被動放了鴿子。川總早早來到現場。 本文作者是來自 TiBoys 隊的崔秋同學,他們的項目 TBSSQL 在 TiDB Hackathon 2018 中獲得了一等獎。TiDB Batch and Streaming SQL(簡稱 TBSSQL)擴展了 TiDB 的 SQL 引擎...

    KnewOne 評論0 收藏0
  • TiDB Lab 誕生記 | TiDB Hackathon 優(yōu)秀項目分享

    摘要:本文由紅鳳凰粉鳳凰粉紅鳳凰隊的成員主筆,他們的項目在本屆中獲得了二等獎。用戶在平臺上進行第一章部署的學習,了解到可以通過進行部署。收到事件后,更新。由于位置是由屬性給出的,因此為其加上,即可實 本文由紅鳳凰粉鳳凰粉紅鳳凰隊的成員主筆,他們的項目 TiDB Lab?在本屆 TiDB Hackathon 2018 中獲得了二等獎。TiDB Lab 為 TiDB 培訓體系增加了一個可以動態(tài)觀...

    asoren 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<