ちょっと話題の記事

[書評] クラウド時代の負荷試験の基本が学べる一冊 – 「Amazon Web Services負荷試験入門」

AWSなどクラウド上のシステム負荷試験について解説した書籍「Amazon Web Services負荷試験入門」のレビュー記事です。負荷試験の基本知識、ツール、PDCAサイクルを使った具体的な進め方が詳細に解説されています。
2024.05.27

こんにちは、ゲームソリューション部の入井です。

今回は、AWS等のクラウド上に構築したシステムへの負荷試験について、具体的な手順や試験中に発生しがちな課題とその解決方法等について解説した書籍「Amazon Web Services負荷試験入門」を読んだ感想を書いていきます。

感想

Chapter 1 間違いだらけの負荷試験とWebシステムの失敗事例

タイトルの通り、負荷試験の進め方のよくあるアンチパターンが架空の事例を使って紹介されています。

打ち合わせ、試験準備、試験実施、試験レポートといった段階毎に登場人物同士の対話形式で進んでいくのですが、「お客様の意向で今回は負荷試験しないよ。」「(攻撃ツールは)どれでも一緒でしょ?」というように誤った内容の発言は太字で記載される形になっています。具体的に何故誤りなのかという解説は巻末に回されているので、どうして今の発言が誤りなのかを自分で考えてから解説を読むことで、アンチパターンである理由をより深く理解することができました。

また、一定以上の負荷をかけた際のシステムの挙動を把握していなかったことが原因で誤認逮捕が発生した事例等、実例を元に適切な負荷試験を実施しなかった場合にどのようなことが起こりうるのかについての解説もあり、非常に参考になりました。

Chapter 2 Webシステムの設計手法

サーバーリソースを気軽に増減させることが困難だったオンプレミスサーバー中心の時代から、数分でサーバーリソースを増やしたり負荷に応じて自動的にリソースをスケールできるようになった現在のクラウド時代への移り変わりによって、システムの可用性やスケール性がどのように向上してきたかが具体的に解説されています。

ロードバランサーの利用どころかサーバーが冗長構成になっていない(予算的にできない)ことが普通だった時代と比較すると、個人レベルでもある程度の可用性やスケール性が備わったインフラを簡単に構築できるようになった現代がいかに便利な時代になったかを実感しました。

Chapter 3 負荷試験の基本知識

スループット、レイテンシという負荷試験の指標に使う数値の意味や、負荷試験というものがどういう目的で行われる試験であるかといった、負荷試験業務を行う上で必須となる知識についての解説がありました。

負荷試験の目的については、クラウドが使われるようになった現代はシステムが負荷に応じてちゃんと性能を伸ばせるようになっているのか、つまりはちゃんとスケール性を持っているかを確認することが重要な目的になるとのことでした。

Chapter 4 負荷試験のツール

負荷試験のために使用するツールとして、以下のようなツールについての解説がありました。

  • 攻撃ツール
    • Apache Bench
    • Apache JMeter
    • Locust
  • モニタリングツール
    • top, netstatコマンド
    • Amazon CloudWatch
  • プロファイリングツール
    • Xhprof
    • New Relic

実際の負荷試験でどのようなソフトウェアが必要になるのかについて、具体的なソフト名を挙げて使用例とともに解説されており、参考になります。

Chapter 5~10 負荷試験のPDCAと具体的な実施方法の解説

ここから、実際の負荷試験の進め方についての解説が始まります。この本では、負荷試験の全体的な進め方として以下のPDCAサイクルを回す手法が採用されています。

  • Plan 負荷試験の計画
  • Do 負荷試験準備、試験実施とボトルネックの特定
  • Check/Action 原因分析とシステムの改善作業
  • Action 負荷試験レポートの作成

Chapter5~9では、各章で上記のPDCAの1ステップごとにどのように進めていくかを解説しています。

そして、この本の中で最も分量があり内容も濃いChapter10では、上記のPDCAの進め方で実際に負荷試験を行った事例が2種類紹介されます。

システム自体はこの本のために作成されたサンプル的なものですが、1つ1つどのようなステップで試験を進めたが詳細に書かれており、試験ごとのスループットやレイテンシ、使用したインスタンス構成の記録も細かく見ることができるようになっています。

また、WebサーバのKeep-Alive設定が有効になってなかったり、DBの同時接続数が不足していたりといった試験の際に発生しがちな問題についても、実際にどのように試験を進める上で障害になり、どのように解決すれば良いかが具体的な例で解説されています。

負荷試験という作業は、いざ実施しようとしても進め方が分からなくなりがちなため、このように体系立てて進め方の例が解説されているのは非常にありがたいです。実際の試験時は、試験対象のシステムや人員の状況等によりベストな進め方が変わってくるとは思いますが、ここで紹介されているような例を叩き台にすることで、計画を立てるのに必要な時間をかなり短縮できると思います。

また、各ステップで行うべきタスクやチェックすべき事項、試験が上手くいかない時に見直すべき項目等もチェックリスト形式で細かく記載されています。例えば、攻撃ツールから高い負荷をかけられない時は、以下のような項目の見直しが必要と解説されています。

  • 攻撃ツールの設定が悪い
    • 同時アクセス数が少なすぎる
    • 同時アクセス数が多すぎる
    • 詳細すぎる結果レポートを利用している
  • 攻撃ツールの限界に達している
  • 攻撃ツール設置ネットワーク構成に問題がある

このようなチェックリストが各試験の各ステップ毎に記載されているので、この本を参考に試験を進めることで、いざ試験を実施しても肝心なところがチェックできていなかったり、ボトルネック箇所が特定できず試験が進まなくなるという事態が発生する可能性をかなり低めることができると思います。

最後に

負荷試験は、システム(特に大規模なアクセスが見込まれるもの)をリリースするにあたって非常に重要なステップとなるのですが、恐らくその実施難易度の高さが原因でWeb上を探しても具体的な進め方が解説されているサイトは少なく、取り扱っている書籍も多くはありません。

そのため、一冊の中で負荷試験の基本的な考え方や具体的な進め方が豊富な実例と共に解説されているこの書籍は、とても有用で貴重だと思いました。

発売は2017年と少し古い書籍ですが、クラウド上のシステムへの負荷試験を行う上で重要な点は当時も今も変わっておらず、これから負荷試験についてしっかりと学んでいきたいという方はこの本を出発点にすると良いと思います。