Multi-Tenant Feature Flag & Percentage Rollout Engine

30:00

1. Studi Kasus

Dalam pengembangan aplikasi SaaS Multi-Tenant, Feature Flags / Toggles digunakan untuk merilis fitur baru secara bertahap (Canary Release), mengaktifkan eksperimen A/B testing, atau memberikan fitur khusus untuk tenant tertentu (VIP).

Anda diminta membuat endpoint REST API Express.js untuk:

POST /features/evaluate

2. Spesifikasi Input & Output

Request Body:

{
  "tenantId": "tenant_acme",
  "userId": "user_42",
  "flagKey": "new_checkout_v2"
}

Response Berhasil (HTTP 200):

{
  "enabled": true,
  "reason": "TENANT_OVERRIDE"
}

3. Data Awal In-Memory

const featureFlags = [
  {
    flagKey: "new_checkout_v2",
    enabled: true,
    rolloutPercentage: 50,
    tenantOverrides: {
      "tenant_acme": true,
      "tenant_beta": false
    }
  },
  {
    flagKey: "dark_mode",
    enabled: false,
    rolloutPercentage: 100,
    tenantOverrides: {}
  }
];

4. Requirement & Aturan Evaluasi

  1. Validasi Payload: Jika tenantId, userId, atau flagKey kosong → HTTP 400 "tenantId, userId, and flagKey are required".
  2. Cek Keberadaan Flag: Jika flagKey tidak ada di array featureFlagsHTTP 404 "Feature flag not found".
  3. Hierarki Evaluasi 1 (Tenant Override):
    • Jika tenantId terdaftar di flag.tenantOverrides (boolean): Kembalikan HTTP 200 dengan enabled bernilai override tersebut, dan reason: "TENANT_OVERRIDE".
  4. Hierarki Evaluasi 2 (Global Toggle):
    • Jika flag.enabled === false: Kembalikan HTTP 200 dengan enabled: false dan reason: "GLOBAL_TOGGLE".
  5. Hierarki Evaluasi 3 (Percentage Rollout):
    • Hitung nilai hash deterministik dari userId (misal jumlah ASCII char code % 100).
    • Jika hashValue < flag.rolloutPercentage: Kembalikan enabled: true, reason: "PERCENTAGE_ROLLOUT".
    • Selain itu: Kembalikan enabled: false, reason: "PERCENTAGE_ROLLOUT".

5. Pertanyaan Bonus Konseptual 💡

Manajemen Feature Flag di Scaled Microservices Di bagian komentar kode solusi Anda, jelaskan:

  • Penggunaan platform Feature Flag terpusat (seperti LaunchDarkly / Unleash).
  • Strategi caching di Redis & in-memory memory sync untuk evaluasi flag dengan latency sub-millisecond.
solution.js
Loading...
Local Test Console