TiPrometheus:TiDBベースTSDB|TiDB Hackathon 2018優秀プロジェクト共有
5037 ワード
著者は菜兄と彼の友达のチームの于暢さんで、彼らのプロジェクトTiPrometheusはすでにPrometheus adapterに合併されています.このプロジェクトは2つの小さなプロジェクトに分けられ,タイミングデータの格納と計算の問題をそれぞれ解決した.ストレージは主にPrometheus構文とデータフォーマットに互換性があり、正確なクエリー、あいまいなクエリーを実現し、既存の構文と完全に互換性があります.すべてのデータはTiKVにのみ存在する.計算は主にTiKV呼び出しLuaにより実現され,Lua動的拡張によりデータ計算の機能が実現される.
プロジェクトの概要
TiDBに注目している以上、Infrastructureに注目している硬骨漢(妹)子に違いない.モニタリングはInfraの不可欠な一環として、その核心はTSDB(time series database)である.
TSDBは時間を主なインデックスとするデータベースで、主に時間をシーケンスとする指標データを大量に格納するために使用され、データ構造も比較的簡単で、通常は特徴情報、指標データ、timestampを含む.一般的なTSDBには、InfluxDB、OpenTSDB、Prometheusがあります.
Prometheusは一連の監視システムであり、タイミングデータベースはその記憶部分であり、以下のアーキテクチャ図はPrometheusの公式から来ており、そのアーキテクチャと生態の構成を簡単に要約している.
Prometheusはまた、リモートの読み書きが可能で、クエリーに対して透明な機能である図に現れていないRemote Storageもサポートしています.この機能は主に長いストレージに使われています.私たちのプロジェクトはTiKVベースのTSDBを実現してPrometheusのRemote Storageを作りました.
コア実装
Prometheusが記録したデータ構造はlabel,samplesの2つの部分に分かれている.Labelはいくつかの特徴情報を記録した.samplesには指標データとtimestampが含まれています.
Labelと時間範囲を組み合わせると、必要なvalueをクエリーできます.
これらのレコードをクエリーするには、2つのインデックスlabel indexとtime indexを構築し、valueを特殊なkeyで格納する必要があります.
label index
各ペアのlabelは
time index
各sample項目は
docストレージ
各samplesレコードは
次に整理します
書き込みプロセス labelID を生成する. label index, を構築構築time index, 書き込みタイミングデータ、 クエリー・プロシージャ逆インデックスに基づいてlabelIDの集合を検出し、複数のlabelのクエリはlabelIDの集合に対して交差を求める. は、labelIDおよび時間範囲内のタイムスライスクエリに含まれるtimestampに基づいている. は、labelIDおよびtimestampに基づいて必要なvalueを検出する.
これらの無駄な話をし終わったら、まじめな話をしましょう.
なぜこんなプロジェクトを?
2018年下半期、PingCAPが組織したHackathonは、当時萌新として試合に出場することになり、必ず文体両開花を考え、開源文化を発揚した.
4つのアイデアが芽生えました TiKV TSDB Machine Learning on TiSpark 魔改TiKV+Lua做mapreduce geo全文検索 核心的な考え方.ができて、参加の要求に合います. は確かに試合ではなく生産問題を解決することができます.
髪を触ると、ML on TiSparkは硬すぎて、全然できないと思います.
TiHaoopも硬すぎて、やりきれない.
geoは工場での生産で何の問題もなかった.
最後に考え直し、頭をたたいて二線操作を決め、TiKVベースのTSDBとTiKV+Luaを作り、タイミング検索機能を完成させるとともに、より豊かな演算子を増やす(試合前の2日間は何をしたいのか).
試合の過程.
金曜日
予定では、事前にrustを見て、rustとして萌えます.
そこで前日に同僚とrustの本を借りて、一日でrustになる準備をしました.
その後、ドラマを見たほうが役に立つことに気づいた.
Day 1(土)
土曜日の試合に参加した時、長いオープニング挨拶があると思っていたので、10時にまた行くことにしました.
现场に着いて、みんながすでにコードをかき回し始めたことに気づきました???
全体の過程は順調だったが、その中にもいくつかの問題があった.
Prometheusの依存とTiKVのいくつかの依存は互換性がなくて、そこでforkはPrometheusの依存を1部あげて、野道は2行変えて、互換性があります.
午後5時にはほぼタイミングが実現したが,連調ではデータの読み書きが一致しないことが分かった.菜兄の1つのバグによって、それから長いdebugが始まり、全部で5時間かかりました(特に、私たちのグループは菜兄と彼の友达を呼んでいます).
夜10時、家に帰るつもりで、もうdebugをするつもりはありません.1つのbugを5時間調べました.娯楽チームとして、徹夜でコードを書くことは不可能です.
それぞれの家に帰って、それぞれのお母さんを探します.
Day 2(日)
長い半日Lua仮想マシン+rustに精通し始めました.
なぜTiKVのコンパイルがこんなに遅いのかという問題もありました??1日に24回しかコンパイルする機会がありません???
午後2時、最初のチームとして、私たちはタイムリーにPPTを生成しました.結局、PPTエンジニアの基礎はまだあります.
1週間後の月曜日
前に書いたクズコードは、簡単にREADMEを書いた.試してみる気持ちで、Prometheus adapterにPRをしました.
そして、意外にも中に入れられた!!!
午后に书いたコードが闭じ込められたなんて!!!
成果はTiKVとPrometheusを徹底的に貫通した. は、TiKVのタイミング記憶および計算のためのアイデアを提供する(前にTiDBにタイミングデータを記憶したことがある). Prometheusのロングストレージには、まだ使いやすいスキームが提供されています(M 3は実際にはまあまあですが、Thanosはスライスメカニズムであり、本当の意味の分散ストレージとは言えません). はすでに会社の生産環境で試用されており、既存のシナリオに代わる計画がなければ、ビッグデータ量のテストが必要です.
悟る
Hackathonに参加するのは、週末に2日間のクラスを追加するのとあまり違いません.
最初から来たのは、賞品を混ぜたいだけです.例えば、かばんです.去年DevConからもらった布袋に参加して1年使ったが、まだ壊れていないので、今年はもう一つもらうつもりだ.
私たちより年下ですが、技術的にもいい仲間をたくさん見ました.例えば、蘭海たちのグループ、udfのグループです.少し年上の参加者も見られた.
彼らの存在は、雑用に満ちた日常の仕事の中で奮闘し続ける原動力をもたらした.
当時、この業界を選んだのは間違いなく、仕事だけではなかったようだ.
Just for fun.
に感謝
唐劉先生と申礫先生の指導に感謝します.
PingCAPがこの大規模なネットユーザーに会うイベントを開催したことに感謝し、収穫が豊富です.
プロジェクトアドレス:github.com/bragfoo/Tip…(コード比較スラグ、考え方参考)
広告を打つ:
菜兄と彼の友达が翻訳した本:「Go言語同時の道」はすでに京東、淘宝に上陸した.
とても素敵なGo言語の本で、検索して購入できます.
参考資料: fabxc.org/tsdb/ docs.influxdata.com/influxdb/v1… github.com/prometheus/…
プロジェクトの概要
TiDBに注目している以上、Infrastructureに注目している硬骨漢(妹)子に違いない.モニタリングはInfraの不可欠な一環として、その核心はTSDB(time series database)である.
TSDBは時間を主なインデックスとするデータベースで、主に時間をシーケンスとする指標データを大量に格納するために使用され、データ構造も比較的簡単で、通常は特徴情報、指標データ、timestampを含む.一般的なTSDBには、InfluxDB、OpenTSDB、Prometheusがあります.
Prometheusは一連の監視システムであり、タイミングデータベースはその記憶部分であり、以下のアーキテクチャ図はPrometheusの公式から来ており、そのアーキテクチャと生態の構成を簡単に要約している.
Prometheusはまた、リモートの読み書きが可能で、クエリーに対して透明な機能である図に現れていないRemote Storageもサポートしています.この機能は主に長いストレージに使われています.私たちのプロジェクトはTiKVベースのTSDBを実現してPrometheusのRemote Storageを作りました.
コア実装
Prometheusが記録したデータ構造はlabel,samplesの2つの部分に分かれている.Labelはいくつかの特徴情報を記録した.samplesには指標データとtimestampが含まれています.
"labels": [{
"job": "node",
"instance": "123.123.1.211:9090",
}]
"samples":[{
"timestamp": 1473305798
"value": 0.9
}]
Labelと時間範囲を組み合わせると、必要なvalueをクエリーできます.
これらのレコードをクエリーするには、2つのインデックスlabel indexとtime indexを構築し、valueを特殊なkeyで格納する必要があります.
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全文のハッシュ値である.次に整理します
書き込みプロセス
index:label:# "labelID,labelID"
index:timeseries:: "ts,ts"
timeseries:doc:: "value"
これらの無駄な話をし終わったら、まじめな話をしましょう.
なぜこんなプロジェクトを?
2018年下半期、PingCAPが組織したHackathonは、当時萌新として試合に出場することになり、必ず文体両開花を考え、開源文化を発揚した.
4つのアイデアが芽生えました
髪を触ると、ML on TiSparkは硬すぎて、全然できないと思います.
TiHaoopも硬すぎて、やりきれない.
geoは工場での生産で何の問題もなかった.
最後に考え直し、頭をたたいて二線操作を決め、TiKVベースのTSDBとTiKV+Luaを作り、タイミング検索機能を完成させるとともに、より豊かな演算子を増やす(試合前の2日間は何をしたいのか).
試合の過程.
金曜日
予定では、事前にrustを見て、rustとして萌えます.
そこで前日に同僚とrustの本を借りて、一日でrustになる準備をしました.
その後、ドラマを見たほうが役に立つことに気づいた.
Day 1(土)
土曜日の試合に参加した時、長いオープニング挨拶があると思っていたので、10時にまた行くことにしました.
现场に着いて、みんながすでにコードをかき回し始めたことに気づきました???
全体の過程は順調だったが、その中にもいくつかの問題があった.
Prometheusの依存とTiKVのいくつかの依存は互換性がなくて、そこでforkはPrometheusの依存を1部あげて、野道は2行変えて、互換性があります.
午後5時にはほぼタイミングが実現したが,連調ではデータの読み書きが一致しないことが分かった.菜兄の1つのバグによって、それから長いdebugが始まり、全部で5時間かかりました(特に、私たちのグループは菜兄と彼の友达を呼んでいます).
夜10時、家に帰るつもりで、もうdebugをするつもりはありません.1つのbugを5時間調べました.娯楽チームとして、徹夜でコードを書くことは不可能です.
それぞれの家に帰って、それぞれのお母さんを探します.
Day 2(日)
長い半日Lua仮想マシン+rustに精通し始めました.
なぜTiKVのコンパイルがこんなに遅いのかという問題もありました??1日に24回しかコンパイルする機会がありません???
午後2時、最初のチームとして、私たちはタイムリーにPPTを生成しました.結局、PPTエンジニアの基礎はまだあります.
1週間後の月曜日
前に書いたクズコードは、簡単にREADMEを書いた.試してみる気持ちで、Prometheus adapterにPRをしました.
そして、意外にも中に入れられた!!!
午后に书いたコードが闭じ込められたなんて!!!
成果
悟る
Hackathonに参加するのは、週末に2日間のクラスを追加するのとあまり違いません.
最初から来たのは、賞品を混ぜたいだけです.例えば、かばんです.去年DevConからもらった布袋に参加して1年使ったが、まだ壊れていないので、今年はもう一つもらうつもりだ.
私たちより年下ですが、技術的にもいい仲間をたくさん見ました.例えば、蘭海たちのグループ、udfのグループです.少し年上の参加者も見られた.
彼らの存在は、雑用に満ちた日常の仕事の中で奮闘し続ける原動力をもたらした.
当時、この業界を選んだのは間違いなく、仕事だけではなかったようだ.
Just for fun.
に感謝
唐劉先生と申礫先生の指導に感謝します.
PingCAPがこの大規模なネットユーザーに会うイベントを開催したことに感謝し、収穫が豊富です.
プロジェクトアドレス:github.com/bragfoo/Tip…(コード比較スラグ、考え方参考)
広告を打つ:
菜兄と彼の友达が翻訳した本:「Go言語同時の道」はすでに京東、淘宝に上陸した.
とても素敵なGo言語の本で、検索して購入できます.
参考資料: