Webサイトやアプリケーションを公開すると、たくさんのユーザーからのアクセスが集中することがありますよね。たった1台のサーバーでは、アクセスが多すぎると処理しきれなくなって、Webサイトが表示されなくなったり、動作が遅くなったりしてしまいます。
そこで活躍するのが「ロードバランサ(Load Balancer)」です。ロードバランサは、複数のサーバー(GCPでは仮想マシンやコンテナなど)にアクセスを「賢く分散(負荷分散)」させることで、Webサイトやアプリケーションを安定して動かし続けるための非常に重要な役割を担います。
GCPが提供するロードバランシングサービスが「Cloud Load Balancing」です。例えるなら、Cloud Load Balancingは、ユーザーからの交通(アクセス)を、複数の道(サーバー)へ効率よく振り分ける「交通整理の達人」のようなものです。
Cloud Load Balancingとは?
Cloud Load Balancingは、Googleのグローバルなネットワークインフラ上で構築された、高性能かつスケーラブルなフルマネージドのロードバランシングサービスです。
- 何ができるの?
- 大量のアクセスを複数のバックエンド(サーバー群)に分散させます。
- サーバーに障害が発生した場合でも、自動的に正常なサーバーにアクセスを振り分け、サービス停止を防ぎます(高可用性)。
- ユーザーに最も近いリージョンのサーバーにアクセスを誘導し、応答速度を向上させます。
- SSL/TLS証明書を管理し、暗号化された通信(HTTPS)を終端させることができます。
- 特徴:
- フルマネージド: ロードバランサ自体の管理(パッチ適用、スケーリングなど)はGoogleが全て行います。あなたは設定に集中できます。
- グローバル: 一部のロードバランサはグローバルなIPアドレスを持ち、世界中からのアクセスを最も近いバックエンドに振り分けることができます。
- 自動スケーリング: アクセスの増減に応じて、ロードバランサ自体も自動的にスケーリングします。
- ヘルスチェック: バックエンドサーバーの状態を常に監視し、異常があればそのサーバーへのトラフィックを自動的に停止します。
ロードバランサの種類と用途:適材適所の選び方
Cloud Load Balancingには、通信の種類や要件に応じていくつかの異なる種類のロードバランサがあります。それぞれのロードバランサは、異なる層(OSI参照モデル)で動作し、得意なことが違います。
主要なロードバランサの種類
- 外部HTTP(S) ロードバランサ (External HTTP(S) Load Balancer)
- 得意なこと: Webサイト(HTTP/HTTPS)のような、Webアプリケーションのトラフィックを分散することに最も適しています。
- 動作層: OSI参照モデルのレイヤ7(アプリケーション層)で動作します。これにより、HTTPヘッダーやURLパスなどに基づいて高度なルーティングが可能です。
- 特徴:
- グローバルなIPアドレス: 単一のグローバルIPアドレスを持ち、世界中のユーザーからのアクセスを最も近いリージョン(またはバックエンド)に分散できます。
- SSL/TLS終端: ロードバランサでHTTPSの暗号化を終端できるため、バックエンドサーバーは暗号化処理を行う必要がありません。
- URLマップ: URLのパスやホスト名に基づいて、異なるバックエンドサービスにトラフィックを振り分けられます。(例:
example.com/api
はAPIサーバーへ、example.com/images
は画像サーバーへ) - Cloud CDNとの連携: コンテンツ配信ネットワーク(CDN)と連携して、静的コンテンツを高速に配信できます。
- 用途: グローバルに展開するWebサイト、APIサービス、モバイルアプリのバックエンドなど、HTTPSトラフィックを処理する場合。
- 外部TCP/UDP ロードバランサ (External TCP/UDP Load Balancer)
- 得意なこと: Web以外のTCPやUDPプロトコルを使用するアプリケーションのトラフィックを分散すること。
- 動作層: OSI参照モデルのレイヤ4(トランスポート層)で動作します。
- 特徴:
- グローバルまたはリージョナル: グローバルなTCPロードバランサもありますが、UDPや一部のTCPロードバランサはリージョナルです。
- IPアドレスとポートベース: IPアドレスとポート番号に基づいてトラフィックを分散します。アプリケーション層のヘッダーは読み取りません。
- 用途: ゲームサーバー、SMTP(メール送信)、DNS(ただしCloud DNSは除く)、その他のカスタムTCP/UDPプロトコルを使用するアプリケーション。
- 内部HTTP(S) ロードバランサ (Internal HTTP(S) Load Balancer)
- 得意なこと: VPCネットワーク内部で動作するマイクロサービスやWebアプリケーション間の負荷分散。
- 動作層: レイヤ7(アプリケーション層)
- 特徴:
- 内部IPアドレス: ロードバランサ自体が内部IPアドレスを持つため、インターネットからは直接アクセスできません。
- プライベートな通信: VPCネットワーク内のリソース間でのみ利用されます。
- URLマップなど、外部HTTP(S) と同様の機能: 高度なルーティング機能も使えます。
- 用途: マイクロサービスアーキテクチャにおけるサービス間通信、インターネットに公開しない内部管理ツールなど。
- 内部TCP/UDP ロードバランサ (Internal TCP/UDP Load Balancer)
- 得意なこと: VPCネットワーク内部で動作する、Web以外のTCP/UDPアプリケーション間の負荷分散。
- 動作層: レイヤ4(トランスポート層)
- 特徴:
- 内部IPアドレス: ロードバランサ自体が内部IPアドレスを持つ。
- プライベートな通信: VPCネットワーク内のリソース間でのみ利用されます。
- 用途: データベースクラスタ、内部のVPNゲートウェイ、カスタムの内部プロトコルを使用するアプリケーションなど。
ロードバランサの構成要素 (共通の概念)
どのロードバランサも、基本的に以下の3つの要素で構成されます。
- フロントエンド(Frontend):
- ユーザーからのトラフィックを受け付ける部分です。
- ロードバランサのIPアドレスとポート(例: 外部HTTP(S) ロードバランサなら外部IPアドレスと80/443ポート)を設定します。
- HTTPSの場合、ここでSSL/TLS証明書を設定し、暗号化を終端します。
- バックエンド(Backend):
- 実際にリクエストを処理するサーバー群です。
- GCPでは、Compute Engineのインスタンスグループ(複数のVMをまとめたもの)やGoogle Kubernetes Engine (GKE) のPodなどがバックエンドになります。
- ヘルスチェック: バックエンドが正常に動作しているか監視し、問題があればそのバックエンドへのトラフィックを停止します。
- ルーティングルール(Routing Rule):
- フロントエンドで受け付けたトラフィックを、どのバックエンドに、どのような条件で振り分けるかを定義するルールです。
- 外部HTTP(S) ロードバランサではURLマップがこれに該当します。
まとめ:サービスの安定稼働のために
Cloud Load Balancingは、あなたのGCP上で稼働するアプリケーションの信頼性とスケーラビリティを劇的に向上させるための非常に重要なサービスです。
- アクセス集中を分散: 複数のサーバーにトラフィックを分散させ、単一障害点(SPOF)を排除します。
- 高可用性の実現: ヘルスチェックにより、異常なサーバーを自動的に検知し、正常なサーバーにのみトラフィックを流します。
- 種類を使い分ける: 公開するサービスの種類(Webか、それ以外か)、アクセス元(インターネットか、VPC内か)によって適切なロードバランサを選ぶことが重要です。