İçeriğe geç

Aynı yazılımı birden çok şirket kullanacaksa ne gerekir?

Web Teknolojileri
Aynı yazılımı birden çok şirket kullanacaksa ne gerekir?

Aynı yazılımı birden çok şirket kullanacaksa gereken ilk şey ayrı kurulum değil, her kaydın hangi şirkete ait olduğunu taşıyan bir kiracı kimliği ve bu kimliği hiçbir sorguda atlamayan bir erişim katmanıdır. İkinci şart, şirketlerin ortak kullandığı tanımlarla kendilerine özel tanımların birbirinden ayrılmasıdır. Holding yapıları, birden çok tüzel kişiliği olan işletmeler, franchise ağları ve bayi portalları aynı sorunla karşılaşır: tek yazılım, çok sahip. Bu yazıda kiracı modelinin nasıl seçildiğini, veri ayrımının nerede kurulduğunu ve hangi tasarım hatalarının sonradan düzeltilemediğini anlatıyoruz.

Çok kiracılı yapı ne zaman gerekir

Her çok şirketli ihtiyaç çok kiracılı mimari istemez. Ayrımı doğru tanımlamak için şu soruyu sormak gerekir: bu iki birim aynı verileri mi görmek zorunda, yoksa birbirinin verisini görmemesi mi gerekiyor?

  • Aynı tüzel kişiliğin şubeleri genellikle tek kiracıdır; ayrım şube alanıyla yapılır
  • Ayrı tüzel kişilikler ayrı kiracıdır; muhasebe ve belge numaralandırması ayrılır
  • Franchise ve bayi yapılarında kiracı, kendi verisini yöneten bağımsız işletmedir
  • Hizmet olarak sunulan yazılımda her müşteri bir kiracıdır

Şube ile kiracıyı karıştırmak en sık yapılan hatadır. Şube, aynı şirketin içinde bir organizasyon birimidir ve raporlar birleşik alınır. Kiracı ise ayrı bir dünyadır; birleşik rapor istenirse bu özel olarak tasarlanır.

Veri ayrımı için üç model

Ayrım tek bir yöntemle yapılmaz. Üç yaygın model ve her birinin getirdiği yük şöyledir.

ModelNasıl çalışırZorlandığı yer
Ortak tablo, kiracı alanıTüm kayıtlar aynı tabloda, her satırda kiracı kimliğiTek bir eksik koşul veri sızdırır
Ayrı şemaHer kiracı kendi tablo kümesine sahipŞema değişikliği her kiracıda tekrarlanır
Ayrı veritabanıHer kiracı tamamen ayrı veritabanındaİşletme ve yedekleme yükü kiracı sayısıyla artar

Çoğu özel yazılım projesinde ortak tablo modeli seçilir, çünkü geliştirme ve güncelleme maliyeti en düşüktür. Ancak bu modelin bedeli disiplindir: kiracı koşulu uygulama kodunda değil, veriye erişen tek bir katmanda zorunlu kılınmalıdır. Elle yazılan her sorguya koşul eklemeyi geliştiricinin hafızasına bırakmak, eninde sonunda bir raporun başka şirketin verisini göstermesiyle sonuçlanır.

Ortak tanımlar ve kiracıya özel tanımlar

Kiracı ayrımı yalnızca hareket kayıtlarıyla ilgili değildir. Tanım kayıtlarının bir kısmı ortaktır, bir kısmı kiracıya özeldir ve bu ikisini ayırmayan yapı ya her kiracıya aynı listeyi dayatır ya da aynı tanımı onlarca kez çoğaltır.

  • Ortak olması makul olanlar: il ve ilçe listesi, para birimi kodları, ölçü birimleri
  • Kiracıya özel olması gerekenler: hesap planı, fiyat listesi, müşteri kartları, kullanıcılar
  • Tartışmalı olanlar: ürün kataloğu ve kategori ağacı — merkezden mi yönetilecek, kiracı mı ekleyecek

Ürün kataloğu kararı bayi portallarında ayrı bir önem taşır. Merkez kataloğu yönetiyorsa kiracı yalnızca kendi fiyatını ve stoğunu görür; kiracı kendi ürününü ekleyebiliyorsa katalog zamanla ayrışır ve merkezi raporlama güçleşir. Bu karar yazılmadan kodlanmamalıdır.

Kullanıcı, yetki ve kiracı geçişi

Kullanıcı ile kiracı arasındaki ilişki tek yönlü değildir. Bir muhasebeci iki şirkete de bakıyorsa aynı kullanıcı birden çok kiracıya bağlanır ve arayüzde aktif kiracı seçimi bulunur. Bu durumda yetki, kullanıcıya değil kullanıcı-kiracı çiftine verilir: aynı kişi bir şirkette tam yetkili, diğerinde yalnızca görüntüleyici olabilir.

Kiracı geçişinin kayıt altına alınması da gerekir. Kullanıcının hangi kiracı bağlamında hangi işlemi yaptığı iz kaydında görünmezse, sonradan yapılan incelemede kaydı kimin değiştirdiği anlaşılır ama hangi şirket adına hareket ettiği anlaşılmaz. Rol ve yetki kurgusunun genel çerçevesini rol ve yetki yönetimi yazısında anlattık.

Kullanıcı davetinin hangi kiracıya ait olduğu da açık olmalıdır. Bir kiracının yöneticisi yeni kullanıcı tanımlayabiliyorsa, bu tanımın yalnızca kendi kiracısı için geçerli olduğu ve başka kiracıya erişim veremeyeceği sistem tarafından garanti edilir. Aynı e-posta adresinin iki ayrı kiracıda kullanıcı olabilmesi ise baştan karara bağlanır; aksi halde ilk tanımdan sonra ikinci kiracı aynı kişiyi ekleyemez.

Numaralandırma, dosya ve rapor tarafı

Çok kiracılı yapıda en çok gözden kaçan üç nokta şudur. Birincisi belge numaralandırması: sipariş, fatura ve fiş numaraları kiracı içinde kesintisiz artmalıdır, ortak bir sayaç kullanılırsa her kiracının numaraları boşluklu görünür ve bu muhasebe tarafında soru işareti yaratır.

İkincisi dosya ve ek yönetimi. Yüklenen belgeler kiracı klasörlerine ayrılmalı, dosya bağlantıları tahmin edilebilir sırayla üretilmemelidir; aksi halde bir kiracının kullanıcısı adres satırını değiştirerek başka kiracının belgesine ulaşabilir. Üçüncüsü raporlama: kiracı içi raporlar standarttır, ancak holding düzeyinde birleşik rapor isteniyorsa bunun ayrı bir yetki seviyesi ve ayrı bir veri yolu olmalıdır. Birleşik raporu normal kullanıcı ekranına eklemek, ayrımın anlamını ortadan kaldırır.

Kısa kontrol listesi

  • Şube mi kiracı mı ayrımı yazılı olarak kararlaştırıldı mı
  • Kiracı koşulu tek bir erişim katmanında zorunlu kılındı mı
  • Hangi tanımlar ortak, hangileri kiracıya özel listelendi mi
  • Aynı kullanıcı birden çok kiracıya bağlanabiliyor mu, yetki çift bazında mı
  • Belge numaralandırması kiracı içinde kesintisiz mi
  • Dosya ve ek erişimi kiracı bazında kontrol ediliyor mu
  • Birleşik rapor ayrı yetki ve ayrı yolla mı veriliyor
  • Yedekleme ve veri silme talebi tek kiracı için uygulanabiliyor mu

Özet: Çok kiracılı yazılımda kritik olan şey veritabanı seçimi değil, kiracı ayrımının kod disiplininden bağımsız biçimde garanti edilmesi ve ortak-özel tanım sınırının en başta çizilmesidir. Bu iki karar sonradan düzeltilirken veri taşıma gerektirir, o yüzden proje başında konuşulur. KAV Yazılım, çok şirketli ve bayi ağına açık yazılım projelerinde bu ayrımı veri modeli düzeyinde kurar.

Sık sorulan sorular

Her şirket için ayrı kurulum yapmak daha kolay değil mi?

Kurulum anında kolaydır ama bakım aşamasında maliyeti büyür: her güncelleme, her yama ve her yedekleme kurulum sayısı kadar tekrarlanır. Kiracı sayısı birkaçı geçtiğinde tek kurulum ve kiracı ayrımı daha yönetilebilir olur. Ayrı kurulum, yalnızca kiracıların veri yerleşimi farklı olmak zorundaysa mantıklıdır.

Bir kiracının verisi diğerine sızarsa nasıl anlaşılır?

Sızıntı genellikle kiracı koşulu atlanmış bir rapor ya da listede fark edilir; kullanıcı tanımadığı bir müşteri adını görür. Bunu önlemenin yolu erişim katmanında koşulu zorunlu kılmak ve test ortamında birden çok kiracıyla senaryo denemesi yapmaktır. Kayıt sayılarının kiracı bazında düzenli karşılaştırılması da erken uyarı verir.

Kiracılar farklı özellikler isterse ne yapılır?

Farklılıklar kod kopyalamakla değil, kiracı bazlı ayar ve özellik anahtarlarıyla yönetilir. Her kiracı için ayrı sürüm tutmak, ilk güncellemede ayrı bakım yükü doğurur. İstenen farklılık ayarla karşılanamayacak kadar büyükse, o kiracı için ayrı modül tanımlamak daha doğrudur.

Bir kiracı sistemden ayrılırsa verisi ne olur?

Ayrılma senaryosu sözleşmede ve teknik tarafta birlikte tanımlanır: kiracının verisi dışa aktarılabilir biçimde teslim edilir, ardından saklama süresi dolunca silinir. Ortak tablo modelinde tek kiracının verisini ayıklayıp silmek, kiracı kimliği her tabloda tutulduysa mümkündür. Bu yüzden kiracı alanını yalnızca ana tablolara koymak yeterli değildir.
  • çok kiracılı yazılım
  • veri ayrımı
  • veritabani tasarimi
  • yazılım mimarisi
  • yetkilendirme