最終目標
サイトを見たときに
- このEC2スペックで十分か
- CPUとメモリは足りるか
- ボトルネックはどこか
- キャッシュは必要か
- LBやCDNは必要か
を自分で判断できるようになる。
第1章 CPU・コア・スレッド(コンピュータの中)
学ぶ目的
CPUがどのように仕事をしているか理解する。
理解すること
- CPUとは何か
- コアとは何か
- スレッドとは何か
- CPUキャッシュとは何か
- クロック周波数とは何か
- コンテキストスイッチとは何か
見るコマンド
lscpu
cat /proc/cpuinfo
nproc
top
最終目標
CPU使用率100%と言われたとき、
「CPUの何が忙しいのか」
を説明できる。
第2章 Linuxのプロセス・スレッド
学ぶ目的
OSがCPUをどう管理しているか理解する。
理解すること
- プロセス
- スレッド
- Scheduler
- Run Queue
- Context Switch
- Load Average
見るコマンド
ps aux
top
htop
pstree
pidstat
vmstat
最終目標
Load Averageが高い理由を説明できる。
第3章 nginx Worker
学ぶ目的
HTTPリクエストを誰が処理しているか理解する。
理解すること
- worker_processes
- worker_connections
- Event Loop
- epoll
- KeepAlive
設定
worker_processes auto;
worker_connections 1024;
最終目標
「このnginxは最大何接続処理できるか」
を考えられる。
第4章 PHP-FPM Worker
学ぶ目的
WordPressを誰が実行しているか理解する。
理解すること
- php-fpm
- Worker
- pm
- pm.max_children
- pm.start_servers
- pm.max_requests
見るコマンド
systemctl status php-fpm
ps aux | grep php-fpm
最終目標
同時アクセス時にPHP Workerが足りるか判断できる。
第5章 WordPress内部
学ぶ目的
WordPressで何がCPU・メモリ・DBを使うか理解する。
理解すること
- wp-load.php
- Plugin
- Theme
- SQL
- Object Cache
- REST API
- admin-ajax.php
最終目標
重いページの原因を推測できる。
第6章 同時アクセス・待ち行列
学ぶ目的
サーバーが落ちる理由を理解する。
理解すること
- 同時アクセス数
- Request/sec
- Response Time
- Queue
- Little's Law
- タイムアウト
実際にやること
ab
wrk
hey
JMeter
などで負荷試験する。
最終目標
何アクセスまで耐えられるか予測できる。
第7章 キャッシュ
学ぶ目的
CPUを使わない仕組みを理解する。
学ぶこと
ブラウザキャッシュ
何を保存するか
CDN
CloudFront
Fastly
Cloudflare
FastCGI Cache
PHPを実行しない。
Redis
SQLを減らす。
OPcache
PHPをコンパイルしない。
最終目標
「どのキャッシュを導入すればどの負荷が減るか」
を説明できる。
第8章 データベース
学ぶ目的
DBが遅い理由を理解する。
学ぶこと
- Index
- EXPLAIN
- Slow Query
- Lock
- Buffer Pool
最終目標
SQLが原因かどうか判断できる。
第9章 EC2設計
学ぶ目的
インスタンスタイプを選べるようになる。
学ぶこと
- vCPU
- Memory
- EBS
- Network帯域
- t系
- m系
- c系
- r系
最終目標
このサイトなら
「m7i.large」
など理由付きで提案できる。
第10章 システム全体設計
最後は全部つながる。
利用者
↓
DNS
↓
CDN
↓
WAF
↓
LoadBalancer
↓
nginx
↓
FastCGI Cache
↓
PHP-FPM
↓
WordPress
↓
Redis
↓
MariaDB
↓
Storage
これを見た瞬間、
「どこがボトルネックになるか」
を考えられるようになることが最終目標。