トラフィック分散設計: GCPのRegional LB・Global external LB・Cross-region internal LBで考える

可用性設計でLoad Balancerが出てくるときは、Load Balancer自体のフェイルオーバーというより、通信をどの範囲の正常なbackendへ振り分けられるようにするかを考えています。

本記事では、ロードバランサーを使って正常なbackendへ通信を振り分ける設計を、GCPのRegional LB、Global external LB、Cross-region internal LBを例に整理します。

ただし、global という言葉が出ると「複数VPCをまたぐのか」「backendも自動で複数regionになるのか」と混乱しやすくなります。

本記事では、Regional LB、Global external LB、Cross-region internal LBの違いを可用性の観点で整理します。

Regional Load Balancer

Regional Load Balancerは、基本的に1region内のbackendへ振り分ける構成です。

flowchart TB
  user["User"]
  lb["Regional Load Balancer"]

  subgraph r1["Region A"]
    subgraph z1["Zone A"]
      app1["App"]
    end
    subgraph z2["Zone B"]
      app2["App"]
    end
  end

  user --> lb
  lb --> app1
  lb --> app2

これは1region内のzone障害対策と相性がよいです。backendをRegional MIGやGKE regional clusterにしておけば、zone障害時にも残りのzoneへ流せます。

ただし、Region A全体が落ちると止まります。

Global external Load Balancer

Global external Load Balancerは、外部ユーザー向けのglobal入口です。複数regionのbackendを扱えます。

flowchart TB
  user["Global Users"]
  glb["Global External Load Balancer"]

  subgraph r1["Region A"]
    app1["Backend A"]
  end

  subgraph r2["Region B"]
    app2["Backend B"]
  end

  user --> glb
  glb --> app1
  glb --> app2

この構成は、以下のような要件で使います。

  • 世界中のユーザーへ低レイテンシで配信したい
  • region障害時に別regionへ逃がしたい
  • 単一のglobal入口を持ちたい

Global LBだけではregion冗長ではない

重要なのは、Global Load Balancerを置いただけではアプリがregion冗長になるわけではないことです。

構成意味
Global LB + backend 1 region入口はglobal、アプリはsingle region
Global LB + backend multiple regions入口もbackendも複数region対応

図にすると、前者はこうです。

flowchart TB
  user["Users"]
  glb["Global External Load Balancer"]

  subgraph r1["Region A only"]
    app1["Backend"]
  end

  user --> glb --> app1

この構成では、Region A障害時に逃がすbackendがありません。

Cross-region internal Load Balancer

Cross-region internal Load Balancerは、VPC内部向けに複数region backendへ振り分ける構成です。

flowchart TB
  client["Internal Client<br/>VPC内"]
  ilb["Cross-region Internal Load Balancer"]

  subgraph r1["Region A"]
    svc1["Internal Service A"]
  end

  subgraph r2["Region B"]
    svc2["Internal Service B"]
  end

  client --> ilb
  ilb --> svc1
  ilb --> svc2

外部ユーザー向けではなく、VPC内部のサービス間通信で複数region backendを扱いたいときの選択肢です。

Load BalancerとVPC接続は別の話

Load Balancerはリクエストをbackendへ振り分ける入口です。VPC同士をつなぐ役割ではありません。

  • 複数backendに振り分ける: Load Balancer
  • VPC同士を接続する: VPC Peering / PSC / NCC
  • オンプレとVPCを接続する: Cloud VPN / Cloud Interconnect

VPC接続方式は『Cloud VPN・Cloud Interconnect・VPC Peering・NCCの違い』で扱っています。

まとめ

  • Regional LBは1region内のbackendに振り分ける
  • Global external LBは外部向けのglobal入口で、複数region backendを扱える
  • Global LBだけではregion冗長にならず、backendも複数regionに置く必要がある
  • Cross-region internal LBはVPC内部向けに複数region backendを扱う
  • Load BalancerはVPCをつなぐものではなく、リクエストの入口・振り分けを担う

参考

タグ: GCP, クラウド設計, 可用性, ネットワーク