サーバーのしくみ I(物理からアプリまで)
10 問リクエストがNIC(ネットワークカード)に信号として届いてから、カーネルのネットワークスタックを上っていき、アプリが受け取るまでの縦の流れを追います。DMA、割り込みとNAPI、リングバッファ、システムコールの境界などを具体的に確認します。
サーバーのしくみ II(ソケットとカーネル)
10 問サーバーがsocket()/bind()/listen()/accept()でどう接続を待ち受け、受け取るかを追います。2つのキュー、ファイルディスクリプタ、backlog、4タプルによる接続の識別などを具体的に確認します。
サーバーのしくみ III(並行処理モデル)
10 問1台のサーバーで多数の接続を同時にさばくための並行処理モデルを比較します。プロセス/スレッドモデルのコスト、C10K問題、select/pollとepoll/kqueue、イベントループ、レベル/エッジトリガの違いを具体的に確認します。
サーバーのしくみ IV(HTTPサーバーの内部動作)
10 問ソケットから読んだバイト列をHTTPリクエストへパースする流れ、部分受信とバッファリング、ヘッダ終端の検出、ボディ長の判定、ルーティング、keep-alive、バックプレッシャ、graceful shutdown、スローロリス攻撃対策としてのタイムアウトを扱います。
サーバーのしくみ V(リバースプロキシとアプリ連携)
10 問リバースプロキシとは何か、なぜ前段に置くか、アプリサーバーとの接続方式、WSGI/Rackのような標準インターフェースの役割、プロセスマネージャとワーカープロセス、X-Forwarded系ヘッダ、UnixドメインソケットがループバックTCPより速い理由を扱います。
サーバーのしくみ VI(具体的なサーバー製品)
10 問nginxのマスター+ワーカーとイベント駆動、Apacheのマルチプロセッシングモジュール(prefork/worker/event MPM)、Node.jsの単一イベントループとlibuv、Goのgoroutineとネットランタイムなど、代表的なサーバーの設計と向く用途の違いを扱います。