Amazon Web Service 負荷試験入門を読んだ

「Amazon Web Service 負荷試験入門」という本を読みました。
その感想を書きたいと思います。

負荷試験の重要性

まず負荷試験とは

  • 可用性
  • 冗長性

を確認するための試験です。
しばしばスケジュールの都合でスキップされたり適当なシナリオで実施されたりと
軽視されがちな試験であります。

ただそれは間違いで、
昨今のWebアプリケーションは、可用性とパフォーマンスが求められています。
どれだけ質の高いサービスを作っても、通信がつながらない・遅いなどでサービスの信頼性が下がるためです。

つまり可用性とパフォーマンスは要件として満たされなくてはならない「機能」であり、それに対する試験なのが「負荷試験」です。
そのようなことを再認識させてくれるのが本書です。

上記のような軽視のされ方は、第1章「間違いだらけの負荷試験とWebシステムの失敗事例」でもかなり具体的に取り上げられています。
このケーススタディを見て「自分もだ!」と共感する方もいらっしゃるかもしれません。

負荷試験の実施方法

負荷試験を体系的に扱っている書籍は、2017年11月現在この書籍しかありません。
本当にありがたいですね!!

AWSを対象にしており、一部AWSサービスについての記載がありますが
「負荷試験」自体を体系的に扱っており、AWSを使用していない方も非常にためになるものだと思います。

さて、本書では以下のようなことを扱っています

  • いかに負荷試験が重要であるか
  • 負荷試験の目的とは
  • どのように負荷試験をするのか(ツールの紹介など)
  • どのようなシナリオで実施するべきか
  • うまく負荷がかからないときの原因
  • レポートの書き方

負荷試験の重要性は知りつつも、どのようにシナリオを組み立てればいいかがわからない、という疑問を一気に解決してくれました。

また負荷試験の実施方法は以下のようにすると良い と書かれていました。

  1. ツールや環境の検証
    • 攻撃ツールの攻撃力の検証
  2. Webフレームワークの性能の検証
    • フレームワークで「Hello Word」的なアプリ作ってそれに負荷かける など
  3. DB参照系の性能の検証
    • DBの参照しか行わないページへの負荷をかける
  4. DB更新系の性能の検証
    • DBの更新を行うページへの負荷をかける
  5. 外部サービス連携の性能の検証
    • 外部サービス(S3など)と連携するページへの負荷をかける
  6. シナリオ試験
    • ユーザが行う行動のシナリオを作成し負荷をかける
  7. スケールアップ/アウト試験
  8. 限界性能テスト

このような順番で行うことで、ボトルネックを特定しやすくします。

これらの各項目の具体的なやり方や、負荷が思うようにかけられない場合の原因など事細かに記述されています。
原因については書かれていると「まぁそうだよね」と思ったりするんですが
いざ負荷試験をやっていると、その原因がぱっと思いつかないことが結構あります。

本書のように考えられる原因をまとめてもらえると、負荷試験が非常にはかどります。

攻撃ツールについて

本書では以下の攻撃ツールについて扱っています。

  • JMetter
  • Locust
  • ApacheBench

第10章「負荷試験実践のケーススタディ」では、JMetterとLocustを使用したケーススタディが載っています。
そして第11章の「巻末資料」でケーススタディで使用したテストケースのシナリオがすべて記載されています!
JMetterであれば、GUIでのシナリオの作成方法だったり、LocustだったらPythonのシナリオファイルが記載されています。

自分も攻撃ツールはLocustを使用しているのですが、ネット上でも資料が少ないです。
そのノウハウが本書では得られたため非常に参考になりました。
(というか自分もそのノウハウをオープンしていかないとなと思いました。。。)

最後に

なんとなく負荷試験をやっていたり、スケジュールの都合で負荷試験をキャンセルしたり(されたり)された方は、まずこの本を読むことを強く勧めます!!
そしてプロマネでもなんでもいいので、偉い人に負荷試験の重要性を説いてスケジュールに負荷試験を入れてもらいましょう!

では!