🚀

[翻訳] OpenSearch Benchmark でレッドラインテストが利用可能に

に公開

https://opensearch.org/blog/redline-testing-now-available-in-opensearch-benchmark/

OpenSearch クラスターのスループット限界を自動的に特定 — 推測は不要です

「自分のクラスターは実際にどれだけのトラフィックを処理できるのか?」これは、多くの OpenSearch ユーザーが本番環境に移行する前に直面する疑問です。これまで、クラスターのレッドライン (許容可能なサービスレベルを維持できなくなるポイント) を見つけるには、試行錯誤、推測、または時間のかかる手動チューニングが必要でした。

OpenSearch Benchmark のレッドラインテストを使用すると、リアルタイムのクラスターパフォーマンスに基づいてクライアント負荷を動的にスケーリングし、クラスターのスループット上限を自動的に特定できるようになりました。

閾値を推測する課題

OpenSearch Benchmark は最近、ベンチマーク実行中にクライアントとスループットをランプアップするサポートを導入しました。しかし、ユーザーはベンチマーク時に以下の作業を行う必要がありました。

  • クラスターを破壊する負荷量を推定する
  • その推定値を適切なクライアントスレッド数と目標スループットに変換する
  • OpenSearch Benchmark のログやクラスターダッシュボードで障害を手動で監視する
  • エラー数に基づいて負荷推定値を調整する (障害がなければ上げ、多数発生すれば下げる)
  • 最大持続可能閾値に達するまで、異なるパラメータと負荷でベンチマークを再実行する
  • 限界点と最大定常状態のワークロード強度が特定されるまで繰り返す

これらの時間のかかる作業により、最大持続可能スループットを正確に特定することが困難でした。

構築したもの: レッドラインテスト

レッドラインテストは以下を自動化します。

  • リクエストスループットと障害をリアルタイムで監視する制御モジュール
  • 観測された動作に基づいてクライアントを一時停止または再開する自己調整負荷メカニズム

これにより、OpenSearch Benchmark は以下のアクションを実行できます。

  • アクティブなクライアントをランプアップする
  • 障害の発生を検出する
  • 自動的にスケールバックし、回復を待ってからテストを再開する

結果として、OpenSearch Benchmark は 1 回のテスト実行でクラスターのレッドラインを特定できるようになりました。

仕組み

以下の図にOpenSearch Benchmark におけるアクターベースの実行フローの概要を示します。ベンチマークタスクが複数のワーカーアクターにどのように割り当てられ、実行されるかを示しており、各ワーカーアクターはターゲットの OpenSearch クラスターにリクエストを送信するクライアントグループを管理します。

OpenSearch Benchmark システムアーキテクチャ

  • BenchmarkActor: ベンチマークプロセスを開始します
  • WorkerCoordinatorActor: Allocator からの割り当てマトリックスを使用して、ワーカーのライフサイクルとタスク配分を管理します
  • Workers (Worker1 〜 WorkerN): AsyncIoAdapter を通じてクライアントを管理し、タスクを実行します
  • Clients (Client1 〜 ClientN): AsyncExecutor クラスを使用して、ターゲットホストに対して並列で操作を実行します

OpenSearch Benchmark はアクターモデルを使用しており、これは並行分散システムを分離されたメッセージパッシングコンポーネントで構成します。

通常、OpenSearch Benchmark は固定数のクライアントで開始し、各クライアントはテスト期間中一定のレートでリクエストを送信します。新しいランプアップ機能により、テスト中にクライアント数を自動的に調整できます。負荷を増やすためにクライアントを追加したり、減らすために削除したりできます。

これにより、単一の固定レベルではなく、変化する負荷圧力に対して OpenSearch クラスターがどのように応答するかを観察でき、実際のトラフィックパターンを反映したより現実的で柔軟なベンチマークが可能になります。

タイムドモードとレッドラインロジック

OpenSearch Benchmark はレッドラインテスト用に以下の 2 つのモードをサポートしています。

  • イテレーションモード: 固定回数のイテレーションでタスクを実行
  • タイムドモード: 固定期間でタスクを実行

レッドラインテストはタイムドモードでのみ動作します。以下のアクションを実行します。

  1. エラーが発生するまでクライアント負荷をランプアップする
  2. 障害に応じてスケールダウンする
  3. 回復を待ってから再度ランプアップする

フィードバックコンポーネントによるクライアント管理

レッドラインテスト中、フィードバックアクターがリアルタイムでテストのエラーを監視します。各ワーカーとそれに関連するクライアントを追跡し、ステータスを実行中または一時停止としてマークします。

システムが正常な場合、クライアントは実行中状態を維持し、リクエストの送信を続けます。

障害が蓄積し始めると、フィードバックアクターは個々のクライアントを一時停止してシステムへの圧力を軽減できます。

安定性が回復すると、一時停止されたクライアントは実行中状態に戻ります。

このアプローチにより、ベンチマークは問題が発生したときに負荷の一部を自動的にスロットリングし、状況が改善したときに再びランプアップできます。これにより、クラスターが断続的な問題をどのように処理するかについて、より現実的なビューが得られます。

技術的な詳細については、レッドラインテストに関する RFC を参照してください。

レッドラインテストモードでワークロードを実行する

期間、目標スループット、クライアント数を定義するタイムドテストプロシージャを作成することで、レッドラインテストを開始できます。設定が完了したら、単一のコマンドでベンチマークを実行できます。オプションで、クラスターの容量に合わせて最大クライアント数をカスタマイズすることもできます。

以下のような設定でタイムドテストプロシージャを作成します。

{
  "name": "timed-mode-test-procedure",
  "schedule": [
    {
      "operation": "keyword-terms",
      "warmup-time-period": {{ warmup_time | default(300) | tojson }},
      "time-period": {{ time_period | default(900) | tojson }},
      "target-throughput": {{ target_throughput | default(20) | tojson }},
      "clients": {{ search_clients | default(20) }}
    }
  ]
}

ワークロードに合わせてデフォルトパラメータ値を変更できます。

テストプロシージャの準備ができたら、以下のコマンドでベンチマークテストを実行できます。

opensearch-benchmark execute-test \
  --pipeline=benchmark-only \
  --target-hosts=<your-opensearch-cluster> \
  --workload=<workload> \
  --test-procedure=<your-timed-mode-test-procedure> \
  --redline-test

ユーザーは以下のフラグを使用して、最大クライアント数、クライアントランプアップレート、バックオフ時に一時停止するクライアントの割合、スケールアップを再開するまでの待機時間などのレッドラインテストパラメータをカスタマイズできます。

  • --redline-scale-step: 各スケーリングイテレーションで一時停止を解除するクライアント数を指定します (整数値)
  • --redline-scaledown-percentage: エラー発生時に一時停止するクライアントの割合を指定します (浮動小数点値)
  • --redline-post-scaledown-sleep: スケールダウン後にフィードバックアクターがスケールアップを開始するまで待機する秒数を指定します (整数値)
  • --redline-max-clients: レッドラインテスト中に許可される最大クライアント数を指定します。設定されていない場合、OpenSearch Benchmark はテストプロシージャで定義されたクライアント数をデフォルトとして使用します (整数値)

OpenSearch Benchmark は以下のログ情報をキャプチャします。

  • テスト中:
    • 現在のクライアント数
    • 一時停止/再開イベント
    • スケールバックの理由
  • テスト後:
    • 到達した最大クライアント数
    • サービス時間、スループット、レイテンシなどのテスト結果メトリクスのサマリー

以下のチャートは、OpenSearch Benchmark のレッドラインテストがタイムドテスト中にクライアント負荷を段階的に増加させる様子を示しています。各ステップは制御されたランプアップを表し、パフォーマンスが低下し始めるタイミングを観察できます。この例では、スループットがプラトー (横ばい) に達するまで着実に上昇しており、クラスターのレッドラインに到達したことを示しています。この自動フィードバックループにより、推測が不要になり、1 回の実行で正確な負荷テストが可能になります。

レッドラインテストのスループットチャート

今後の予定

レッドラインテストの今後の改善には以下が含まれる可能性があります。

  • バイナリ検索や指数検索などのよりスマートなランプアップ戦略
  • リクエスト障害だけでなく、レイテンシやサービス時間に基づくスケーリング

レッドラインテストは OpenSearch Benchmark で利用可能になりました。この機能が役立つことを願っています。OpenSearch フォーラムや今後の OpenSearch Benchmark コミュニティミートアップでフィードバックをお待ちしています!

OpenSearch Project

Discussion