network load balancer とは? 複数サーバーへのトラフィック分散
network load balancer は、単一のインスタンスが過負荷にならず、インスタンス障害があってもサービスが存続するよう、受信接続をバックエンドサーバーのプールに分散するコンポーネントです。
単一のサーバーはすべてのトラフィックを処理できず、自身の障害を乗り越えることもできないため、本番サービスは load balancer の背後に置かれます。1 つのアドレスで接続を受け付け、それらを多数のバックエンドに分散し、それらの健全性をチェックして準備ができているものにのみルーティングします。デプロイは、ダウンタイムなしで新しいバージョンを出荷するためにこれに頼ります。
接続の分散
load balancer は安定したアドレスでトラフィックを受け取り、round-robin や least-connections のような戦略を使って負荷を均等に分散しながら、各接続やリクエストを健全なバックエンドに転送します。
health check がルーティングを決める
load balancer は各バックエンドの health-check エンドポイントを継続的に探査し、健全と応答するものにのみトラフィックを送ります。check に失敗したインスタンスは、静かにローテーションから外されます。
分散のレイヤー
- Layer 4 は、内容を見ずに TCP/UDP 接続単位で分散します。
- Layer 7 は、path や host のような HTTP の詳細で分散します。
- どちらも TLS を終端またはパススルーできます。
ゼロダウンタイムデプロイの実現
rolling および blue-green デプロイは、balancer の背後に新しいインスタンスを追加し、それらが health check を通過するのを待ち、トラフィックを切り替え、その後古いものをドレインします。これをユーザーにとってシームレスにするのが load balancer です。
デプロイで 503 が発生する理由
新しいインスタンスが健全になる前に登録されたり、すべてのバックエンドが一時的にドレイン中だったりすると、load balancer はトラフィックを送る先がなく 503 を返します。正しい health check と connection draining がこれを防ぎます。
一時的な balancer エラー
デプロイ中にバックエンドプールが入れ替わる間の短い 503 は一時的です。Latchkey の runner は、一般的なエンドポイントへの一時的な load balancer レスポンスを自動的にリトライするため、健全なバックエンドの一瞬の欠如がデプロイ検証の step を失敗させることはありません。
重要なポイント
- network load balancer は、単一のアドレスの背後にある健全なバックエンドにトラフィックを分散します。
- health check がどのインスタンスがトラフィックを受け取るかを決め、ゼロダウンタイムデプロイを可能にします。
- デプロイ中の 503 は、通常、現在サービスできる健全なバックエンドがないことを意味します。