天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

負荷テストいつ向き合う? 基礎から実践事例までに参加してきた

https://findy.connpass.com/event/327076/

こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。(なぜか埋め込み画像が表示されない...)

会の概要

以下、イベントページから引用です。

システムの複雑化が進む今日、システムのパフォーマンスを確保するためには十分な負荷テストが欠かせません。一方で、テスト環境の準備に大きな労力を要する、自動化が上手く進まずに継続的なテスト実行が困難になるといった課題を耳にします。

本イベントでは、ご登壇者の方々から、負荷テストの考え方や課題、実際の負荷テスト改善の事例やオススメのツールについてをお話いただきます。参加者の皆様が改めて負荷テストとその重要性を見つめ直すきっかけとなるイベントを目指します。

会の様子

負荷試験マニアクス

負荷試験に関する定量的データ

最初に、負荷試験Nightというイベントで151人に負荷試験に対してアンケートをした結果の説明がありました。

  • 75%くらいの人たちが負荷試験をしたことがある
  • 8割くらいの人がリリース前にやっている
  • 負荷試験の利用ツールとしてはJMeterを使っている人が多い(6割くらい)
  • 課題感としては、期間が足りないことやできるエンジニアがいないという課題が8割以上を占める。システム開発とは異なる技術スタックが必要なことが理由
  • 試験時は環境関連の困りごとが多い
負荷試験をする理由

負荷試験の目的はクラウドが台頭してきてから割と変わりつつあり、応答性能の推測や高負荷時の状態確認から、システムのスケール性やシステムの特性を確認したいという要求が増えてきているという話が出ていました。

近年の負荷試験の傾向

ツールの選択肢が増えてきて、より何が求められるのかが分からなくなってきたり、試験のサイクルスピードが高速化し、より高速かつ頻繁に試験されているそうです。

最近はAmazon Web Service負荷試験入門などでは、負荷試験のカタがまとめられているので、そちらも参照してほしいということでした。

失敗事例

実際に負荷試験をやった中での失敗事例として、以下のような話が紹介されていました。

  • 試験結果の評価ミスがあって、リリース後に即強制メンテナンスになった
  • トラフィックの見積もりをミスしたことで、規模を過剰に見積もりしてしまった
  • 大規模バージョンアップした際に、試験シナリオ管理やデータ管理が曖昧だった

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

事例のコンテキスト説明

小中学生を対象ユーザーとしているため朝のトラフィックが多いことが分かっているという、事例の前提にあるコンテキストの説明がありました。

負荷試験の変遷

最初はAkka Cluster Shardingの仕組みを外す際に手動で行ったのがスタートだったということでした。
シナリオとしては、朝のピーク時を想定して複数のユーザーがアクセスするようなユースケースを想定していたそうです。
また、必要な手順が多かったり実施手順に差が出てしまったりしたり、メトリクスが数多く存在していたりしたことも課題だったということでした。

そのため、GitHub Actionsを使うようにしたということで、投稿結果もSlackで見れるようにしたということでした。また、サマリーダッシュボードを独自に作成することで、ユーザーも開発者も守られるような負荷試験が実行できるようになったそうです。

こういった改善を推進した結果、サーバーが不安定になるような事象は95%削減されたそうです。

今後やりたいこと

現状は一つの観点ごとにしか負荷試験を回せないため、複数の負荷試験を同時に回せるようにしたいということでした。

Rustではじめる負荷試験

Gooseの紹介

Rust製の負荷テストフレームであり、ビルドしたシングルバイナリで動く可搬性やカスタマイズ性が高いフレームワークだという話がありました。

また、Locustと比べて11倍ほどトラフィックを生成できてスケーラビリティが高い上にtag1が開発しているので今後の運用安定性にも期待ができるということです。

実装例の説明

コードレベルでの実装例やメトリクスの出力形式の説明などがありました。

Gooseの良いところ

メトリクスやグラフがHTMLで見ることができて、シナリオごとに可視化されるということでした。

次に、Gooseはリクエストやエラーといったログを出力することができるという話がありました。

最後に、負荷のかけ方を具体的に指定できるという話がありました。(XX秒間でXX人のユーザーに対してMaxトラフィックはXX人などと指定することができる)

会全体を通した感想

LT形式のイベントは、どうしても各発表のつながりが薄くなってしまうことが多いのですが、今回は全体像から実践事例で大切にした効果や取り組みに対する考え方に進み、最後に具体的な実装例といったような形で見事に内容が繋がっていたのが非常に良かったです。