GCPのLoad Balancer・Backend Service・MIG・VMの関係を整理する

GCPでCompute Engineを使ったWebアプリ構成を考えるとき、Load Balancer、Backend Service、Managed Instance Group、VM instanceの関係が混乱しがちです。

ロードバランサーで複数台のアプリサーバーに振り分ける考え方自体は、クラウド全般で共通です。一方で、Backend Service、Managed Instance Group(MIG)、serverless NEG などの部品名と組み合わせはGCP固有です。本記事では、負荷分散の一般概念を前提にしつつ、GCPの構成要素としての役割を整理します。

「ロードバランサーがVMを複数まとめる」と言いたくなりますが、正確には役割が分かれています。

部品役割
Load Balancer外からの入口
Backend Serviceどのbackendへ、どう流すかの設定
Managed Instance Group同じ設定のVM群を作って維持する管理単位
VM instance実際にアプリが動く1台のサーバー

本記事では、この4つの関係を整理します。

全体の流れ

複数VMへ負荷分散する典型構成は以下です。

flowchart TB
  user["User"]
  lb["Load Balancer<br/>入口"]
  bs["Backend Service<br/>振り分け設定"]
  mig["Managed Instance Group<br/>VM群の管理単位"]

  vm1["VM #1"]
  vm2["VM #2"]
  vm3["VM #3"]

  user --> lb
  lb --> bs
  bs --> mig
  mig --> vm1
  mig --> vm2
  mig --> vm3

通信の理解としては、まず以下で十分です。

User

Load Balancer

Backend Service

Managed Instance Group

VM instances

ただし厳密には、通信が物理的にMIGという箱を経由するというより、Backend ServiceがbackendとしてMIGを参照し、MIG配下の正常なVMに流す、という関係です。

VM instanceは1台の仮想サーバー

VM instanceは、アプリを動かす1台の仮想サーバーです。Compute Engine VMはゾーンリソースで、作成時にゾーン・VPC・サブネットなどを指定します。

  • Zone: asia-northeast1-a
  • VPC: my-vpc
  • Subnet: app-subnet
  • Internal IP: 10.0.0.10

VPC、サブネット、ゾーンの関係は『GCPのVPC・サブネット・リージョン・ゾーンの関係を整理する』で扱っています。

MIGはVM群を作って維持する

Managed Instance Group(MIG)は、同じ設定のVMを複数台まとめて作り、維持する管理単位です。

Instance Template
「この設定のVMを作る」

Managed Instance Group
「このテンプレートでVMをN台維持する」

VM #1 / VM #2 / VM #3

MIGの役割は、ロードバランサーの代わりに分散することではありません。MIGはVM群を管理します。

MIGの仕事は以下です。

  • VMを指定台数維持する
  • 壊れたVMを作り直す
  • autoscalingで増減する
  • rolling updateする
  • LBのbackendとしてVM群を提供する

Zonal MIGとRegional MIG

MIGには、Zonal MIGとRegional MIGがあります。

  • Zonal MIG: 1つのZone内のVM群を管理する
  • Regional MIG: 1つのRegion内の複数ZoneにVMを分散して管理する
flowchart TB
  subgraph region["Region: asia-northeast1"]
    subgraph zonal["Zonal MIG"]
      subgraph zoneA["Zone: asia-northeast1-a"]
        zvm1["VM #1"]
        zvm2["VM #2"]
      end
    end
  end
flowchart TB
  subgraph region["Region: asia-northeast1"]
    subgraph regional["Regional MIG"]
      subgraph zoneA["Zone: asia-northeast1-a"]
        vm1["VM #1"]
      end

      subgraph zoneB["Zone: asia-northeast1-b"]
        vm2["VM #2"]
      end

      subgraph zoneC["Zone: asia-northeast1-c"]
        vm3["VM #3"]
      end
    end
  end

覚える形はこれです。

  • Zonal MIG: 1 Zone
  • Regional MIG: 1 Regionの中の複数Zone
  • Global MIG: ない

複数リージョンにまたがる構成にしたい場合は、リージョンごとにRegional MIGを作り、Global Load Balancerで束ねます。これは可用性のテーマで深掘りする話です。

Backend Serviceは振り分け設定

Backend Serviceは、Cloud Load Balancingを構成するリソースの1つです。単独のアプリ本体ではなく、ロードバランサーが参照するバックエンド設定です。

Backend Serviceは以下を持ちます。

設定意味
backends振り分け先。MIGやNEGなど
health check正常なbackendだけに流すための確認
balancing modeCPU使用率、接続数、リクエスト数など、何を基準に振り分けるか
timeoutbackend応答待ち時間
session affinity同じユーザーを同じbackendに寄せるか

VMに負荷分散する構成では、Backend ServiceのbackendとしてMIGを登録するのが典型です。

Load Balancer

Backend Service

MIG

VM群

MIGは必ず出るのか

「ロードバランサーで複数VMに分散させる」文脈なら、基本はMIGを使うと理解してよいです。

ただし、ロードバランサーのbackendはVMだけではありません。GKE Pod、Cloud Run、Cloud Storage bucketなどへ流す構成では、MIGではなくNEGやbackend bucketが登場します。

  • VM群へ流す: MIGが典型
  • GKE Podへ流す: NEGが出ることがある
  • Cloud Runへ流す: serverless NEGが出る
  • Cloud Storageへ流す: backend bucket

本記事ではCompute Engine VMへ流す構成に絞るため、MIGが中心です。

まとめ

  • Load Balancerは外からの入口
  • Backend Serviceはどのbackendへどう流すかの設定
  • MIGは同じ設定のVM群を作って維持する管理単位
  • VM instanceは実際にアプリが動く1台のサーバー
  • Zonal MIGは1つのZone内、Regional MIGは1つのRegion内の複数Zoneを管理する
  • 複数VMに負荷分散するCompute Engine構成では、Load Balancer → Backend Service → MIG → VM群で理解するとよい

参考

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