Bir Web AjansBir Web Ajans

Kiracı başına veritabanı: çok kiracılı sistemlerde izolasyonu şansa bırakmamak

JournalPort ve CongressPort'ta her dergi ve her kongre kendi veritabanında yaşıyor. Neden bu yolu seçtiğimizi ve bedelini anlatıyoruz.

Çok kiracılı bir sistemde en yaygın yaklaşım, bütün kiracıları aynı tablolarda tutup her satıra bir tenant_id eklemektir. Ucuzdur, kurulumu kolaydır. Ama izolasyon her sorgunun doğru filtreyi hatırlamasına bağlıdır. Tek bir unutulmuş WHERE koşulu, bir derginin hakem raporunu başka bir derginin editörüne gösterebilir.

Sınırı veri katmanına çizmek

Nova JournalPort'ta bir dergi onaylandığında sistem ona ayrı bir MySQL veritabanı açar, migration'ları çalıştırır, başlangıç verisini yükler ve sahip hesabını oluşturur. Dergi tablolarında tenant_id sütunu yoktur; çünkü gerek yoktur. İstek, Host başlığından çözümlenen dergiye bağlanır ve o istek boyunca başka bir veritabanını göremez.

Nova CongressPort aynı ilkeyi Laravel tarafında uygular: her müşteri kongresi kendi veritabanında ve kendi dosya önekinde çalışır; bir operatör CRM'i kiracıları imzalı bir iç API ile kurar, askıya alır ve alan adlarını yönetir.

Bedeli

  • Migration'lar her kiracıda ayrı çalışır; bu yüzden master ve kiracı migration'larını ayrı dizilerde tutuyoruz.
  • Kiracılar arası rapor için tek bir SQL sorgusu yazamazsınız; portal genelindeki istatistikler ayrı bir master katalogdan hesaplanır.
  • Kurulum bir süreçtir, bir satır ekleme değil: PENDING, PROVISIONING, ACTIVE, FAILED gibi durumlarla yönetilir.

Kör hakemlik, kişisel veri ve lisans ayrımı gibi kuralların gerçekten önemli olduğu alanlarda bu bedeli ödemeye değer buluyoruz. İzolasyon, kodun her satırında hatırlanması gereken bir kural olmaktan çıkıp mimarinin kendisi oluyor.

Sıradaki sistem

Operasyonunuzuanlatın, sisteminibiz kuralım.