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

大規模サービスの負荷試験を改善していった話

5st7
August 27, 2024
1.1k

 大規模サービスの負荷試験を改善していった話

5st7

August 27, 2024
Tweet

Transcript

  1. 4

  2. 5

  3. 負荷試験で採用したツール • k6 ◦ k6はGrafana Labsが開発している負荷試験ツール ◦ JavaScript, TypeScriptでシナリオを記述できる •

    k6-operator ◦ KubernetesのOperatorの一種 ◦ 複数クライアントからk6のシナリオを実行できる • Google Kubernetes Engine (GKE) ◦ k6-operatorを動かすために利用 11
  4. 負荷試験手動実行時代の負荷試験基盤 13 13 Load test Cluster (GKE) Datadog Application Cluster

    (GKE) ② k6リソースの マニフェストを適用 k6 runnner k6 runnner k6 runnner collect metrics, trace… Cloud SQL ① 関連するコンポーネントを起動 (CloudSQL, , Redis) Cloud MemoryStore 本番環境のデータをダンプして匿名化したもの (本番同等のデータの量・偏りを再現) 必要に応じてマイグレーションを実施 ③負荷試験を実施
  5. 負荷試験手動実行時代の課題① • 必要手順が多かった ◦ 必要なコンポーネントの起動(CloudSQL, Redis etc...) ◦ DBのマイグレーション ◦

    負荷試験のマニフェストを負荷試験用k8sクラスタにApply ◦ 終了後ダッシュボードを見て時間を絞って結果を確認 ◦ 分析結果をレポートに纏める • 人によって実施手順に差があった ◦ 実施手順の差で結果に差が出ていた ▪ 暖気運転の有無など 15
  6. GitHub Actionsによる自動化 22 GitHub Actions Load test Cluster (GKE) Slack

    Datadog Application Cluster (GKE) ③ 暖機運転/負荷試験用の マニフェストを適用 ⑤ 負荷試験の 結果を投稿 k6 runnner k6 runnner k6 runnner collect metrics, trace… ① 平日朝に 自動トリガー ① ステージング環境 更新時に自動トリガー Cloud SQL ② 関連するコンポーネントを起動 起動後にマイグレーションを実施 ① 手動でトリガー ④ 負荷試験を実施 Cloud MemoryStore
  7. GitHub Actionsによる自動化 23 GitHub Actions Load test Cluster (GKE) Slack

    Datadog Application Cluster (GKE) ③ 暖機運転/負荷試験用の マニフェストを適用 ⑤ 負荷試験の 結果を投稿 k6 runnner k6 runnner k6 runnner collect metrics, trace… ① 平日朝に 自動トリガー ① ステージング環境 更新時に自動トリガー Cloud SQL ② 関連するコンポーネントを起動 起動後にマイグレーションを実施 ① 手動でトリガー ④ 負荷試験を実施 Cloud MemoryStore
  8. GitHub Actionsによる自動化 24 GitHub Actions Load test Cluster (GKE) Slack

    Datadog Application Cluster (GKE) ③ 暖機運転/負荷試験用の マニフェストを適用 ⑤ 負荷試験の 結果を投稿 k6 runnner k6 runnner k6 runnner collect metrics, trace… ① 平日朝に 自動トリガー ① ステージング環境 更新時に自動トリガー Cloud SQL ② 関連するコンポーネントを起動 起動後にマイグレーションを実施 ① 手動でトリガー ④ 負荷試験を実施 Cloud MemoryStore
  9. GitHub Actionsによる自動化 25 GitHub Actions Load test Cluster (GKE) Slack

    Datadog Application Cluster (GKE) ③ 暖機運転/負荷試験用の マニフェストを適用 ⑤ 負荷試験の 結果を投稿 k6 runnner k6 runnner k6 runnner collect metrics, trace… ① 平日朝に 自動トリガー ① ステージング環境 更新時に自動トリガー Cloud SQL ② 関連するコンポーネントを起動 起動後にマイグレーションを実施 ① 手動でトリガー ④ 負荷試験を実施 Cloud MemoryStore
  10. GitHub Actionsによる自動化 26 GitHub Actions Load test Cluster (GKE) Slack

    Datadog Application Cluster (GKE) ③ 暖機運転/負荷試験用の マニフェストを適用 ⑤ 負荷試験の 結果を投稿 k6 runnner k6 runnner k6 runnner collect metrics, trace… ① 平日朝に 自動トリガー ① ステージング環境 更新時に自動トリガー Cloud SQL ② 関連するコンポーネントを起動 起動後にマイグレーションを実施 ① 手動でトリガー ④ 負荷試験を実施 Cloud MemoryStore
  11. GitHub Actionsによる自動化 27 GitHub Actions Load test Cluster (GKE) Slack

    Datadog Application Cluster (GKE) ③ 暖機運転/負荷試験用の マニフェストを適用 ⑤ 負荷試験の 結果を投稿 k6 runnner k6 runnner k6 runnner collect metrics, trace… ① 平日朝に 自動トリガー ① ステージング環境 更新時に自動トリガー Cloud SQL ② 関連するコンポーネントを起動 起動後にマイグレーションを実施 ① 手動でトリガー ④ 負荷試験を実施 Cloud MemoryStore Slackの投稿で 負荷試験結果が記録される
  12. 負荷試験自動実行時代のまとめ いつでも誰でも簡単に負荷試験を実行できるように! = ユーザー & 開発者の体験を守れる体制に • 手動で実施していた時の課題を以下のように改善 ◦ 実施者による手順のばらつき

    ▪ GitHub Actionsによる自動化 ◦ リリース直前になるまでパフォーマンス状況の把握が遅れる ▪ 日次/ステージング環境更新時に自動で実行する ◦ パフォーマンス情報の分析が面倒 ▪ 見るポイントを絞ったダッシュボードを作成 ◦ 手作業で記録をする負担 ▪ Slackへレポートの自動投稿 33