Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cloud Run で高トラフィックなシナリオの負荷試験をする際の参考書

Cloud Run で高トラフィックなシナリオの負荷試験をする際の参考書

私は普段、業務で広告配信システムの構築に携わっています。広告配信システムでは、高トラフィックなシナリオにおいても高速なレスポンスを求められることが多く、非常に高いパフォーマンス要件を満たす必要があります。
具体的には、10,000 QPS(リクエスト/秒) のトラフィックに対応し、100ミリ秒以内のレスポンスを実現することを目指しています。

今回、これらの要件を満たすために Cloud Run(内部実装は Go)を利用したシステムを構築し、負荷試験を行いました。本記事では、その負荷試験の過程で考慮したポイント、留意すべき点、そしてハマりがちな課題についてご紹介します。これから同様の検証を行う方々の参考になれば幸いです。

Keigo Ibaraki

December 19, 2024
Tweet

More Decks by Keigo Ibaraki

Other Decks in Programming

Transcript

  1. 1負荷試験を始める前 B 達成したい条件の明確6 B コストがどれくらいかかるの B 可視化(ダッシュボード) 2負荷試験中に考え、改善していったこと B 4つのオートスケールのポイントを知ƒ

    B 平均 CPU 使用率と同時実行数を定めƒ B 最大台数と最小代数を定めƒ B クォータを正しく確認すƒ B Support の方を頼ƒ B CPU / Memory の大きさを決定すƒ B Start up Boost を使ってみる 3負荷試験を行なった後 B 最終的な負荷試験の結– B 負荷試験共有会 4課題に思っていること B オートスケールに関する柔軟Ð B サイドカーが CPU 使用率に影響すƒ B 可視化の課Æ B 継続的に負荷試験を実施するための CI パイプライ¶ B 予測不可能なリクエスト増量やワークロード アジェンダ
  2. 達成したい条件の明確化 負荷試験を効果的に進めるために明確な目標を 58 シナリオを決める w 1台のインスタンスが捌ける QPS の限界を測V w 平均

    10,000 QPS を 1時間 維持できるか確G w スパイク 30,000 QPS に耐えられるか検証 w 目標 SLI/SLO: 「リクエストの99パーセンタイル応答時間が 100ミリ秒以下であること」 w テストデータの準ƒ w リクエストの種類を分散 8 SLI / SLO を決める ¥8 データを明確にする
  3. 負荷試験中に考え、改善していったこと U 4つのオートスケールのポイントを知7 U 平均 CPU 使用率と同時実行数を定め7 U 最大台数と最小代数を定め7 U

    クォータを正しく確認す7 U Support の方を頼7 U CPU / Memory の大きさを決定す7 U Start up Boost を使ってみる 2
  4. 4つのオートスケールのポイントを知る オートスケールのポイントを頭に叩き込む AI 既存インスタンスの 1分間の平均 CPU 使用率 iI 同時実行数(Concurrency) yI

    インスタンスの最大数 ‰I インスタンスの最小数 参考:https://cloud.google.com/run/docs/about-instance-autoscaling?hl=ja
  5. 平均 CPU 使用率と同時実行数を定める 密接に関連する平均 CPU 使用率と同時実行数 FQ さらに検証を深める TQ どう設定すれば良いか?

    t 同時実行数(Concurrency)を最大の 1000 に設定す† t 負荷試験を行い、CPU 使用率が 60% に達するタイミングでの同時実行数を確認す† t 確認した同時実行数を基準に、適切な同時実行数を設定する t インスタンスの最大数を 1 に設 t CPU 使用率が 60% 程度で安定した際の同時実行数 参考:https://zenn.dev/google_cloud_jp/articles/cloudrun-concurrency
  6. クォータを正しく確認する 検証に合ったクォータを確認する 35 CPU の大きさの制限 D5 HTTP による制約 e メインコンテナ

    と サイドカー を含めて、1インスタンスあたりの最大 vCPU 数が 8 に制限 e HTTP/1.1 コンテナポートに対する 1秒あたりのインバウンドリクエスト数 に 800 という制約
  7. CPU・Memoryの大きさを決定する 最終的なスペックの決定 35 CPU の決定 @5 Memory の決定 ‚ CPU

    に関してはサイドカーのエージェントにかかる料金と比較しながらメインコンテナの cpu をより大きくする選定 ‚ Memory に関しては十分に計算しt ‚ Go は型で bit 数が決まるので、不要な大きさを確保しないように型から見直し 参考:https://go.dev/ref/spec#Numeric_types
  8. Start up boost を使ってみる $" コールドスタート B" Startup CPU Boost

    でコールドスタートの改善 参考:https://cloud.google.com/run/docs/configuring/services/cpu?hl=ja#startup-boost d 負荷が急増した際に、リクエストの処理が間に合わず遅延やタイムアウトが発生するリスクがある d 通常の CPU 割り当てに加えて一時的に CPU リソースをブーストする機 d 起動時間の短縮とコールドスタート時のレスポンス改善
  9. 負荷試験共有会  最も効果があったと思うこと 0 実際にやったこと s 負荷試験共有会を行なっF s 負荷試験の理解を深めQ s

    コスト認識の共T s 開発チームへの実践共T s ビジネス要件の擦り合わせ s チーム間でビジネス的な要件を擦り合わせるx s 「SREとビジネスの話」 参考:https://zenn.dev/oyasumipants/articles/d2a2648bbc8bc5
  10. 課題に思っていること X オートスケールに関する柔軟D X サイドカーが CPU 使用率に影響すV X 可視化の課4 X

    継続的に負荷試験を実施するための CI パイプライ X 予測不可能なリクエスト増量やワークロード 4
  11. 課題に思っていること $ オートスケールに関する柔軟性 D サイドカーが CPU 使用率に影響する G 可視化の課題 „

    Cpu 使用率が 60% で固定されている点が柔軟性に欠けると感じた... „ CPU 使用率の判定にサイドカーの CPU 使用も合算されて計算されるので影響を考慮しないといけない,,, „ メインコンテナとサイドカーの CPU 使用率を個別に表示したい...
  12. 課題に思っていること "5 継続的に負荷試験を実施するための ci パプライン Y5 予測不可能なリクエスト増量やワークロードへの対応 ‡ 新しい機能を追加した際などに ci

    で負荷試験を実施できるようにしたい ‡ 突発的なスパイク、夜間リクエスト量が低下してから再度上昇するワークロードなどこれから経験値を積みたい