SHAZ VISION Görüşme Planlayın
← Tüm Blog Yazıları

Sıfırdan Çok Kiracılı (Multi-Tenant) SaaS Mimarisi: Auth, Lisanslama ve Faturalama

Bir SaaS ürünü geliştirirken ilk 10 müşteri için çalışan mimari, 500 müşteriye ulaştığınızda veri güvenliği, yetkilendirme karmaşası ve faturalama senkronizasyonunda çökebilir. İşte sıfırdan sağlam temellere oturan bir Multi-Tenant SaaS mimarisinin anatomisi.

Multi-Tenant SaaS Backend ve Veri İzolasyon Mimarisi
İçindekiler
  1. Veri İzolasyonu Modelleri: RLS vs Şema vs Ayrı Veritabanı
  2. PostgreSQL Row-Level Security (RLS) ile Güvenlik
  3. JWT, Rol Tabanlı Yetkilendirme (RBAC) ve Ekip Yönetimi
  4. Lisans Doğrulama ve Cihaz Bazlı Token Mimarisi
  5. Stripe & LemonSqueezy ile İdempotent Webhook Yönetimi
  6. Kaynak Tüketimi ve Kota (Throttling) Sınırları
  7. Shaz Vision SaaS Altyapısı
  8. Sıkça Sorulan Sorular

1. Veri İzolasyonu Modelleri: RLS vs Şema vs Ayrı Veritabanı

Çok kiracılı (Multi-tenant) sistemlerde en kritik ilk karar veritabanı ayrımıdır. Karşımızda 3 ana yaklaşım bulunur:

2. PostgreSQL Row-Level Security (RLS) ile Güvenlik

Uygulama kodunda bir geliştiricinin WHERE tenant_id = '...' yazmayı unutması müşterilerin birbirinin finansal verisini görmesine yol açabilir. PostgreSQL'in Row-Level Security (RLS) motoru bu riski veritabanı seviyesinde tamamen yok eder:

SQL — Postgres RLS Politikası
-- 1. Tablo üzerinde RLS'i aktifleştirin ALTER TABLE invoices ENABLE ROW LEVEL SECURITY; -- 2. Her oturum için tenant_id zorunlu kılan güvenlik kuralı CREATE POLICY tenant_isolation_policy ON invoices FOR ALL USING (tenant_id = NULLIF(current_setting('app.current_tenant_id', true), '')::uuid); -- 3. Uygulama bağlantı açtığında oturum değişkenini ayarlar: -- SET LOCAL app.current_tenant_id = 'a3b8c9...'; -- Artık yapılan 'SELECT * FROM invoices' sorgusu sadece o tenant'ın satırlarını getirir!

3. JWT, Rol Tabanlı Yetkilendirme (RBAC) ve Ekip Yönetimi

B2B SaaS ürünlerinde bir kullanıcı birden fazla organizasyona (tenant) üye olabilir ve her birinde farklı rollere (Owner, Admin, Member, Viewer) sahip olabilir.

JWT (JSON Web Token) payload'ında kullanıcının aktif organizasyonu ve rol izinleri (permissions) şifrelenmeli; token süresi kısa (15 dakika) tutulurken refresh token rotasyonu ile oturum sürekliliği korunmalıdır.

4. Lisans Doğrulama ve Cihaz Bazlı Token Mimarisi

Shaz Vision çatısı altında geliştirdiğimiz masaüstü veya on-premise SaaS araçlarında kurduğumuz lisanslama motoru üç ayaklı bir doğrulama uygular:

  1. Donanım Parmak İzi (Hardware Hash): Cihazın CPU ID ve anakart seri numarası sha256 ile özetlenerek tekil bir makine anahtarı üretilir.
  2. Asimetrik İmzalı Lisans (Ed25519): Sunucu lisans dosyasını özel anahtarla imzalar. İstemci uygulama internet olmasa dahi açık anahtar (public key) ile lisansın sahte olmadığını doğrular.
  3. Heartbeat Sinyali: Uygulama çevrimiçi olduğunda 24 saatte bir lisans durumunu sunucudaki abonelik durumuyla senkronize eder.

5. Stripe & LemonSqueezy ile İdempotent Webhook Yönetimi

Abonelik döngüsünde en sık karşılaşılan kabus, ödeme sağlayıcısından gelen bir webhook'un (örn: subscription_created) ağ gecikmesi yüzünden 2 kez tetiklenmesi ve kullanıcıya çift lisans tanımlanmasıdır.

İdempotency İlkesi

Her webhook olayının tekil bir event_id değeri vardır. Bu ID veritabanında processed_events tablosuna yazılmadan önce sorgulanmalı; daha önce işlenmişse anında pas geçilerek sistem tutarlılığı korunmalıdır.

6. Kaynak Tüketimi ve Kota (Throttling) Sınırları

Tek bir kiracının (tenant) saniyede 1.000 istek atarak diğer tüm müşterilerin panelini yavaşlatmasını engellemek için Redis tabanlı Leaky Bucket algoritması uygulanmalıdır.

Ayrıca SaaS paket kademelerine göre (Free: 1.000 işlem/ay, Pro: 50.000 işlem/ay, Enterprise: Limitsiz) kota sayacı her başarılı API isteğinde Redis üzerinden atomik olarak (INCRBY) güncellenmelidir.

7. Shaz Vision SaaS Altyapısı

Sıfırdan bir SaaS ürünü ayağa kaldırırken kimlik doğrulama, çok kiracılı mimari, lisanslama ve faturalama tekerleğini yeniden icat etmek aylar sürebilir. Shaz Vision SaaS geliştirme süreçleri ile bu altyapıyı production seviyesinde, güvenli ve ölçeklenebilir biçimde hayata geçiriyoruz.

SaaS Fikrinizi Hayata Geçirin

Çok kiracılı SaaS panelinizi sıfırdan inşa etmek veya mevcut mimarinizi ölçeklemek için teknik ekibimizle görüşün.

8. Sıkça Sorulan Sorular

Postgres RLS performansı olumsuz etkiler mi?

tenant_id sütununda B-Tree indeksleme kullanıldığında RLS kuralının getirdiği ek sorgu gecikmesi genellikle 0.5 milisaniyenin altındadır ve pratikte hissedilmez.

Türkiye'deki müşteriler için hangi ödeme sağlayıcıları kullanılır?

Küresel satışlar için Stripe ve LemonSqueezy (MoR modeli); Türkiye içi abonelikler için ise İyzico veya PayTR tekrarlayan ödeme (recurring subscription) API'leri tercih edilmektedir.

SV

Shaz Vision Mühendislik Ekibi

Multi-tenant SaaS mimarileri, bulut veri tabanları, lisans doğrulama sistemleri ve kurumsal abonelik altyapıları üzerine çalışan backend mühendisleri.

← Diğer Blog Yazılarını Keşfet