障害テスト(Failure Testing)はマイクロサービスの運用上,重要な部分であるべきだ – 先日Microservices Practitioner Summitで行なったプレゼンテーションの中で,Kolton Andrus氏はこのように述べた。サービスが期待した通り動作することの確認は,サービスの停止を防ぐために必ず実施されなくてはならない。
NetflixのソフトウェアエンジニアであったAndrus氏は,障害テストをワクチンに例える。有害なものを体内に少量注入することで,それに対する免疫を作り上げるのだ。このモデルは特にマイクロサービスの世界にマッチする,と氏は考えている。マイクロサービスに有害なものを少量注入して振る舞いを確認し,それに対する免疫を構築しようというのだ。
障害テストのデメリットは,それによって影響が生じるかも知れない点にある。何かを壊したり,ユーザに影響を与える可能性は確かにある。しかしながら,起こり得る最悪の自体が発生したとしても,それはさほど重大なものではなく,管理可能な範囲であると考えられる上に,最善の結果としては素晴らしいものが期待できるのだ。
障害テストを行なう場合,Andrus氏はまず障害シナリオを作成して,予想される障害とシステム停止の可能性を検討する作業を行なう。“何が心配か”あるいは“どんな問題が起こり得るか”,といった質問を行なうことで,少しでもよい準備ができるはず,という考えからだ。障害の発生する可能性について考察することにより,時間を掛けて検討すべきインフラストラクチャ内の共通的な事象を見つけられるようになる。予測できない障害は常に存在するので,すべてに備えておくことは不可能だが,対応の準備をしておくことによって問題の影響を軽減することは可能なはずだ,と氏は言う。
優先順位付けとリスクアセスメントに有用と氏が考える質問は,“障害によるコストはどの程度のものか”,というものだ。これにより,起こり得る問題点が何かを検討するだけでなく,起こる可能性の高い問題点の費用便益分析が実行可能になり,最高の結果を得るためにはどこに時間と資金を投入すればよいのかを判断する上での一助となる。
Andrus氏はさらに,運用時のテストの重要性も強調する。 テスト環境のみのテストでは,運用時の設定やネットワークやハードウェアがテストの対象にならない。氏はAWS(Amazon Web Services)の優秀なエンジニアであるJames Hamilton氏のことばを紹介する。
運用環境でのテストを行なわなければ,障害時にもサービスの運用が継続可能であるという確信を持つことはできません。運用テストがなければ,リカバリも必要時に動作しないでしょう。
多大な労力を使って開発した緩和策が運用環境でのテストで失敗するのであれば,後の運用時になってそれらが機能しないか,さらに悪ければサービス停止に陥ることになるかも知れない。それは望まれた結果ではないはずだ。
この記事を評価
- 編集者評
- 編集長対応