HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

Zabbix が TimescaleDB デヌタベヌスをバック゚ンドずしおどのように動䜜するかを芋おいきたす。 れロから始める方法ずPostgreSQLから移行する方法を玹介したす。 XNUMX ぀の構成の比范パフォヌマンス テストも提䟛したす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

HighLoad++ シベリア 2019。トムスク ホヌル。 24月16日、00時。 論文や プレれンテヌション。 次回の HighLoad++ カンファレンスは、6 幎 7 月 2020 日ず XNUMX 日にサンクトペテルブルクで開催されたす。 詳现ずチケット リンク.

アンドレむ・グシュチン (以䞋 – AG): – 私はZABBIXテクニカルサポヌト゚ンゞニア以䞋「Zabbix」のトレヌナヌです。 私はテクニカル サポヌトで 6 幎以䞊働いおおり、パフォヌマンスを盎接経隓しおきたした。 今日は、通垞の PostgreSQL 10 ず比范した堎合の TimescaleDB が提䟛できるパフォヌマンスに぀いお説明したす。たた、䞀般的にどのように動䜜するかに぀いおの導入郚分もいく぀か説明したす。

生産性の最倧の課題: デヌタ収集からデヌタ クレンゞングたで

たず、すべおの監芖システムが盎面する特定のパフォヌマンスの課題がありたす。 生産性の最初の課題は、デヌタを迅速に収集しお凊理するこずです。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

優れた監芖システムは、すべおのデヌタを迅速か぀タむムリヌに受信し、トリガヌ匏に埓っお凊理、぀たり、いく぀かの基準 (これはシステムによっお異なりたす) に埓っお凊理し、このデヌタをデヌタベヌスで䜿甚するためにデヌタベヌスに保存する必芁がありたす。未来。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

XNUMX 番目のパフォヌマンス䞊の課題は、履歎の保存です。 デヌタベヌスに頻繁に保存するず、䞀定期間にわたっお収集されたこれらのメトリクスにすばやく簡単にアクセスできたす。 最も重芁なこずは、このデヌタは取埗しやすく、レポヌト、グラフ、トリガヌ、䞀郚のしきい倀、アラヌトなどに䜿甚できるずいうこずです。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

5 番目のパフォヌマンスの課題は、履歎のクリアです。぀たり、XNUMX 幎間 (数カ月たたは XNUMX か月) にわたっお収集された詳现なメトリクスを保存する必芁がなくなる時点に到達したずきです。 䞀郚のネットワヌク ノヌドたたは䞀郚のホストは削陀されおおり、メトリクスはすでに叀くなっお収集されなくなったため、メトリクスは䞍芁になりたした。 デヌタベヌスが倧きくなりすぎないように、これらすべおをクリヌンアップする必芁がありたす。 䞀般に、履歎のクリアはストレヌゞにずっお重倧なテストであるこずが倚く、パフォヌマンスに非垞に倧きな圱響を䞎えるこずがよくありたす。

キャッシュの問題を解決するにはどうすればよいですか?

ここでは特に Zabbix に぀いお説明したす。 Zabbix では、最初ず XNUMX 番目の呌び出しはキャッシュを䜿甚しお解決されたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

デヌタの収集ず凊理 - すべおのデヌタを保存するために RAM を䜿甚したす。 これらのデヌタに぀いおさらに詳しく説明したす。

たた、デヌタベヌス偎では、グラフやその他の䞻芁な遞択に察しおキャッシュが行われたす。

Zabbix サヌバヌ自䜓の偎でのキャッシュ: ConfigurationCache、ValueCache、HistoryCache、TrendsCache がありたす。 それは䜕ですか

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

ConfigurationCache は、メトリクス、ホスト、デヌタ項目、トリガヌを保存するメむンのキャッシュです。 前凊理の凊理、デヌタの収集、どのホストからどのような頻床で収集するかなど、必芁なすべおの情報が含たれたす。 デヌタベヌスにアクセスしお䞍芁なク゚リを䜜成しないように、これらはすべお ConfigurationCache に保存されたす。 サヌバヌの起動埌、このキャッシュを曎新 (䜜成) し、(構成蚭定に応じお) 定期的に曎新したす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

Zabbix でのキャッシュ。 デヌタ収集

ここでの図は非垞に倧きくなりたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

このスキヌムの䞻なものは次のコレクタヌです。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

これらはアセンブリ プロセスそのものであり、さたざたなタむプのアセンブリを担圓するさたざたな「ポヌラヌ」です。 icmp、ipmi、およびさたざたなプロトコルを介しおデヌタを収集し、それをすべお前凊理に転送したす。

前凊理履歎キャッシュ

たた、蚈算されたデヌタ芁玠 (Zabbix に詳しい人は知っおいるでしょう)、぀たり蚈算された集蚈デヌタ芁玠がある堎合は、それらを ValueCache から盎接取埗したす。 埋め方は埌ほど説明したす。 これらすべおのコレクタヌは、ConfigurationCache を䜿甚しおゞョブを受信し、前凊理に枡したす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

前凊理では、ConfigurationCache を䜿甚しお前凊理ステップを取埗し、このデヌタをさたざたな方法で凊理したす。 バヌゞョン 4.2 からは、プロキシに移動したした。 前凊理自䜓がなかなか難しい操䜜なので、これは非垞に䟿利です。 たた、非垞に倧芏暡な Zabbix があり、倚数のデヌタ芁玠があり、収集頻床が高い堎合、䜜業が倧幅に簡玠化されたす。

したがっお、前凊理を䜿甚しおこのデヌタを䜕らかの方法で凊理した埌、さらに凊理するために HistoryCache に保存したす。 これでデヌタ収集は終了です。 メむンの工皋に移りたす。

ヒストリヌシンサヌの䜜品

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

Zabbix の䞻なプロセス (モノリシック アヌキテクチャであるため) は履歎同期です。 これは、各デヌタ芁玠、぀たり各倀のアトミックな凊理を特に扱うメむン プロセスです。

  • 倀が来たす (HistoryCache から取埗したす)。
  • Configuration syncer でチェックしたす。蚈算のトリガヌがあるかどうか - それらを蚈算したす。
    存圚する堎合 - 構成に埓っお必芁に応じお、むベントを䜜成し、アラヌトを䜜成するために゚スカレヌションを䜜成したす。
  • 埌続の凊理や集蚈のためのレコヌドのトリガヌ。 過去 XNUMX 時間などに集蚈した堎合、この倀は履歎テヌブルに保存されないように ValueCache によっお蚘憶されたす。 したがっお、ValueCache には、トリガヌや蚈算芁玠などの蚈算に必芁なデヌタが曞き蟌たれたす。
  • 次に、履歎同期機胜がすべおのデヌタをデヌタベヌスに曞き蟌みたす。
  • デヌタベヌスはそれらをディスクに曞き蟌みたす。これで凊理プロセスが終了したす。

デヌタベヌス。 キャッシング

デヌタベヌス偎では、むベントに関するグラフやレポヌトを衚瀺したい堎合、さたざたなキャッシュがありたす。 しかし、このレポヌトではそれらに぀いおは觊れたせん。

MySQL の堎合は、Innodb_buffer_pool ず、同様に構成できるさたざたなキャッシュがありたす。
しかし、䞻なものは次のずおりです。

  • 共有バッファ;
  • 効果的なキャッシュサむズ;
  • 共有プヌル。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

すべおのデヌタベヌスには、ク゚リによく必芁ずなるデヌタを RAM に保存できる特定のキャッシュがあるず述べたした。 圌らはこのための独自の技術を持っおいたす。

デヌタベヌスのパフォヌマンスに぀いお

したがっお、Zabbix サヌバヌがデヌタを収集しお蚘録するずいう競争環境が存圚したす。 再起動するず、履歎から読み取り、ValueCache などに曞き蟌みたす。 ここでは、Web むンタヌフェむス䞊に構築された Zabbix API を䜿甚するスクリプトずレポヌトを䜜成できたす。 Zabbix API はデヌタベヌスに入り、グラフ、レポヌト、たたはある皮のむベントや最近の問題のリストを取埗するために必芁なデヌタを受け取りたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

たた、非垞に人気のある芖芚化゜リュヌションずしお、ナヌザヌが䜿甚しおいる Grafana がありたす。 Zabbix API ずデヌタベヌスの䞡方を介しお盎接ログむンできたす。 たた、デヌタを取埗するために䞀定の競争が発生したす。結果ずテストの迅速な提䟛に準拠するには、デヌタベヌスをより现かく、より適切に調敎する必芁がありたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

履歎をクリアしたす。 Zabbix にはハりスキヌパヌがいたす

Zabbix で䜿甚される XNUMX 番目の呌び出しは、Housekeeper を䜿甚した履歎のクリアです。 Housekeeper はすべおの蚭定に埓いたす。぀たり、デヌタ芁玠は、保存する期間 (日単䜍)、傟向を保存する期間、および倉曎のダむナミクスを瀺したす。

TrendCache に぀いおは觊れたせんでした。TrendCache はその堎で蚈算したす。デヌタが到着し、それを XNUMX 時間集蚈し (ほずんどの堎合、過去 XNUMX 時間の数倀です)、量は平均/最小で、XNUMX 時間に XNUMX 回蚘録したす。倉化のダむナミクスの衚 (「トレンド」) 。 「ハりスキヌパヌ」は通垞の遞択を䜿甚しおデヌタベヌスを起動し、デヌタベヌスからデヌタを削陀したすが、これは垞に効果的であるずは限りたせん。

効果がないこずをどのように理解すればよいでしょうか 内郚プロセスのパフォヌマンス グラフで次の図を確認できたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

履歎同期機胜は垞にビゞヌ状態です (赀いグラフ)。 そしお䞀番䞊にある「赀い」グラフ。 これは、デヌタベヌスが指定したすべおの行を削陀するのを開始しお埅機する「ハりスキヌパヌ」です。

アむテム ID を取埗したしょう。最埌の 5 を削陀する必芁がありたす。 もちろんむンデックスによる。 しかし、通垞、デヌタセットは非垞に倧きく、デヌタベヌスは䟝然ずしおデヌタセットをディスクから読み取っおキャッシュに眮きたすが、これはデヌタベヌスにずっお非垞にコストのかかる操䜜です。 サむズによっおは、特定のパフォヌマンス䞊の問題が発生する可胜性がありたす。

Housekeeper は簡単な方法で無効にできたす。䜿い慣れた Web むンタヌフェむスが甚意されおいたす。 管理党般の蚭定 (「ハりスキヌパヌ」の蚭定) では、内郚履歎ず傟向のための内郚ハりスキヌピングを無効にしたす。 したがっお、Housekeeper はこれを制埡しなくなりたした。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

次に䜕ができるでしょうか それをオフにしたので、グラフは暪ばいになりたした...この堎合、さらにどのような問題が発生する可胜性がありたすか? 䜕が圹立぀でしょうか

パヌティショニングセクション化

通垞、これは、リストした各リレヌショナル デヌタベヌスで異なる方法で構成されたす。 MySQL には独自のテクノロゞヌがありたす。 ただし、PostgreSQL 10 ず MySQL に関しおは、党䜓的には非垞に䌌おいたす。 もちろん、その実装方法やパフォヌマンスぞの圱響に぀いおは、内郚的には倚くの違いがありたす。 ただし、䞀般に、新しいパヌティションを䜜成するず、特定の問題が発生するこずもよくありたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

蚭定 (1 日に䜜成するデヌタの量) に応じお、通垞は最小倀が蚭定されたす。これは 1 日/バッチで、「トレンド」、぀たり倉曎のダむナミクスの堎合は、XNUMX か月/新しいバッチです。 非垞に倧芏暡なセットアップがある堎合は、これが倉わる可胜性がありたす。

セットアップのサむズに぀いおすぐに蚀っおみたしょう。5 秒あたり最倧 5 の新しい倀 (いわゆる nvps) - これは小芏暡な「セットアップ」ずみなされたす。 平均 – 25 秒あたり XNUMX  XNUMX の倀。 䞊蚘はすでに倧芏暡なむンストヌルであり、デヌタベヌスの非垞に慎重な構成を必芁ずする非垞に倧芏暡なむンストヌルです。

非垞に倧芏暡なむンストヌルでは、1 日が最適ではない可胜性がありたす。 私は個人的に、MySQL 䞊で 40 日あたり XNUMX ギガバむトのパヌティションを芋たこずがありたす (さらに倚くのパヌティションがあるかもしれたせん)。 これは非垞に倧量のデヌタであるため、いく぀かの問題が発生する可胜性がありたす。 それを枛らす必芁がありたす。

なぜパヌティション分割が必芁なのでしょうか?

Partitioning が提䟛するものは、誰もが知っおいるず思いたすが、テヌブルのパヌティショニングです。 倚くの堎合、これらはディスク䞊の別個のファむルであり、スパン芁求です。 通垞のパヌティション分割の䞀郚である堎合、XNUMX ぀のパヌティションがより最適に遞択されたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

特に、Zabbix の堎合、範囲ごずに䜿甚されたす。぀たり、タむムスタンプ (通垞の数倀、゚ポックの開始からの時間) が䜿甚されたす。 䞀日の始たりず終わりを指定したす。これがパヌティションです。 したがっお、XNUMX 日前のデヌタを芁求しおいる堎合、(倧きなテヌブルではなく) XNUMX ぀のファむルをキャッシュにロヌドしお返すだけで枈むため、デヌタベヌスからすべおがより速く取埗されたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

倚くのデヌタベヌスでは、挿入 (XNUMX ぀の子テヌブルぞの挿入) も高速化されたす。 今は抜象的に話しおいたすが、こういうこずもあり埗たす。 倚くの堎合、パヌティショニングが圹立ちたす。

NoSQL甚のElasticsearch

最近、3.4 で NoSQL ゜リュヌションを実装したした。 Elasticsearchに曞き蟌む機胜を远加したした。 特定の皮類を曞くこずができたす。数字たたは蚘号のいずれかを遞択したす。 文字列テキストがあるので、Elasticsearch にログを曞き蟌むこずができたす... したがっお、Web むンタヌフェむスも Elasticsearch にアクセスしたす。 これは堎合によっおはうたく機胜したすが、珟時点では䜿甚できたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

タむムスケヌルDB。 ハむパヌテヌブル

4.4.2 では、TimescaleDB のような XNUMX ぀のこずに泚意を払いたした。 それは䜕ですか これは PostgreSQL の拡匵機胜です。぀たり、ネむティブの PostgreSQL むンタヌフェむスを備えおいたす。 さらに、この拡匵機胜を䜿甚するず、時系列デヌタをより効率的に操䜜し、自動パヌティショニングを行うこずができたす。 それはどのようなものか

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

これはハむパヌテヌブルです。Timescale にはそのような抂念がありたす。 これは䜜成したハむパヌテヌブルであり、チャンクが含たれおいたす。 私の蚘憶が間違っおいなければ、チャンクはパヌティションであり、子テヌブルです。 本圓に効果的です。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

TimescaleDB ず PostgreSQL

TimescaleDB メヌカヌが保蚌しおいるように、ク゚リ、特に挿入の凊理にはより正確なアルゎリズムが䜿甚されおおり、デヌタセット挿入のサむズが増加しおもほが䞀定のパフォヌマンスを維持できたす。 ぀たり、Postgres が 200 億行を超えるず、通垞の Postgres は倧幅に䜎䞋し始め、パフォヌマンスが文字通りれロになりたす。䞀方、Timescale を䜿甚するず、どんな量のデヌタでもできるだけ効率的に挿入を行うこずができたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

TimescaleDBをむンストヌルするにはどうすればよいですか? それは簡単です

それはドキュメントに蚘茉されおおり、あらゆるパッケヌゞからむンストヌルできたす...公匏の Postgres パッケヌゞに䟝存したす。 手動でコンパむルできたす。 たたたたデヌタベヌス甚にコンパむルする必芁がありたした。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

Zabbix では、単に拡匵機胜を有効にするだけです。 PostgresでExtentionを䜿っおいた方は、Extentionを有効化しお、䜿甚しおいるZabbixデヌタベヌス甚に䜜成するだけです。

そしお最埌のステップは 

タむムスケヌルDB。 履歎テヌブルの移行

ハむパヌテヌブルを䜜成する必芁がありたす。 これには、ハむパヌテヌブルの䜜成ずいう特別な関数がありたす。 その䞭で、最初のパラメヌタは、このデヌタベヌスで必芁なテヌブルです (ハむパヌテヌブルを䜜成する必芁がありたす)。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

䜜成するフィヌルドず chunk_time_interval (これはチャンク (䜿甚する必芁があるパヌティション) の間隔です。86 は 400 日です。

Migrate_data パラメヌタヌ: true に挿入するず、珟圚のデヌタがすべお事前に䜜成されたチャンクに移行されたす。

私自身も merge_data を䜿甚したしたが、デヌタベヌスの芏暡にもよりたすが、かなりの時間がかかりたす。 XNUMX テラバむト以䞊ありたしたが、䜜成するのに XNUMX 時間以䞊かかりたした。 堎合によっおは、テスト䞭に、テキスト (history_text) ず文字列 (history_str) の履歎デヌタを転送しないように削陀したした。これらは私にずっおあたり興味のないものでした。

そしお、db_extention で最埌の曎新を行いたす。timescaledb をむンストヌルしお、デヌタベヌス、特に Zabbix が db_extention の存圚を認識できるようにしたす。 圌はそれをアクティブ化し、TimescaleDB に必芁な「機胜」を䜿甚しお、正しい構文ずデヌタベヌスぞのク゚リを䜿甚したす。

サヌバヌ構成

20台のサヌバヌを䜿甚したした。 最初のサヌバヌは、16 プロセッサ、10.8 ギガバむトの RAM を備えたかなり小さな仮想マシンです。 Postgres XNUMXを構成したした。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

オペレヌティング システムは Debian、ファむル システムは xfs でした。 Zabbix 自䜓が䜿甚するものを陀いお、この特定のデヌタベヌスを䜿甚するための最小限の蚭定を䜜成したした。 同じマシン䞊に Zabbix サヌバヌ、PostgreSQL、およびロヌド ゚ヌゞェントがありたした。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

LoadableModule を䜿甚しおさたざたな結果を迅速に生成する 50 個のアクティブ ゚ヌゞェントを䜿甚したした。 文字列や数倀などを生成したのは圌らです。 デヌタベヌスに倧量のデヌタを詰め蟌みたした。 圓初、構成にはホストごずに 5 のデヌタ芁玠が含たれおおり、これを実際のセットアップにするために、ほが各デヌタ芁玠にトリガヌが含たれおいたした。 堎合によっおは、耇数のトリガヌを䜿甚する必芁があるこずもありたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

50 個の゚ヌゞェントを䜿甚する (さらに远加する) だけでなく、動的デヌタ芁玠を䜿甚しお曎新間隔を 4 秒に短瞮するこずで、曎新間隔ず負荷自䜓を調敎したした。

性胜テスト。 PostgreSQL: 36 NVP

最初の起動、最初のセットアップは、このハヌドりェア䞊の玔粋な PostreSQL 10 でした (35 秒あたり 200 の倀)。 䞀般に、画面でわかるように、デヌタの挿入にはほんの数秒かかりたす。SSD ドラむブ (20 ギガバむト) ではすべおが良奜で高速です。 ただ、XNUMX GB はすぐにいっぱいになっおしたいたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

将来的には、このようなグラフがたくさん登堎するでしょう。 これは、暙準の Zabbix サヌバヌ パフォヌマンス ダッシュボヌドです。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

最初のグラフは 35 秒あたりの倀の数 (青、巊䞊)、この堎合は XNUMX の倀です。 これ (䞭倮䞊郚) はビルド プロセスの読み蟌みで、これ (右䞊) は内郚プロセス (履歎同期機胜ずハりスキヌパヌ) の読み蟌みです。ここ (䞭倮䞋郚) はかなり長い間実行されおいたす。

このグラフ (䞭倮䞋) は、ValueCache の䜿甚量、぀たりトリガヌに察する ValueCache のヒット数 (XNUMX 秒あたり数千の倀) を瀺しおいたす。 もう XNUMX ぀の重芁なグラフは XNUMX 番目のグラフ (å·Šäž‹) で、先ほど説明した HistoryCache の䜿甚法を瀺しおいたす。これはデヌタベヌスに挿入する前のバッファです。

性胜テスト。 PostgreSQL: 50 NVP

次に、同じハヌドりェアで負荷を 50 秒あたり 10 の倀に増加したした。 Housekeeper がロヌドするず、蚈算により 2  3 秒で XNUMX 個の倀が蚘録されたした。 実際、次のスクリヌンショットに瀺されおいる内容は次のずおりです。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

「家政婊」はすでに仕事に支障をきたし始めおいたすが、䞀般的に、歎史を刻む眠垫の負荷は䟝然ずしお 60% のレベルにありたす (20 番目のグラフ、右䞊)。 Housekeeper の実行䞭、HistoryCache はすでにアクティブに埋め始めおいたす (å·Šäž‹)。 玄半分ギガバむト、XNUMX% がいっぱいでした。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

性胜テスト。 PostgreSQL: 80 NVP

次に、80 秒あたり XNUMX の倀に増やしたした。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

デヌタ芁玠数は玄 400 䞇、トリガヌ数は 280 䞇でした。 ご芧のずおり、むンサヌトは歎史的なシンカヌ30個ありたしたの負荷ずいう点ですでにかなり高かったです。 次に、ヒストリ シンカヌ、キャッシュなどのさたざたなパラメヌタを増やしたした。このハヌドりェアでは、ヒストリ シンカヌの負荷が最倧倀たで増加し始め、ほが「棚䞊げ」状態になりたした。それに応じお、HistoryCache の負荷が非垞に高くなりたした。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

この間ずっず、すべおのシステム パラメヌタ (プロセッサの䜿甚状況、RAM) を監芖し、ディスク䜿甚率が最倧であるこずを発芋したした。このハヌドりェア、この仮想マシン䞊のこのディスクの最倧容量に達したした。 「Postgres」は、そのような匷床で非垞に掻発にデヌタをダンプし始め、ディスクには曞き蟌みや読み取りを行う時間がなくなりたした...

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

すでに 48 個のプロセッサず 128 ギガバむトの RAM を備えた別のサヌバヌを䜿甚したした。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

たた、それを「調敎」したした - 履歎同期噚 (60 個) をむンストヌルし、蚱容可胜なパフォヌマンスを達成したした。 実際、私たちは「棚䞊げ」ではありたせんが、おそらくこれが生産性の限界であり、すでに䜕らかの察応が必芁になっおいたす。

性胜テスト。 TimescaleDB: 80 NVP

私の䞻なタスクは、TimescaleDB を䜿甚するこずでした。 各グラフは萜ち蟌みを瀺しおいたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

これらの倱敗はたさにデヌタ移行です。 その埌、Zabbix サヌバヌでは、ご芧のずおり、履歎シンカヌの読み蟌みプロファむルが倧幅に倉曎されたした。 これにより、ほが 3 倍の速さでデヌタを挿入でき、HistoryCache の䜿甚量が少なくなるため、デヌタは予定通りに配信されたす。 繰り返したすが、80 秒あたり XNUMX の倀はかなり高いレヌトです (もちろん、Yandex の堎合ではありたせん)。 党䜓ずしお、これはサヌバヌが XNUMX 台あるかなり倧芏暡なセットアップです。

PostgreSQL パフォヌマンス テスト: 120 NVP

次に、デヌタ芁玠数の倀を 125 䞇に増やし、XNUMX 秒あたり XNUMX ずいう蚈算倀を受け取りたした。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

そしお、次のようなグラフが埗られたした。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

原則ずしお、これは動䜜するセットアップであり、かなり長期間動䜜する可胜性がありたす。 しかし、1,5 テラバむトのディスクしか持っおいなかったので、数日で䜿い切っおしたいたした。 最も重芁なこずは、同時に新しいパヌティションが TimescaleDB 䞊に䜜成されたこずですが、これはパフォヌマンスにはたったく圱響されたせんでした。これは MySQL に぀いおは蚀えたせん。

通垞、パヌティションは倜間に䜜成されたす。これは、通垞、テヌブルの挿入や操䜜がブロックされ、サヌビスの䜎䞋に぀ながる可胜性があるためです。 この堎合はそうではありたせん 䞻なタスクは、TimescaleDB の機胜をテストするこずでした。 結果は次のような数字になりたした: 120 秒あたり XNUMX 䞇の倀。

コミュニティには次のような䟋もありたす。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

たた、この人物は TimescaleDB をオンにし、io.weight を䜿甚する際のプロセッサの負荷が軜枛されたした。 たた、TimescaleDB の導入により、内郚プロセス芁玠の䜿甚も枛少したした。 さらに、これらは通垞のパンケヌキ ディスク、぀たり通垞のディスク (SSD ではなく) 䞊の通垞の仮想マシンです。

ディスクのパフォヌマンスによっお制限される小芏暡なセットアップの堎合、私の意芋では、TimescaleDB は非垞に優れた゜リュヌションです。 これにより、デヌタベヌス甚に高速なハヌドりェアに移行する前に䜜業を続けるこずができたす。

モスクワでのカンファレンス、リガでのサミットなど、私たちのむベントに皆さんをご招埅したす。 テレグラム、フォヌラム、IRC などのチャネルを䜿甚しおください。 ご質問がございたしたら、私たちのデスクたでお越しください。䜕でもご盞談いただけたす。

聎衆の質問

聎衆からの質問 (以䞋、A): - TimescaleDB の構成が非垞に簡単で、これほどパフォヌマンスが向䞊するのであれば、おそらくこれを Postgres で Zabbix を構成するためのベスト プラクティスずしお䜿甚する必芁がありたすか? そしお、この゜リュヌションには萜ずし穎や欠点はありたすか、それずも結局のずころ、自分で Zabbix を䜜成するこずに決めた堎合、Postgres を簡単に䜿甚でき、Timescale をすぐにそこにむンストヌルし、問題を考えずに䜿甚できたすか?

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

AG: – はい、これは良い掚奚事項だず思いたす。TimescaleDB 拡匵機胜を備えた Postgres をすぐに䜿甚しおください。 すでに述べたように、この「機胜」は実隓的なものであるにもかかわらず、倚くの良いレビュヌが寄せられおいたす。 しかし、実際のテストでは、これが (TimescaleDB を䜿甚した) 優れた゜リュヌションであるこずが瀺されおおり、今埌進化するず思いたす。 私たちはこの拡匵機胜がどのように開発されるかを監芖しおおり、必芁に応じお倉曎を加えたす。

開発䞭であっおも、私たちはそのよく知られた「機胜」の XNUMX ぀に䟝存しおいたした。それは、チャンクを少し異なる方法で操䜜するこずが可胜でした。 しかし、次のリリヌスではそれが削陀されたため、私たちはこのコヌドぞの䟝存をやめなければなりたせんでした。 倚くのセットアップでこの゜リュヌションを䜿甚するこずをお勧めしたす。 MySQL を䜿甚しおいる堎合... 平均的なセットアップでは、どの゜リュヌションでも問題なく機胜したす。

A – コミュニティからの最埌のグラフには、「Housekeeper」を含むグラフがありたした。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

圌は働き続けた。 Housekeeper は TimescaleDB を䜿っお䜕をしたすか?

AG: – 今は確かなこずは蚀えたせん – コヌドを芋お、さらに詳しくお話したす。 TimescaleDB ク゚リを䜿甚しおチャンクを削陀するのではなく、䜕らかの方法でチャンクを集玄したす。 この技術的な質問にはただ答える準備ができおいたせん。 今日か明日のスタンドで詳现がわかりたす。

A – Timescale での削陀操䜜のパフォヌマンスに぀いお、同様の質問がありたす。
A (聎衆からの回答): – テヌブルからデヌタを削陀するずき、削陀を介しお行う堎合は、テヌブルを凊理する必芁がありたす。削陀、クリヌンアップ、将来のバキュヌムのためにすべおをマヌクする必芁がありたす。 Timescale では、チャンクがあるため、ドロップできたす。 ざっくり蚀うず、ビッグデヌタにあるファむルに「削陀しお」ず指瀺するだけです。

Timescale は、そのようなチャンクがもう存圚しないこずを単に理解したす。 たた、ク゚リ プランナヌに統合されおいるため、フックを䜿甚しお遞択やその他の操䜜で条件をキャッチし、このチャンクがもう存圚しないこずをすぐに理解したす。「もうそこには行きたせん!」 (デヌタは利甚できたせん)。 それだけです ぀たり、テヌブル スキャンはバむナリ ファむルの削陀に眮き換えられるため、高速です。

A – 非 SQL のトピックに぀いおはすでに觊れたした。 私の理解する限り、Zabbix は実際にデヌタを倉曎する必芁はなく、これはすべおログのようなものです。 デヌタを倉曎できないず同時に、はるかに高速に保存、蓄積、配垃できる特殊なデヌタベヌスを䜿甚するこずは可胜でしょうか。たずえば、Kafka に䌌た Clickhouse などでしょうか? Kafka もログです。 䜕ずかそれらを統合するこずは可胜でしょうか

AG: ●荷降ろしが可胜です。 バヌゞョン 3.4 以降、特定の「機胜」が远加されたした。すべおの履歎ファむル、むベント、その他すべおをファむルに曞き蟌むこずができたす。 そしお、䜕らかのハンドラヌを䜿甚しお他のデヌタベヌスに送信したす。 実際、倚くの人が再䜜業しおデヌタベヌスに盎接曞き蟌みたす。 実行䞭に、履歎シンカヌはこれらすべおをファむルに曞き蟌み、これらのファむルを回転するなどしお、これを Clickhouse に転送できたす。 蚈画に぀いおは蚀えたせんが、おそらく NoSQL ゜リュヌション (Clickhouse など) のさらなるサポヌトが継続されるでしょう。

A – 䞀般的に、postgres を完党に削陀できるこずがわかりたしたか?

AG: – もちろん、Zabbix で最も難しい郚分は履歎テヌブルであり、最も倚くの問題やむベントが発生したす。 この堎合、むベントを長期間保存せず、傟向を含む履歎を他の高速ストレヌゞに保存すれば、通垞は問題ないず思いたす。

A – たずえば、Clickhouse に切り替えた堎合、すべおがどのくらい速く動䜜するかを芋積もるこずはできたすか?

AG: – テストしおいたせん。 Clickhouse には独自のむンタヌフェヌスがあるため、少なくずも同じ数字は非垞に簡単に達成できるず思いたすが、確実なこずは蚀えたせん。 テストした方が良いです。 それはすべお、ホストの数などの構成によっお異なりたす。 挿入するこずは XNUMX ぀のこずですが、このデヌタを Grafana などで取埗する必芁もありたす。

A – ぀たり、私たちは察等な戊いに぀いお話しおいるのであっお、これらの高速デヌタベヌスの倧きな利点に぀いお話しおいるわけではないずいうこずですか

AG: – 統合するず、より正確なテストが行​​われるず思いたす。

A – 叀き良きRRDはどこぞ行ったのでしょうか SQL デヌタベヌスに切り替えた理由は䜕ですか? 圓初、すべおのメトリクスは RRD で収集されたした。

AG: – Zabbix には、おそらく非垞に叀いバヌゞョンで RRD がありたした。 SQL デヌタベヌスは垞に存圚しおいたした。これは叀兞的なアプロヌチです。 叀兞的なアプロヌチは MySQL や PostgreSQL です (これらは非垞に長い間存圚しおいたした)。 SQL デヌタベヌスず RRD デヌタベヌスに共通のむンタヌフェむスを䜿甚したこずはほずんどありたせんでした。

HighLoad++、Andrey Gushchin (Zabbix): 高パフォヌマンスずネむティブ パヌティショニング

いく぀かの広告 🙂

い぀もご宿泊いただきありがずうございたす。 私たちの蚘事が気に入っおいたすか? もっず興味深いコンテンツを芋たいですか? 泚文したり、友人に勧めたりしお私たちをサポヌトしおください。 開発者向けのクラりド VPS は 4.99 ドルから, 圓瀟があなたのために発明した、゚ントリヌレベルのサヌバヌのナニヌクな類䌌物です。 VPS (KVM) E5-2697 v3 (6 コア) 10GB DDR4 480GB SSD 1Gbps 19 ドルからの真実、たたはサヌバヌを共有する方法? (RAID1 および RAID10、最倧 24 コア、最倧 40GB DDR4 で利甚可胜)。

アムステルダムの゚クむニクス Tier IV デヌタセンタヌでは Dell R730xd が 2 倍安い? ここだけ 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV 199 ドルから オランダで Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 ドルから! に぀いお読む むンフラストラクチャヌ䌁業を構築する方法730 ペニヌで 5 ナヌロの䟡倀がある Dell R2650xd E4-9000 vXNUMX サヌバヌを䜿甚したクラスですか?

出所 habr.com

コメントを远加したす