10分間のクイックスタート大量データ検索および分析エンジンElasticarch

著者:jeremyshi、TencentTEGバックグラウンド開発エンジニア

1.背景

モバイルインターネット、モノのインターネット、クラウドコンピューティングなどの情報技術の活発な開発により、データの量は爆発的に増加しました。今日では、検索エンジン技術の助けと切り離せない膨大なデータから、必要な情報を簡単に見つけることができます。特に、索引付け、検索、および並べ替えのメカニズムについては、その背後にある複雑な情報検索の原則を理解していなくても、基本的な全文検索機能を実現できます。データの量は10億に達し、数百億の規模でも検索結果を数秒で返すことができます。システムの耐災害性、データセキュリティ、スケーラビリティ、保守性など、私たちが懸念している実際の問題は、オープンソース検索エンジンの分野で第1位のElasticsearchで効果的に解決できます。

2.Elasticsearchの概要

Elasticsearch(ES)は、Luceneに基づくオープンソースの分散検索分析エンジンであり、ほぼリアルタイムでデータのインデックス作成と取得を行うことができます。高い信頼性、使いやすさ、活発なコミュニティという特徴があり、全文検索、ログ分析、モニタリング分析などのシナリオで広く使用されています。スケーラビリティが高いため、クラスターを100ノードスケールに拡張して、ペタバイトのデータを処理できます。書き込み、クエリ、クラスター管理、およびその他の操作は、単純なRESTfulAPIを介して実現できます。検索に加えて、豊富な統計分析機能も提供します。また、公式の機能拡張パッケージXPackは、データ暗号化、アラーム、機械学習などの他のニーズを満たします。さらに、COSバックアップ、QQセグメンテーションなどのカスタムプラグインを使用して、特定の機能要件を満たすことができます。以下では、主にESのアーキテクチャと基本原則を紹介します。

2.1Elasticsearchのアーキテクチャと原理

Elasticsearchクラスター

基本的な概念

  • クラスター「クラスター」:複数のマシンにデプロイされたESノードで構成され、より大きなデータセットを処理して高可用性を実現します。

  • ノード「ノード」:マシン上のESプロセス。さまざまなタイプのノードを構成できます。

  • マスターノード:クラスターのマスターを選択するために使用されます。ノードの1つはマスターノードとして機能し、インデックスの作成などのクラスターメタデータ管理と、クラスターへの参加を終了するノードを担当します。

  • データノード「データノード」:インデックスデータの保存を担当します。

  • インデックス「インデックス」:インデックスデータの論理コレクション。リレーショナルデータのデータベースに類似している可能性があります。

  • シャードの「シャーディング」:クラスター内の異なるノードにシャードを割り当てることにより、データサブセットにインデックスを付け、データの水平方向の拡張を実現します。単一ノードの不十分なCPU、メモリ、およびディスク処理機能の問題を解決するため。

  • プライマリシャード「プライマリシャード」:データシャーディングはマスタースレーブモードを採用し、シャードはインデックス操作を受け取ります。

  • レプリカシャード「レプリカシャード」:クエリスループットを向上させ、高いデータ信頼性を実現するためのプライマリシャードのコピー。プライマリシャードが異常な場合、レプリカシャードの1つが自動的に新しいプライマリシャードにプロモートされます。ESのデータモデルを誰もが簡単に理解できるようにするために、リレーショナルデータベースMySQLと比較してください。

データモデルカテゴリ

上記のアーキテクチャ図からわかるように、ESアーキテクチャは非常に簡潔です。組み込みの自動検出により、Zen検出が実現されます。ノードが起動すると、クラスターメンバーリストに接続してクラスターに参加できます。ノードの1つは、クラスターメタデータ管理のマスターノードとして機能し、ノード間のシャードの分散を維持します。新しいノードがクラスターに参加すると、マスターノードはクラスターの負荷を分散するためにいくつかのフラグメントを新しいノードに自動的に移行します。

ノードがクラスターに参加します

分散クラスターには必然的にノード障害があります。マスターノードは、クラスター内の他のノードの存続ステータスを定期的に検出します。ノードに障害が発生すると、ノードはクラスターから移動します。そして、他のノードの障害が発生したノードのフラグメントを自動的に復元します。プライマリシャードに障害が発生すると、レプリカシャードの1つがプライマリシャードとしてプロモートされます。他のノードもアクティブなマスターノードを検出します。マスターノードに障害が発生すると、組み込みのRaftのようなプロトコルがトリガーされてマスターが選択され、クラスターの脳の分裂を回避するために最小数の候補マスターノードが設定されます。

ノードがクラスターを離れる

クラスター管理に加えて、インデックスデータの読み取りと書き込みも私たちの関心事の重要な部分です。ESはピアツーピアアーキテクチャを採用しており、各ノードは断片化されたルーティング情報の全量を保存します。つまり、各ノードはユーザーの読み取りと書き込みを受信できます。たとえば、書き込み要求がノード1に送信された場合、書き込み要求はドキュメントIDのハッシュ値を使用して、デフォルトで書き込むプライマリシャードを決定します。ここでは、シャード0が書き込まれると想定しています。メインシャードP0を書き込んだ後、書き込み要求はレプリカシャードR0のノードに並行して転送されます。レプリカシャードのノードが書き込みが成功したことを確認すると、クライアントに戻って書き込みの成功を報告し、データのセキュリティを確保します。また、書き込む前に、クォーラム番号のコピー数を確認して、ネットワークパーティションによって書き込まれるデータの不整合を回避します。

書き込み操作

クエリは分散検索を採用します。たとえば、リクエストがノード3に送信された後、リクエストはインデックスのプライマリシャードまたはレプリカシャードが配置されているノードに転送されます。もちろん、ルーティングフィールド情報を使用して両方を記述およびクエリする場合。リクエストは一部のシャードにのみ送信され、完全なシャードスキャンは回避されます。これらのノードがクエリを完了すると、結果が要求側ノードに返され、要求側ノードが各ノードの結果を収集してクライアントに返します。

クエリ操作

2.2ルーセンの原則

ESクラスターの基本原理を紹介した後、ESの基盤となるストレージエンジンであるLuceneを簡単に紹介しましょう。まず、Luceneは、インデックス作成と検索の基本機能を提供する高性能の情報検索ライブラリです。ESはこれに基づいて信頼性と分散クラスター管理の問題を解決し、最終的に製品化されたフルテキスト検索システムを形成します。

Luceneが解決する中心的な問題は、フルテキスト検索です。従来の検索方法とは異なり、フルテキスト検索ではクエリ中のすべてのコンテンツスキャンが回避されます。たとえば、データが書き込まれた後、書き込まれたドキュメントフィールドの内容は単語に分割され、辞書テーブルとそれに関連付けられた反転テーブルが形成されます。クエリを実行すると、キーワードセグメンテーションの結果が辞書テーブルの内容と直接一致し、関連するドキュメントリストが取得されるため、結果セットをすばやく取得できます。また、並べ替えルールにより、一致度の高いドキュメントが最初に表示されます。

反転インデックス

インデックス作成速度を高速化するために、LuceneはLSMツリー構造を採用し、最初にインデックスデータをメモリにキャッシュします。メモリスペースが高くなるか、特定の時間に達すると、メモリ内のデータがディスクに書き込まれ、データセグメントファイル(セグメント)が形成されます。セグメントファイルには、辞書、反転テーブル、フィールドデータなどの複数のファイルが含まれています。

LSMツリー構造

書き込みパフォーマンスやデータセキュリティと互換性を持たせるため、たとえば、マシンの障害によってメモリバッファ内のデータが失われるのを防ぐため。ESは、メモリへの書き込み中にトランザクションログTranslogを書き込みます。メモリ内のデータは定期的に新しいセグメントファイルを生成します。このファイルは、ほぼリアルタイムの検索のために、オーバーヘッドを抑えてファイルシステムキャッシュに書き込むことで開いたり読み取ったりできます。

書き込みバッファリングと永続性

3.Elasticsearchアプリケーションのシナリオ

ESの一般的な使用シナリオには、ログ分析、タイミング分析、全文検索などがあります。

3.1リアルタイムログ分析シナリオ

ログは、インターネット業界における幅広いデータ形式です。一般的なログには、低速ログや異常ログなどのビジネス上の問題を特定するために使用される操作ログ、ユーザーのクリックやアクセスログなどのユーザーの動作を分析するために使用されるビジネスログ、セキュリティ動作分析のための監査ログが含まれます。

弾性生態学は完全なログソリューションを提供します。簡単な展開で、完全なログリアルタイム分析サービスを構築できます。ES Ecologyは、リアルタイムのログ分析シナリオの要件を完全に解決します。これは、近年のESの急速な発展の重要な理由でもあります。ログは通常、生成からアクセスまで10秒レベルであり、従来のビッグデータソリューションの数十分から数時間に比べて非常に時間効率が高くなっています。ESの最下層は、反転インデックスや列ストレージなどのデータ構造をサポートしているため、ESの非常に柔軟な検索および分析機能をログシナリオで使用できます。ESインタラクティブ分析機能を使用すると、数兆のログの場合でも、ログ検索の応答時間は数秒です。ログ処理の基本的なプロセスには、ログ収集->データクリーニング->ストレージ->視覚分析が含まれます。Elastic Stackは、ユーザーが完全なログソリューションを通じてログ処理のフルリンク管理を完了するのに役立ちます。

ログ分析リンク

その中で:

  • ログ収集:軽量のログ収集コンポーネントFileBeatは、ビジネスログファイルをリアルタイムで読み取り、Logstashなどのダウンストリームコンポーネントにデータを送信します。

  • テキスト分析:通常の分析およびその他のメカニズムを使用して、ログテキストデータを構造化データに変換します。独立したLogstashサービスまたはElasticsearchの組み込みの軽量データ処理モジュールIngestPipelineを使用して、データのクリーニングと変換を完了することができます。

  • データストレージ:Elasticsearch検索および分析プラットフォームを介した永続的なデータストレージ。フルテキストの検索および分析機能を提供します。

  • 視覚分析:豊富なグラフィカルインターフェイスを介して、視覚化コンポーネントKibanaなどのログデータを検索および分析できます。

視覚化コンポーネント木花

3.2時系列分析シナリオ時系列データは、機器やシステムの状態変化を時系列で記録したデータです。典型的な時系列データには、従来のサーバー監視インデックスデータ、アプリケーションシステムパフォーマンス監視データ、インテリジェントハードウェア、産業用IoTセンサーデータなどが含まれます。2017年には、ESに基づく時系列分析シナリオも検討しました。タイミング分析シナリオには、同時書き込みが多く、クエリの待ち時間が短く、多次元分析ができるという特徴があります。ESにはクラスター拡張、バッチ書き込み、ルーティングを使用した読み取り/書き込み、データシャーディングなどの機能があるため、最大のオンライン単一クラスターは600以上のノード、1000w / sの書き込みスループット、単一の曲線、または単一のタイムラインに達しました。クエリの遅延は10msで制御できます。さらに、ESは柔軟な多次元統計分析機能を提供し、地域およびビジネスモジュールに基づいて柔軟な統計分析を実行するための表示と監視を可能にします。さらに、ESは、列ストレージ、高い圧縮率、およびコピー数のオンデマンド調整をサポートしているため、ストレージコストを削減できます。最後に、時系列データもKibanaコンポーネントを介して簡単に視覚化できます。

時系列データ視覚化パネル

3.3検索サービスのシナリオ典型的な検索サービスのシナリオには、JD.com、Pinduoduo、およびMogujieでの商品検索、アプリケーションストアでのアプリケーション検索、フォーラムやオンラインドキュメントでのWebサイト検索が含まれます。このタイプのシナリオでは、ユーザーは高性能、低遅延、高信頼性、検索品質などに重点を置きます。たとえば、単一のサービスが最大10w + QPSに達する必要があり、リクエストの平均応答時間は20ミリ秒以内、クエリの不具合は100ミリ秒未満です。検索シナリオなどの高可用性には、通常4 9の可用性が必要であり、単一マシンルームの障害耐性をサポートします。現在、クラウド上のElasticsearchサービスは、すでにマルチゾーンの災害復旧をサポートしており、障害から数分以内に復旧する機能を備えています。ESの効率的な反転インデックス、カスタムスコアリング、並べ替え機能、豊富な単語セグメンテーションプラグインにより、フルテキスト検索の要件が実現されます。オープンソースの全文検索の分野では、ESは長年DB-Engines検索エンジンのカテゴリーで第1位にランクされています。

DB-Engines検索エンジンのランキング

4. TencentElasticserchサービス

社内外には、リアルタイムのログ分析、時系列データ分析、フルテキスト検索の需要シナリオが多数あります。現在、Elasticと提携して、Tencent Cloudでカーネル拡張ESクラウドサービス(略してCES)を提供しています。カーネル拡張には、Xpack商用キットとカーネル最適化が含まれます。企業やパブリッククラウドの顧客にサービスを提供する過程で、超大規模なクラスター、数千万のデータ書き込み、クラウド上のユーザー向けの豊富な使用シナリオなど、多くの問題や課題にも直面しています。以下では、主に、可用性、パフォーマンス、およびコストの観点から、カーネルレベルでの最適化対策を紹介します。

4.1使いやすさの最適化

3つの側面での可用性の問題。まず、ESコアシステムには堅牢性が欠けています。これは分散システムの一般的な問題です。たとえば、異常なクエリや圧力過負荷クラスターは雪崩を起こしやすいです。クラスターのスケーラビリティが不十分です。たとえば、クラスターフラグメントの数が10wを超えると、明らかにメタデータ管理のボトルネックが発生します。そして、クラスターの拡張、ノードは異常後にクラスターに追加され、ノードと複数のハードディスク間でデータが不均一になるという問題があります。第二に、耐災害性の観点から、コンピュータルームでネットワーク障害が発生した場合にサービスを迅速に復元できるようにし、自然災害によるデータ損失を防ぎ、誤操作やその他の信頼性およびデータセキュリティの問題が発生した後にデータを迅速に復元できるようにする必要があります。さらに、マスターノードのブロック、分散デッドロック、スローローリングリスタートなど、操作プロセス見つかったESシステムの欠陥も含まれます。

上記の問題については、システムの堅牢性、制限によるサービス、ネットワーク障害耐性のあるマシン、不安定性のためにそのようなサービスでは珍しい。クラスターメタデータ管理ロジックを最適化することにより、クラスター拡張機能が1桁向上し、1,000レベルのノードクラスターと100万レベルのフラグメンテーションがサポートされます。クラスターバランスに関しては、ノードと複数のハードディスク間のシャードバランスが最適化され、大規模クラスターの圧力バランスが確保されます。

災害復旧ソリューションに関しては、ESプラグインメカニズムを拡張してデータのバックアップとバックアップを実現します。これにより、ESデータをCOSにバックアップしてデータのセキュリティを確保できます。クロスアベイラビリティゾーンの災害復旧をサポートする管理および制御システムの構築を通じて、ユーザーは必要な数だけ展開できます。単一のコンピューター室の障害を許容するアベイラビリティーゾーン。ゴミ箱メカニズムを採用し、延滞や誤操作などのシナリオでクラスターデータを迅速に復元できるようにします。システムの欠陥に関しては、ローリングリスタート、マスターのブロック、分散デッドロックなどの一連のバグを修正しました。その中で、ローリングリスタートの最適化により、ノードのリスタート速度を5倍以上加速できます。マスターの詰まりの問題。ES6.xの公式バージョンで最適化しました。

4.2パフォーマンスの最適化

ログや監視によって表されるタイミングシナリオなどのパフォーマンスの問題には、非常に高い書き込みパフォーマンス要件があり、書き込みの同時実行性は1000w / sに達する可能性があります。ただし、プライマリキーを使用して書き込むと、ESのパフォーマンスが1倍以上低下することがわかりました。ストレステストのシナリオでは、CPUを十分に活用できないことがわかりました。一般に、検索サービスにはクエリ可能性に対する非常に高い要件があります。通常、20w QPSが必要であり、平均応答時間は20ミリ秒未満であり、GCおよび不十分な実行計画によって引き起こされるクエリグリッチの問題は可能な限り回避する必要があります。

これらの問題を解決するため。書き込みに関しては、プライマリキーの重複排除シナリオでは、セグメントファイルに記録された最大値と最小値を使用してクエリの調整を実行し、プライマリキーの重複排除のプロセスを高速化し、書き込みパフォーマンスを45%向上させます。詳細については、Lucene-8980を参照してくださいストレステストのシナリオでCPUを十分に活用できないという問題については、ESがトランスログを更新するときにロックの粒度を最適化してリソースのプリエンプションを回避することで、パフォーマンスが20%向上します。詳細については、ES-45765 / 47790を参照してくださいまた、ベクトル化された実行によって書き込みパフォーマンスを最適化しようとしています。ブランチジャンプと命令ミスを減らすことで、期待される書き込みパフォーマンスを2倍にすることができます。

クエリに関しては、セグメントファイルのマージ戦略を最適化して、非アクティブなセグメントファイルのマージを自動的にトリガーし、セグメントファイルの数を収束して、リソースのオーバーヘッドを削減し、クエリのパフォーマンスを向上させます。各セグメントファイルに記録された最大値と最小値に従ってクエリをプルーニングします。これにより、クエリのパフォーマンスが40%向上します。CBO戦略により、大きなキャッシュオーバーヘッドを必要とし、10回以上のクエリグリッチを引き起こすキャッシュ操作を回避します。詳細については、Lucene-9002を参照してくださいまた、複合集計でのパフォーマンスの問題の最適化、実際のページめくり操作の実現、並べ替えシナリオを使用した集計の最適化により、パフォーマンスが3〜7倍向上します。さらに、IntelのAEP、Optane、QATなどの新しいハードウェアを通じてパフォーマンスを最適化しようとしています。

4.3コストの最適化

コストの側面は、主にログと監視で表される時系列シナリオでのマシンリソースの消費に反映されます。典型的なオンラインログと時系列のビジネス統計を組み合わせると、ハードディスク、メモリ、およびコンピューティングリソースのコスト比は8:4:1に近いことがわかります。ハードディスクとメモリが主な矛盾であり、計算コストがそれに続くと結論付けることができます。そして、この種の時系列シーンには明らかなアクセス特性があります。つまり、データにはホット特性とコールド特性があります。時系列のデータアクセスには、どれだけ近いか、どれだけ離れているかという特徴があります。たとえば、過去7日間のデータアクセスの割合は95%以上に達する可能性がありますが、履歴データアクセスは少なく、通常は統計情報へのアクセスです。

ハードディスクのコストに関しては、データには明らかなコールドとホットの特性があるため、コールドとホットの分離アーキテクチャを採用し、ハイブリッドストレージソリューションを使用してコストとパフォーマンスのバランスを取ります。通常、履歴データはアクセス統計のみであるため、マテリアライズドビューと同様に、ストレージとクエリのパフォーマンスと引き換えに、事前に計算されたロールアップを使用します。履歴データをまったく使用しないために、cosなどのより安価なストレージシステムにバックアップすることもできます。その他の最適化方法には、マルチディスク戦略と互換性のあるデータスループットとデータ災害復旧、およびライフサイクル管理による期限切れデータの定期的な削除が含まれます。

メモリコストに関しては、特に大容量ストレージモデルの場合、ストレージリソースの20%しか使用されておらず、メモリが不足していることがわかりました。メモリ不足の問題を解決するために、オフヒープテクノロジを使用して、ヒープ内メモリの使用率を改善し、GCオーバーヘッドを削減し、単一ノードがディスクを管理する能力を向上させます。大量のメモリを占有するFSTをオフヒープ管理に移動し、ヒープ外のオブジェクトのアドレスをヒープ内に格納することで、ヒープ内外のデータコピーを回避します。ヒープ外のオブジェクトのメモリ回復は、メモリ使用量をさらに改善するためのJavaウィークリファレンスメカニズムによって実現されます。32GBのヒープ内メモリは約50TBのディスクスペースを管理できます。これはネイティブバージョンの10倍であり、パフォーマンスは同じですが、GCの利点が大幅に向上しています。

カーネルレベルでの最適化に加えて、プラットフォーム層の管理および制御プラットフォームを通じて、クラウドでのサービスリソース管理、インスタンスインスタンス管理などをサポートし、サービスホスティングを実現します。インスタンスの作成や仕様の調整など、便利で迅速です。サービスの品質は、運用および保守サポートプラットフォームの監視システムと運用および保守ツールによって保証されます。また、建設中のインテリジェント診断プラットフォームを通じて、潜在的なサービスの問題が発見され、安定した信頼性の高いESサービスが社内外に提供されます。

Tencent内では、ES製品のオープンソースコラボレーションを主導して、潜在的な問題を発見し、ESを共同で最適化および改善して、さまざまなチームによる繰り返しの落とし穴を回避しています。同時に、コミュニティに優れたソリューションを積極的に提供し、公式およびコミュニティのESファンとともにESの開発を推進しています。Tencent ESカーネルR&Dに代表されるチームは、これまでに60を超えるPRを提出し、その70%が統合されました。同社のESオープンソースコラボレーティブPMCメンバーには6人のES / Luceneコミュニティ貢献者がいます。

5.追記

Elasticsearchは、リアルタイムログ分析、時系列データ分析、全文検索などのシナリオで、Tencentの内外で広く使用されています。現在、単一クラスターの規模は1,000レベルのノードと1兆レベルのスループットに達しています。ESのカーネル拡張バージョンを通じて、高信頼性、低コスト、高性能の検索および分析サービスを提供します。将来的には、可用性、パフォーマンス、およびコストの観点からESを最適化し続ける必要があります。たとえば、不十分なクラスターのスケーラビリティの問題は、クラスターのスケーラビリティを最適化することにより、数百万のフラグメントと秒のレベルでのインデックスの作成をサポートすることです。ESストレージコストは現在、ストレージソリューションとコンピューティングソリューションを分離して、コストをさらに削減し、パフォーマンスを向上させるために開発されています。使用率と保守コストが高いという問題に加えて、後続のマルチレベルパーティショニング、インテリジェント診断などを使用して、ESの自動化および障害自己修復機能を改善し、ユーザーの使用と保守コストを削減します。将来的には、多次元分析の分野でESの他の可能性をさらに探求していきます。ビッグデータの分野で、より価値のある検索分析サービスを提供し続けます。

もっと理解する

ESコアテクノロジーに関心のある学生は、以下のQRコードをスキャンして、私たちと話し合い、交換することができます。また、TencentCloudでElasticarchサービスを体験することもできます。

おすすめ

転載: blog.csdn.net/Tencent_TEG/article/details/108289003