Savaş DoğanYapay zeka entegrasyonu · Yazılım mimarisi

Çok kiracılı CRM: 19 modül, 4.000’den fazla test

Perde ve ev tekstili sektörü için çok kiracılı bir CRM’in teknik liderliğini yaptım. Aşağıda ürünün mimarisi, kiracı izolasyonunun nasıl korunduğu ve devralınabilir bir teslimin neye benzediği yazıyor.

Proje neydi?

Proje, perde ve ev tekstili sektöründeki bayilerin tekliften montaja kadar tüm sürecini tek sistemde yürüttüğü çok kiracılı bir CRM’di. Tek bir kod tabanı ve tek bir veritabanı birden çok bayiye hizmet eder; her bayi yalnızca kendi verisini görür. Ürün Qolay Bilişim bünyesinde geliştirildi ve üretime alındı; benim rolüm teknik liderlikti.

Rol
Software Developer Technical Lead
Dönem
2025 – 2026
Modül grubu
19
Otomatik test
4.000+
Mimari
Çok kiracılı · tek veritabanı, kiracı kimliğiyle izolasyon
Durum
Üretimde · teslim edildi

Hangi teknoloji yığını kullanıldı?

Önyüzde Angular ve mobil eşlenik için Ionic/Capacitor, arka uçta Node.js/Express ve Sequelize, veritabanında MySQL 8 kullanıldı. Arka plan işleri Redis üzerinde BullMQ ile, dosya depolama MinIO ile, anlık bildirim Firebase Cloud Messaging ile, SMS Netgsm ile yürütüldü. Tüm yığın tek bir sanal sunucuda Docker Compose ile çalışıyor.

Yığın ve her bileşenin işlevi
KatmanSeçimİşlevi
Web önyüzAngular · TypeScriptBayi ve merkez kullanıcılarının ana arayüzü
MobilIonic · CapacitorAynı kod tabanının saha kullanımı için ikinci hedefi
Arka uçNode.js · Express · Sequelizeİş kuralları, yetkilendirme, veri erişimi
VeritabanıMySQL 8Tüm kiracıların verisi, kiracı kimliğiyle bölünmüş
KuyrukRedis · BullMQRapor üretimi, bildirim, toplu işler
Nesne depolamaMinIOBelge, görsel ve teklif çıktıları
BildirimFirebase Cloud Messaging · NetgsmAnlık bildirim ve SMS
ÇalıştırmaUbuntu · Docker Compose · nginx · CertbotÜç katmanlı ağ ayrımıyla tek VDS üzerinde
TeslimGitHub Actions · konteyner kayıt defteriSabitlenmiş imaj etiketleriyle sürekli teslim

Kiracı izolasyonu nasıl korunuyor?

Kiracı izolasyonu tek bir kuralla korunuyor: kiracı kimliği isteğe bağlı bir filtre değil, veri katmanının zorunlu parçası. Bu kural üç yerde ayrı ayrı uygulanıyor — senkron istekler, kuyruğa düşen arka plan işleri ve nesne depolamadaki yol şeması. Üçünde de kural yorumla değil testle korunuyor.

Şema değişiklikleri çok kiracılı bir sistemde nasıl yapılır?

Şema değişiklikleri eklemeli yapılır, yıkıcı değil. Uygulanan desen genişlet–daralt: önce yeni alan eklenir, bir süre kod hem eski hem yeni alanı yazar, veri taşındıktan ve doğrulandıktan sonra eski alan kaldırılır. Tek bir göç adımıyla tüm kiracıları aynı anda riske atmak kabul edilmez.

  1. Genişlet. Yeni sütun veya tablo eklenir, eskisi yerinde kalır. Bu adım geri alınabilir.
  2. Çift yazma. Uygulama her iki alana da yazar, okuma hâlâ eskiden yapılır.
  3. Taşı ve doğrula. Geçmiş veri taşınır; iki alanın tutarlılığı ölçülür.
  4. Okumayı çevir. Okuma yeni alana geçer, eski alan yalnızca yazılmaya devam eder.
  5. Daralt. Eski alan kaldırılır. Buraya kadar her adım ayrı ayrı geri alınabilirdi.

Bu disiplinin bedeli, bir değişikliğin tek seferde bitmemesidir. Karşılığı ise şudur: göç adımlarından biri hata verdiğinde geri dönülecek bir yer vardır. Çok kiracılı bir sistemde bu takas her zaman bu yönde yapılır.

Teslim neye benziyor?

Teslim yalnızca çalışan bir sistem değil, başka bir ekibin devralabileceği bir kurulumdur. Bu projede teslim paketi şunları içerdi: sabitlenmiş imaj etiketleriyle Docker Compose tanımı, üç katmanlı ağ ayrımı, şifrelenmiş yedekleme, sağlık kontrolü uç noktası ve sürüm numaralarıyla alan kurallarını tutan yazılı bir proje kuralları dosyası.

Bu projeden çıkardığım üç ders

  1. İzolasyon bir özellik değil, bir değişmezdir. Özellik listesine giren şey unutulabilir; değişmez olan şey teste bağlanır. Kiracı sızıntısı testleri, ürünün en az değişen ama en çok koruyan bölümüydü.
  2. Geri bildirim listesi mimariden hızlı büyür. Sahadan gelen 55’ten fazla değişiklik talebini 19 modül grubuna ayırıp risk düzeyine göre sıraladık. Sıralamayı yapmadan çalışmak, en yüksek riskli maddeyi en sona bırakmak demektir.
  3. Mobil eşlenik bir kural olmalı, bir niyet değil. Webde yapılan her değişikliğin mobil tarafa yansıtılması yazılı bir kural haline getirilmediğinde, iki hedef altı ay içinde birbirinden ayrılır.

Son güncelleme: