結論
「WordPressだから4コア」「Laravelだから2コア」のようには決められない。
CPUやメモリは、
- 1リクエストでどれくらいCPUを使うか
- 同時アクセス数
- キャッシュ率
によって決まる。
つまり、
必要なCPU
=
1リクエストの処理量
×
同時アクセス数
×
キャッシュ率
Webアプリケーションごとの特徴
| システム | CPU負荷の傾向 | 理由 |
|---|---|---|
| 静的HTMLサイト | ★☆☆☆☆ | nginxがHTMLを返すだけ |
| API(単純なJSON) | ★☆☆☆☆~★★☆☆☆ | DB検索程度なら軽い |
| WordPress | ★★★☆☆ | PHP・DB・プラグインが動く |
| Movable Type(静的公開) | ★☆☆☆☆ | 公開時だけHTML生成、閲覧時は静的 |
| Laravel | ★★☆☆☆~★★★★☆ | 処理内容による |
| CakePHP | ★★☆☆☆~★★★★☆ | 処理内容による |
| Django | ★★☆☆☆~★★★★☆ | 処理内容による |
| Drupal | ★★★☆☆ | WordPressと同様CMSで比較的重い |
静的サイト
利用者
↓
nginx
↓
HTML返却
終了
特徴
- PHPなし
- DBなし
- CPU使用量は非常に少ない
- メモリも少なく済む
一般的には2コア程度でも十分なケースが多い。
WordPress
利用者
↓
nginx
↓
PHP
↓
WordPress
↓
Plugin
↓
MariaDB
↓
HTML生成
↓
返却
特徴
- PHPを毎回実行する
- SQLも実行する
- プラグインが増えるほど処理も増える
キャッシュがないとCPUを使いやすい。
Movable Type(静的公開)
記事更新
↓
HTML生成
↓
保存
閲覧時
利用者
↓
HTML返却
終了
特徴
公開時だけCPUを使う。
閲覧は静的HTMLなので非常に軽い。
Laravel / CakePHP / Django
利用者
↓
Webサーバー
↓
アプリケーション
↓
DB
↓
JSONまたはHTML
LaravelやDjangoだから重いわけではない。
重要なのは
アプリケーションが何をしているか。
軽い例
SELECT 1件
↓
JSON返却
CPUはほとんど使わない。
重い例
PDF生成
画像変換
CSV10万件出力
AI推論
CPUを大量に使う。
APIサーバー
軽いAPI
GET /user/1
↓
SELECT
↓
JSON返却
2コアでも十分なことが多い。
重いAPI
画像生成
PDF生成
動画変換
AI処理
8〜16コア以上必要になることもある。
CPUコア数は何で決まる?
システム名ではなく、
以下の3つで決まる。
① 1リクエストの処理量
×
② 同時アクセス数
×
③ キャッシュ率
同じ100アクセスでも違う
ケース1
静的HTML
1000アクセス/秒
CPU使用率は低い。
ケース2
WordPress
100アクセス/秒
FastCGI Cacheあり
PHPが動かないためCPUは低い。
ケース3
Laravel
20アクセス/秒
PDF生成
CPU使用率は非常に高い。
設計者は最初に何を考える?
システム名を見る前に、
まず以下を確認する。
静的?
動的?
PHP?
Python?
DBを使う?
キャッシュできる?
処理時間は?
同時アクセスは?
その後に、
CPU
↓
Memory
↓
Disk
↓
Network
を考える。
インスタンスタイプを選ぶときの考え方
悪い考え方
WordPressだから4コア
良い考え方
ピーク時100 req/s
↓
FastCGI Cacheあり
↓
PHPは10 req/s程度
↓
PHP Worker10本
↓
CPU4コアで十分そう
覚えておくべき考え方
CPUコア数は「システム名」で決まるものではない。
設計では、
処理内容
↓
処理時間
↓
同時アクセス数
↓
キャッシュ率
↓
CPU・メモリ
↓
EC2インスタンスタイプ
という順番で考える。
これができるようになると、
WordPress・Laravel・Django・API・静的サイトなど、どんなシステムでも同じ考え方で設計できるようになる。