なぜこの順番で学ぶのか
サーバーエンジニアとして最終的に目指すのは、
- CPU使用率が高い理由
- なぜ4コア必要なのか
- なぜメモリが足りないのか
- なぜFastCGI Cacheで速くなるのか
を仕組みから説明できることである。
そのためには、WordPressだけを見るのではなく、CPUの物理的な動作まで理解するとすべてが一本の線でつながる。
コンピュータは7階層で理解する
WordPress
↓
PHP
↓
C言語
↓
機械語(CPU命令)
↓
CPU(コア)
↓
論理回路
↓
トランジスタ
↓
電子(電気)
WordPressで実行している処理も、最終的には電子の流れになる。
レベル0 電子
理解すること
コンピュータは電気しか理解できない。
電気が流れる
↓
1
電気が流れない
↓
0
つまり、
すべてのデータは1と0で表現される。
レベル1 トランジスタ
CPUの中には数十億個のトランジスタがある。
トランジスタは
電気を流す
または
止める
だけを行う。
つまり
ON
OFF
しかできない。
レベル2 論理回路
トランジスタを組み合わせることで
- AND
- OR
- NOT
- XOR
などの論理回路ができる。
さらに組み合わせると
- 足し算
- 引き算
- 比較
- 掛け算
ができるようになる。
ここでCPUの「計算能力」が生まれる。
レベル3 CPU
CPUは非常に単純な命令しか理解できない。
例えば
- ADD(足し算)
- SUB(引き算)
- MOV(コピー)
- LOAD(メモリから読む)
- STORE(メモリへ書く)
- CMP(比較)
- JMP(ジャンプ)
これらを1秒間に数十億回実行している。
つまり、
CPUを使うとは、CPU命令を大量に実行すること。
レベル4 C言語
例えば
a = b + c;
と書いてもCPUは理解できない。
コンパイラが
LOAD b
LOAD c
ADD
STORE a
というCPU命令へ変換する。
つまり
C言語は
CPU命令を書きやすくした言語である。
レベル5 PHP
WordPressはPHPで書かれている。
例えば
echo $a + $b;
PHPエンジンが
↓
C言語
↓
CPU命令
へ変換する。
つまりPHPも最終的にはCPU命令になる。
レベル6 Linux
LinuxはCPUを管理している。
役割は
- プロセス管理
- スレッド管理
- CPUスケジューリング
- メモリ管理
例えば
PHP Worker①
PHP Worker②
PHP Worker③
があった場合、
Linuxが
Core1
↓
Worker①実行
↓
Core2
↓
Worker②実行
のようにCPUへ割り当てている。
レベル7 WordPress
利用者
↓
nginx
↓
PHP-FPM
↓
PHP
↓
SQL
↓
HTML生成
↓
返却
この一連の処理も
最終的には
PHP
↓
C言語
↓
CPU命令
↓
CPU
↓
論理回路
↓
トランジスタ
↓
電子
という流れになる。
「CPUを使う」とは何か
CPUを使うとは
「CPU命令を大量に実行している状態」
である。
例えば
- if文
- for文
- 文字列結合
- SQL結果の加工
- JSON生成
- HTML生成
これらはすべてCPU命令になり、
CPUが1つずつ実行している。
CPU使用率100%とは
CPU使用率100%とは、
CPUコアが実行すべき命令でいっぱいになっている状態。
CPUは
ADD
LOAD
STORE
CMP
JMP
などの命令を休みなく実行している。
今後の学習順
第1章
CPU・コア・スレッド
↓
第2章
Linux(プロセス・スレッド・Scheduler)
↓
第3章
nginx Worker
↓
第4章
PHP-FPM Worker
↓
第5章
WordPress内部
↓
第6章
同時アクセス・待ち行列
↓
第7章
FastCGI Cache・Redis・CDN
↓
第8章
MariaDB
↓
第9章
EC2設計
最終目標
サイトを見た瞬間に
利用者
↓
HTTP
↓
nginx
↓
PHP
↓
CPU
↓
MariaDB
↓
Storage
まで頭の中でイメージできること。
その上で
- CPUは足りるか
- メモリは足りるか
- Workerは足りるか
- キャッシュは必要か
- EC2は何コア必要か
を自分で考えられるようになることが目標。