Membahas desain SaaS multi-tenant secara utuh: memilih model tenancy antara silo, bridge, dan pool, isolasi data dengan row-level security, menyelaraskan tiering harga dengan biaya infrastruktur riil per tenant, serta mengelola noisy neighbor dan onboarding besar di platform multi-pelanggan

Setelah di episode 19 solusi kalian bisa lolos audit dengan kontrol yang terbukti lewat evidence pipeline, kini kita bahas model bisnis yang mendominasi software modern: SaaS multi-tenant. Satu deployment melayani ratusan bahkan ribuan pelanggan — dan keputusan arsitektur kalian menentukan apakah setiap pelanggan tambahan memperbesar margin, atau justru merusak pengalaman pelanggan lama.
Mengapa ini topik SA penting? Karena multi-tenancy bukan fitur, melainkan keputusan fondasi yang menyentuh skema database, isolasi keamanan, operasi, dan struktur biaya sekaligus. Salah pilih di awal berarti re-platform mahal saat pelanggan enterprise pertama datang menuntut isolasi.
Spektrum desainnya berkisar dari isolasi penuh sampai berbagi penuh:
| Model | Bentuk | Isolasi | Biaya per Tenant | Cocok Untuk |
|---|---|---|---|---|
| Silo | Infrastruktur terpisah per tenant | Maksimal | Termahal | Enterprise besar, regulasi ketat |
| Bridge | Database/namespace terpisah, aplikasi bersama | Kuat | Sedang | Tenant mid-market |
| Pool | Semua berbagi infrastruktur + DB | Logis saja | Termurah | Long-tail, self-service SMB |
Praktik industri yang matang adalah tiered tenancy: mayoritas pelanggan di pool (margin tinggi, operasi sederhana), pelanggan premium di bridge/silo dengan harga yang menutupi biayanya. Yang fatal adalah silo untuk semua — margin SaaS lenyap karena tiap pelanggan baru = satu cluster baru yang harus di-patch.
Keputusan ini layak ADR tersendiri dengan proyeksi angka: pada 1.000 tenant pool, biaya infra per tenant bisa seperseratus tenant silo. Angka semacam itulah yang membuat diskusi model tenancy objektif.
Kesalahan fatal tunggal di SaaS adalah data tenant A bocor ke tenant B — insiden yang biasanya mengakhiri kontrak dan reputasi. Tiga pola penyimpanan sesuai model tenancy:
Pool : tabel bersama + kolom tenant_id + row-level security (RLS)
Bridge : schema/database terpisah per tenant di cluster sama
Silo : cluster/database fisik terpisah per tenantUntuk pool (paling umum), disiplin wajibnya:
tenant_id — tanpa kecuali; query tanpa filter tenant harus gagal, bukan diam-diam mengembalikan semua baris.ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON orders
USING (tenant_id = current_setting('app.current_tenant')::uuid);
-- Aplikasi wajib set identitas tenant per koneksi/transaksi:
SET app.current_tenant = 'a1b2c3d4-...';Untuk object storage (e-tiket, upload), gunakan prefix per tenant plus IAM/policy yang memvalidasi path, dan hindari nama file yang dapat ditebak.
Warning
Cache adalah celah isolasi favorit bug: cache key tanpa tenant_id membuat data tenant B dilayani ke tenant A. Aturan: setiap cache key WAJIB diawali tenant_id, dan ada test yang memastikannya. Ini temuan review SaaS paling sering.
Di atas data layer, seluruh pipeline request harus sadar tenant sejak pintu masuk:
Komponen context ini menjadi tempat enforcement lintas halaman: rate limit per tenant, kuota storage per plan, routing ke instance khusus untuk tenant silo. Di sistem asinkron, pesan queue wajib membawa tenant_id di header — consumer meneruskan konteks yang sama sampai email terkirim.
Nilai arsitektur terbesar SA di SaaS adalah menyambungkan paket harga dengan biaya nyata per tenant. Caranya: definisikan unit konsumsi yang proporsional dengan beban infrastruktur — misal event processed, storage GB-bulan, atau API call — lalu petakan tier komersial ke limit teknisnya:
| Tier | Limit Teknis | Implikasi Infra |
|---|---|---|
| Starter | 10 rb event/bln, 5 GB | Pool, shared everything |
| Growth | 500 rb event/bln, 100 GB | Pool, quota lebih besar |
| Enterprise | Unlimited-ish, SSO, audit log, SLA 99,9% | Bridge/silo + support khusus |
Tanpa sinkronisasi ini terjadi dua bencana klasik: tenant gratis menghabiskan biaya server premium (limit longgar), atau tenant bayar mahal dibatasi fitur yang murah bagi kalian (limit salah ukur). Metrik unit economics episode 9 dihitung per tenant di sini: biaya infra bulanan ÷ jumlah tenant aktif per tier.
Dua mekanisme teknis pendukung pricing:
Tantangan operasional spesifik model ini:
Satu tenant menjalankan export raksasa jam 9 pagi dan semua tenant lain melambat. Pertahanannya berlapis:
Deploy di SaaS menyentuh data semua tenant sekaligus:
Tip
Bangun "admin console internal" sejak awal: cari tenant, lihat usage & log-nya, ubah plan, trigger purge. Tanpa itu, tiap tiket support tenant adalah operasi database manual — risiko human error terbesar di platform multi-pelanggan.
Rangkum episode ini menjadi checklist yang bisa dipakai langsung saat review proposal SaaS:
Inti yang harus dibawa pulang:
tenant_id universal + RLS + identitas turunan token + test anti-cross-tenant; cache adalah celah nomor satu.Di episode 21 selanjutnya kita akan membahas AI/LLM solution design — merancang solusi berbasis LLM yang benar: arsitektur RAG end-to-end, agent patterns dan guardrails-nya, evaluasi kualitas output yang terukur, serta strategi biaya dan privasi data pada solusi AI. Sampai jumpa di episode 21!