1. NieR Re[in]carnationのシステム構成
ここから講演の本題へ。省略された形ではあるが、以下はアプリケーションサーバーのシステム構成の概略図となる。
2.負荷試験の効果的な運用
負荷試験とは、想定されるユーザー数に対してサービスが提供可能であることを保証するものである。例えば、APIサーバーの台数やインスタンス、データベースのサイズは適切かといった部分の正当性のチェックであると説明した。
また、「実運用に近いユーザーデータを再現するのが難しい」。これは、認証情報の適切な作成や、実運用データは実際にリリースしないと再現しづらいという理由がある。苦労して用意したデータが最新の試験環境では動かないことも。
さらに、外部連携系のAPIなどが存在した場合は、上手くフックする必要があるなど「試験するのが難しいAPIが存在しがち」という問題もある。
▲上記はGatling上から出力したグラフとなる。毎秒のリクエストや同時に存在しているユーザーの数などを表示してくれる機能がある。
ここからは実際に負荷試験で用いたシナリオの種類について紹介していく。
2つ目は「スパイク試験」について。こちらの目的は瞬間的な高付加時のパフォーマンスをチェックするものとなる。例えば、新しい施策のリリース時や、時刻予告した全体メンテナンス開け、キャッシュが存在しない状態での瞬間的にアクセスした場合、日付変更時など特定時刻で内部的に処理が増えるタイミングに負荷が瞬間的に増大するケースがある。こういったものをシミュレーションするシナリオとなる。
ここまでのまとめとして斎藤氏は、まずはシナリオを作成することが大事だが、そのシナリオが壊れない仕組みを整備することも同様に大切と話す。可能な範囲の作業は自動化し、作業者の負担を軽減することが持続可能な(正当性担保可能な)試験に繋がると語った。
3.負荷試験を踏まえた改善項目とシステムの安定性評価
ここからは負荷試験を踏まえた改善項目とシステムの安定性評価に関する話を展開。まず始めに、実際に行われた改善を以下のように紹介した。
そのほか、細かい改善として、共有キャッシュのTTLの仕様が曖昧であったため、TTLを必要以上に長くする傾向にあったので適切なTTL設定を行うことでキャッシュ溢れのような状況を防止したことや、一部トランザクションのログの切り分けなどを行ったことを紹介した。
▲システムの構成変更に関しては議論に挙がったが、作り変えやすいシステムとなっていたため問題なく変更を行うことができたという。
こうした改善を行っていった結果、コンポーネントを省略するということは、障害モードを削除するのと同じであると斎藤氏は述べる。削除することによってコンポーネントが削減していた障害モードを増やすことになるが、そのRPN値が低いことを意味するため、使われていない・使用頻度の低いコンポーネントを放置することは障害モードを増やしているのと同じであるためであると斎藤氏は解説した。
また、KubernetesからECSに移行したことにより、LBがマネージドになり、アウトソースによって障害のRPN値が下がった。結果としてRPN値の高い障害モードを削減することとなり、システム全体の安定性に寄与していることが分かったとまとめた。
最後に、本講演のまとめとしてポイントとなっている部分を振り返り、講演の締めとした。
会社情報
- 会社名
- 株式会社アプリボット
- 設立
- 2010年7月
- 代表者
- 代表取締役社長 浮田 光樹
- 決算期
- 9月