- ブラウザURL入力
- DNS名前→IP
- ルータ経路選択
- ロードバランサ振り分け今ここ
- Nginx受け口
- アプリ処理
- DB保存
第27〜28週で「取り次ぐ段」を見ました。今週はその段の最初の判断——どの実体へ配るか——です。
まず結論
HTTPやTLSのRFCは負荷分散方式を規定していません(ほかの標準文書までは確かめていません)。名称も挙動もベンダ実装依存です。
だから「規格ではこう」ではなく「nginx ではこの名前で、既定はこれ」と書きます。主語を実装名にすることが今週の技能です。
「ラウンドロビン、最少接続数、ハッシュ法という負荷分散アルゴリズムは標準化されている」——この評価はどれでしょうか。
当てることが目的ではありません。外した予測ほど記憶に残るので、直感で選んでください。
配り先を選ぶ、それだけの話
取り次ぐ段の向こうに、同じアプリケーションの実体が複数並んでいます。届いた1件をどれへ渡すか。負荷分散とは、この1回の選択のことです。
選び方には名前が付いています。順番に配る、接続が少ないところへ配る、値から計算して決める。しかしHTTPやTLSのRFCには、この名前と挙動の規定はありません。
nginx は何をどう呼んでいるか
ディレクティブ 何を見て決めるか(既定) weighted round-robin。順に配りつつ重みを反映least_conn アクティブ接続数が最も少ないサーバへ(重みを考慮)ip_hash クライアントIPに基づく。同じクライアントは常に同じサーバへhash 指定キーのハッシュ値で決定。consistent で ketama 一貫性ハッシュrandom ランダムに選択(重みを考慮)
既定は「重み付きラウンドロビン」です。公式の別ページ load_balancing.html は weighted を付けずに round-robin と書きますが、同じページの Weighted load balancing 節で weight の反映を説明しており、語は違っても内容は一致しています。また「ハッシュ法」という単一の方式はなく、ip_hash と hash の2つです。
nginx の既定を、公式モジュールドキュメントに即して述べたものはどれですか。
「nginx にはハッシュ法という方式が1つある」は正確ですか。
LBの分散方式(今週)
届いたリクエストをどのサーバへ渡すかを決めます。規則は製品のディレクティブとして書かれ、HTTPやTLSのRFCには規定がありません。
upstream backend {server backend1.example.com;server backend2.example.com;}
CPUのスケジューラ(第12週)
実行可能なプロセスを、どのコアで走らせるかを決めます。第12週で見たとおり、この規則はOSの実装が持っています。
待っているもの 配り先LB リクエスト 複数のサーバOS プロセス 複数のCPUコア
LBの分散方式と、OSのプロセススケジューラ。共通する構造は何でしょうか。そして「その規則はどこに書かれているか」を問うと何が見えるでしょうか。
「選ぶ主体」「選ばれる対象」「選び方が書かれている場所」に分けて比べてください。
この章のまとめ
- HTTPやTLSのRFCは負荷分散アルゴリズムを規定していない。 名称も挙動もベンダ実装依存。
- 挙動を述べるときは実装名を主語にする。
- nginx の既定は、モジュールdocでは weighted round-robin。別の公式ページは round-robin と書くが、weight の反映も説明しており内容は一致。
least_connが数えるのはアクティブ接続数であって処理の重さではない。- 「ハッシュ法」という単一の方式は無い。
ip_hashとhashの2つ。 - LBの分散もOSのスケジューラも同じ構造だが、規則の出どころはどちらも実装。
自分の現場で確かめる
読んだだけでは身につきません。手元の環境で実際に見てみてください。
理解度チェック
読んだ直後は「分かった」と感じやすいものです。実際に解いて確かめてください。
「ラウンドロビンはRFC標準なので、どのLB製品でも同じ挙動です」と説明されました。どう指摘しますか。
用語集(4語)
- weighted round-robin
- ngx_http_upstream_module が既定として挙げる方式。順に選びつつ weight の重みを反映する。
- least_conn
- アクティブ接続数が最少のサーバへ重みを考慮して渡す nginx のディレクティブ。数えるのは接続数であって処理の重さではない。
- ip_hash / hash
- いずれもハッシュ分散だが別のディレクティブ。前者はクライアントIP、後者は指定キーのハッシュで対応を決める。
- ベンダ用語
- 製品説明のために広まった語で、RFCやIANAに定義が無いもの。負荷分散アルゴリズム名や「L7ロードバランサ」(第14週)。