Menggunakan flag fitur untuk arsitektur multi-tenant

Panduan ini menjelaskan cara menerapkan flag fitur App Lifecycle Manager di lingkungan multi-tenant tanpa mengubah proses deployment biner yang ada.

Prasyarat

Sebelum memulai, pastikan Anda memiliki:

  1. Menyelesaikan panduan memulai Men-deploy flag fitur.
  2. Lingkungan gcloud yang dikonfigurasi untuk mengelola resource App Lifecycle Manager.
  3. Penawaran SaaS yang ada. Untuk mengetahui informasi selengkapnya tentang cara membuat penawaran SaaS, lihat Membuat penawaran SaaS.

Pemodelan resource

Dalam penyiapan multi-tenant, sebaiknya tentukan jenis unit untuk layanan atau aplikasi Anda, dan unit untuk setiap instance layanan atau aplikasi (yang mewakili tenant atau deployment).

Untuk menerapkan flag fitur di lingkungan multi-tenant, tentukan atribut Common Expression Language (CEL) yang mengidentifikasi tenant Anda, konfigurasi aplikasi Anda untuk memasukkan ID tenant saat runtime, dan gunakan aturan evaluasi untuk memengaruhi fitur bagi tenant tertentu.

Untuk kasus yang lebih sederhana, Anda juga dapat membuat peluncuran terpisah secara manual untuk setiap pelanggan.

1. Buat penawaran SaaS (jika belum dilakukan)

gcloud beta app-lifecycle-manager saas create "SAAS_NAME" \
    --project="PROJECT_ID" \
    --location="global" \
    --locations=name="LOCATION_1"

2. Buat UnitKind

gcloud beta app-lifecycle-manager unit-kinds create "tenant-service-kind" \
    --project="PROJECT_ID" \
    --location="global" \
    --saas="SAAS_NAME"

3. Buat unit untuk tenant

Saat membuat unit, gunakan Label untuk mengategorikan layanan tenant ke dalam grup (misalnya, group=beta, group=preview, group=all).

# Create a unit for Tenant A (Beta group)
gcloud beta app-lifecycle-manager units create "tenant-a-service" \
    --unit-kind="tenant-service-kind" \
    --location="LOCATION_1" \
    --labels="group=beta"

# Create a unit for Tenant B (Standard group)
gcloud beta app-lifecycle-manager units create "tenant-b-service" \
    --unit-kind="tenant-service-kind" \
    --location="LOCATION_1" \
    --labels="group=all"

Menentukan atribut dan flag

Anda harus menentukan atribut secara formal (seperti customerID) untuk memastikan keamanan jenis dalam aturan evaluasi.

1. Buat atribut customerID

gcloud beta app-lifecycle-manager flags attributes create "customer-id-attr" \
    --key="customerID" \
    --attribute-value-type="STRING" \
    --location=global

2. Buat flag fitur

gcloud beta app-lifecycle-manager flags create "enhanced-search" \
    --key="enhanced-search" \
    --flag-value-type=BOOL \
    --unit-kind="tenant-service-kind"

Application integration

Integrasikan OpenFeature SDK ke dalam layanan Anda. Aplikasi Anda harus memasukkan customerID ke dalam konteks saat runtime.

Contoh Go:

// Inject customerID into the evaluation context
evalCtx := map[string]any{
    "customerID": currentTenant.ID,
}

// Evaluate the flag
isEnabled, err := client.BooleanValue(
    context.Background(),
    "enhanced-search",
    false,
    evalCtx,
)

Mengonfigurasi penargetan khusus tenant

Gunakan aturan evaluasi untuk mengaktifkan fitur bagi pelanggan tertentu.

gcloud beta app-lifecycle-manager flags update "enhanced-search" \
    --location="global"
    --evaluation-spec='{
      "rules": [{
        "id": "allowlist-for-premium-tenants",
        "condition": "customerID in [\"tenant-xyz-123\", \"tenant-abc-789\"]",
        "target": "Enabled"
      }],
      "defaultTarget": "Disabled",
      "attributes": ["projects/PROJECT_ID/locations/global/flagAttributes/customer-id-attr"]
    }'

Peluncuran bertahap manual dengan filter

Untuk kasus penggunaan yang lebih sederhana, Anda dapat meniru gelombang dengan memicu peluncuran terpisah secara manual untuk setiap label pelanggan.

1. Buat revisi dan rilis

# Create a Revision (Snapshot)
gcloud beta app-lifecycle-manager flags revisions create "enhanced-search-rev-1" \
    --location=global \
    --flag="enhanced-search"

# Create a Release
gcloud beta app-lifecycle-manager flags releases create "release-of-enhanced-search" \
    --location=global \
    --unit-kind="tenant-service-kind" \
    --revisions="enhanced-search-rev-1"

2. Memicu peluncuran manual

Anda dapat mengatur peluncuran secara manual dengan memicu operasi terpisah per grup target menggunakan --unit-filter.

# Rollout to Beta group first
gcloud beta app-lifecycle-manager rollouts create "beta-rollout" \
    --flag-release="release-of-enhanced-search" \
    --rollout-kind="rollout-kind-of-enhanced-search" \
    --location=global \
    --rollout-orchestration-strategy="Google.Cloud.Simple.AllAtOnce" \
    --unit-filter="labels.group == beta"

# After verification, rollout to the rest of the fleet
gcloud beta app-lifecycle-manager rollouts create "full-rollout" \
    --flag-release="release-of-enhanced-search" \
    --rollout-kind="rollout-kind-of-enhanced-search" \
    --location=global \
    --rollout-orchestration-strategy="Google.Cloud.Production" \
    --unit-filter="labels.group == all"

Langkah berikutnya