このドキュメントでは、OpenSearch Benchmark ツールを使用して PolarSearch の性能ベンチマークを実行する方法について説明します。このガイドを使用して独自のテストを実施し、実際のワークロード下で異なるプロダクトの検索およびデータインジェスト性能を評価できます。
テストツール
OpenSearch Benchmark (OSB) は OpenSearch プロジェクトが提供するオープンソースの検索エンジン向けベンチマークフレームワークであり、かつては Elasticsearch Rally として知られていました。標準化された業界ワークロードを含み、Elasticsearch/OpenSearch REST API と互換性のある任意の検索エンジンに対して一貫性があり再現可能な性能ベンチマークをサポートするため、プロダクト間の比較に最適です。
テスト環境
テストツール:OpenSearch Benchmark 2.1.0
セットアップ:ECS インスタンスと PolarSearch クラスターは、同一リージョン、同一アベイラビリティーゾーン、同一 VPC ネットワーク内に配置されている必要があります。
ECS インスタンス:
インスタンスタイプ:ecs.c9i.8xlarge(32 コア、128 GiB)
オペレーティングシステム:Ubuntu 22.04
Python バージョン:3.10 以上
PolarSearch クラスター:
ノードタイプ:8 コア、32 GB
ノード数:2
パラメーター構成:すべてのテストは、クラスターパラメーターを一切調整せずにデフォルトのすぐに使える構成を使用します。
プロダクトとバージョン
プロダクト | PolarSearch バージョン | ノードタイプ | ノード数 |
PolarSearch | 3.0 | 8 コア、32 GB | 2 |
PolarSearch | 1.0 | 8 コア、32 GB | 2 |
ワークロード
ワークロード | 説明 | テスト操作 |
1998 年 FIFA ワールドカップの Web サーバー実アクセスログに基づいています。データセットには約 2 億 4,700 万件のログレコードが含まれます。 | index-append データインジェスト、完全一致検索、時間範囲クエリ、集約 | |
2015 年のニューヨーク市タクシーの乗車データに基づいています。 | index-append データインジェスト、完全一致検索、時間範囲クエリ、地理的距離クエリ、集約 | |
GeoNames 地理データベースに基づいています。データセットは 2017 年 4 月のグローバル地名辞書(allCountries)エクスポートを使用しており、世界中の約 1,140 万件のポイントオブインタレスト(POI)レコードを含みます。 | 完全一致およびフレーズ(正確/全文)検索、集約、decay_geo_gauss_function_score、painless_static スクリプトスコアリング、desc_sort_population ソートクエリ |
テストシナリオ
インデックス作成性能テスト
このテストでは、データセット全体をクラスターにバッチ書き込みし、同時実行インデックス作成クライアント数(
bulk_indexing_clients)を変更しながら各機能バージョンの書き込みスループットを測定します。テストでは
append-no-conflicts-index-onlyテストプロシージャを使用します。このプロシージャはインデックスを作成し、検索操作を実行せずにデータをインジェストします。各テスト実行は空のインデックスから開始されます。同時実行インデックス作成クライアント数は、1、2、4、8、16、32 の順にテストされます。
検索性能テスト
データインジェスト後、
--include-tasksパラメーターを使用して検索タスクを指定し、データを再インポートせずに既存データに対して検索テストを実行します。テストは、同時実行検索クライアント数(search_clients)を 1、2、4、8、16、32 の順に変更しながら実行され、
target_throughputは 0(フルスピードストレステストモード)に設定されます。
OpenSearch Benchmark のインストール
OpenSearch Benchmark には Python 3.8 以上が必要です。
次のコマンドを実行して OpenSearch Benchmark をインストールします。
pip install opensearch-benchmark次のコマンドを実行してインストールを確認します。
opensearch-benchmark --version
テスト手順
前提条件
ご利用の PolarSearch クラスターのエンドポイント、ユーザー名、パスワードを取得し、ネットワーク接続を確認します。
curl -u <user>:<password> http://<endpoint>/_cluster/health?pretty応答ステータスの説明:
"status": "green":クラスターは正常です。
"status": "yellow":すべてのプライマリシャードは割り当てられていますが、一部のレプリカシャードが未割り当てです(例:ノードがオフライン)。クラスターは読み取りおよび書き込みリクエストを処理できますが、高可用性が低下しています。次のコマンドを使用して調査してください。
# シャード割り当て状況を確認 curl -u <user>:<password> -XGET "http://<endpoint>/_cat/shards?v"# 未割り当てシャードの詳細を表示 curl -u <user>:<password> -XGET "http://<endpoint>/_allocation/explain""status": "red":少なくとも 1 つのプライマリシャードが未割り当てのため、一部のデータが利用できません。クラスターがこの状態の場合は性能テストを実行しないでください。
性能テストの実行
次のコマンドを実行して性能テストを開始します。
opensearch-benchmark run \
--workload="<workload>" \
--client-options="basic_auth_user:<user>,basic_auth_password:<password>,verify_certs:false" \
--target-hosts="<endpoint>" \
--pipeline=benchmark-only \
--results-file="path/to/result_file.md" \
--kill-running-processes \
--workload-params="number_of_replicas:<num_replicas>,number_of_shards:<num_shards>,bulk_indexing_clients:<num_indexing_clients>,search_clients:<num_search_clients>,target_throughput:0"
# オプションパラメーター
# --test-procedure="<test_procedure_name>"
# --include-tasks="<task_names>"一般的なコマンドラインパラメーター:
パラメーター | 説明 |
--workload | テストワークロードの名前(例: |
--test-procedure | テストプロシージャの名前。書き込み専用テストの場合は 説明
|
--include-tasks | 指定した場合、リストされたタスクのみを実行します。インデックスの削除・作成・データインジェストのステップをスキップし、既存データに対して検索テストを実行できます。 |
--client-options | クラスターへの認証情報。 説明
|
--target-hosts | テスト対象クラスターのエンドポイント。 |
--pipeline=benchmark-only | OpenSearch Benchmark に外部の PolarSearch クラスターを使用するよう指示します。 |
--results-file | テスト結果の出力パス。結果は Markdown フォーマットで保存されます。 |
--kill-running-processes | 以前の実行で残っている OpenSearch Benchmark プロセスを自動的に終了します。 |
--workload-params | ワークロードの Jinja2 テンプレートに実行時パラメーターを注入するために使用されるキーと値のペアのカンマ区切りリストで、デフォルト値を上書きします。 |
ワークロードパラメーター:
パラメーター | 説明 |
number_of_replicas | インデックスのレプリカシャード数。 |
number_of_shards | インデックスのプライマリシャード数。 |
bulk_indexing_clients | 同時実行インデックス作成クライアント数。 |
search_clients | 同時実行検索クライアント数。検索テスト時に適用されます。 |
target_throughput:0 | レート制限を無効にし、テストをフルスピードで実行してクラスターの最大検索スループットを測定できるようにします。 |
テスト結果
各テスト完了後、OpenSearch Benchmark はコンソールに結果の概要を出力し、--results-file パラメーターで指定されたファイルに詳細な結果を書き込みます。
メトリック | 説明 |
平均スループット | テスト中の平均スループットで、単位は ops/s(1 秒あたりの操作数)です。
|
p50 レイテンシー | 50 パーセンタイルレイテンシー(中央値)。すべてのリクエストの半数がこの値より速く完了し、典型的なリクエストレイテンシーを反映します。 |
p90 / p99 レイテンシー | 90 パーセンタイルおよび 99 パーセンタイルレイテンシー。これらの値はロングテールリクエストのレイテンシーを反映し、サービス安定性の重要な指標です。値が低いほど高負荷時のレイテンシー分散が小さくなります。 |
サービス時間 | リクエスト送信から応答受信までの実際の処理時間で、キューイング時間を除きます。クラスターの純粋な処理時間を反映します。このメトリックにも p50、p90、p99 などのパーセンタイル値が含まれます。 |
エラー率 | テスト中に失敗したリクエストの割合。有効なテスト結果ではエラー率が 0 % である必要があります。0 以外の値は、現在の負荷下でクラスターがエラー(サーキットブレーカーやタイムアウトなど)を発生させており、そのテスト実行のデータが信頼できないことを示します。 |
詳細なテスト結果については、「PolarSearch 1.0 性能テスト結果」および「PolarSearch 3.0 性能テスト結果」をご参照ください。