可用性設計で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をつなぐものではなく、リクエストの入口・振り分けを担う