0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WebアプリケーションとCPU・メモリの考え方

0
Posted at

結論

「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・静的サイトなど、どんなシステムでも同じ考え方で設計できるようになる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?