koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

Webアプリケーションのキャパシティプラン

についてぼんやり考えていた。難しいな。と。

WebアプリケーションのホスティングではだいたいCPUとメモリの所要量を見積もればいい感じがしている。これはだいぶ昔から変わっていない気がする。

(なお、ストレージI/Oはほとんどせず、他のホスト(DBや依存サービス)のリソースは十分である前提で無視!)

大体のWebアプリケーション実行環境では、並列実行数を指定できる。ある1回のリクエストに対するCPUとメモリ所要量と、ホスティングしている環境のCPUとメモリ量を元に並列実行数を指定すれば良い。

この際、メモリは若干悲観的に見積もった方が良い。メモリ消費が実装ないし割当量を越えるとリクエストが失敗(Out Of Memory系のエラー)したり、最悪の場合メモリスワップが発生して処理能力が大幅に落ちたりしてしまう。

CPUに関しては一瞬なら100%使用してしまっても、継続的に使用され続けなければ多少の処理遅延で済む。

これらの事情を考慮して、では自分が運用しているアプリケーションのある1回のCPUとメモリ所要量はどの程度のなのか、実行環境の並列実行数の指定はどうすればよいのか、を考えればよい。

実際の見積もり例はたまに見かけるのだけれど、改めて探すとすぐには見当たらなかった。

言うは易し、行うは難し、例がすぐ見つからないのは難しいからなのだろう。アプリケーションによって事情もだいぶ違うだろうしなぁ。などと思った。


余談として、FaaSではちょっと変わってくるはず。

AWS Lambdaではメモリだけ気にすれば概ねよいが、Azure Functionsではホスティングのプラン毎に考えることが変わる。コールドスタートの時間も厳しい(特にJavaや.NETなどは)し、現状はWebアプリケーションホスティングの第一選択肢はFaaSではないと考えている。