Lead-generation SaaS
Bir SaaS platformunun ölçeklenme tavanını kaldırmak
Editörde on eşzamanlı kullanıcı tüm ürünü dakikalarca beklemeye düşürüyordu. O yükü önce izole ettik, sonra kalanı ayrıştırdık; müşteri tabanı mimari sınır olmadan altı katına çıktı.
- Dönem
- 2018 – 2019 · 13 ay
- Teslim ettiğimiz
- Mimari denetimi, monolit ayrıştırma, AWS göçü, CI/CD ve gözlemlenebilirlik
- Çalışma ortamı
- 7 kişilik ürün ekibinde backend liderliği
Müşteri ve proje adları gizlilik yükümlülüğü gereği paylaşılmıyor. Sektör, ölçek ve sonuçlar teslim edildiği hâliyle aktarılıyor.
300 → ~2.000
İş süresince müşteri hesabı
Dakikalar → yok
Eşzamanlı düzenlemede algılanan yavaşlama
4 servis
Tek monolitten domain güdümlü servisler
VPS → AWS
Altyapı göçü, bağımsız ölçeklenebilir
Bağlam
Site sahiplerinin kod yazmadan site içi popup’lar tasarlayıp hedefleyip yayınlamasını sağlayan self-servis bir SaaS ürünü. Müşteriler tasarımı, içeriği ve gösterim kurallarını bir web panelinde yapılandırıyor, test ediyor, sonra sitelerine tek bir JavaScript dosyası gömüyor; platform yapılandırılan koşulları her ziyaretçiye karşı değerlendirip buna göre render ediyor; yerleşik analitik de bunun bir parçası.
Hedefleme motoru ürünün temel ayrıştırıcısıydı ve 50’ye yakın birleştirilebilir gösterim koşulu destekliyordu: ziyaretçi ülkesi, yönlendiren site, belirli bir sayfaya önceki ziyaretler, belirli bir sayfada kalma süresi, hatta belirli bir sayfadaki belirli bir görselin görüntü alanına girip girmediği.
Problem
Ürün MVP’den hızla tek bir VPS üzerinde monolitik bir uygulamaya büyümüştü; otomatik test, linting ve CI/CD yoktu. Haftalık yayınlar elle yapılıyordu.
Bir darboğaz varoluşsaldı. Editör canlı önizleme sunduğu için kullanıcının yaptığı her değişiklik popup’ın JavaScript paketini yeniden üretiyordu ve kullanıcılar yoğun biçimde iterasyon yapıyordu. Editörde yalnızca 10–15 eşzamanlı kullanıcıyla tüm platform bozuluyor, bekleme süreleri birkaç dakikaya ulaşıyordu; üstelik genel trafik mütevazıydı.
Bu bir performans problemi değildir. Bu, işletmenin kaç müşterisi olabileceğine konmuş bir tavandır.
Yaklaşım
Mimariden önce denetim
Mevcut sistemi denetleyip yapısal zayıflıklar ve teknik borç üzerine resmi bir yazılı rapor ürettik; ardından bunu, ürün yol haritasını bloklamak yerine onunla birlikte yürütülebilecek önceliklendirilmiş, sıralanmış bir uygulama planına çevirdik. Özellik dondurması gerektiren bir ayrıştırma onay almaz, zaten almamalı.
Baskın yükü önce izole et
Monolitin domain güdümlü microservice’lere (kullanıcılar, popup’lar, analitik, raporlama) ayrıştırılmasını yönettik; her servisin bounded context’i, neyi sahiplendiği ve aynı derecede önemli olarak neyi sahiplenmediği açıkça kapsamlandırılarak tanımlandı.
Sıralama, hedef şekilden daha önemliydi. JavaScript üretim yükü önce kendi popup servisine taşındı; böylece platformun baskın yükü, diğer tüm yetenekleri bozmak yerine tek bir yerde sınırlandı. Ardından o servis özel olarak optimize edildi: Redis önbelleği, kuyruk tabanlı işleme, doğru boyutlanmış altyapı. Talep büyüdükçe yatay ve dikey olarak bağımsız ölçeklenebilir hâle getirildi.
Analitik servisi Elasticsearch üzerine kuruldu; raporlama alanına, onu işlemsel veritabanına zorlamak yerine erişim desenlerine uygun bir sorgu motoru verildi.
Altyapı ve teslim
- Tek VPS’ten AWS’e göçü yürüttük; servisleri seçip her birinin nasıl kullanılacağını tanımladık: EC2, SQS, RDS, ElastiCache, RabbitMQ, S3 ve yük dengeleme.
- Hiçbiri olmayan bir kod tabanına otomatik test ve linting getirdik ve bunları hatta kalite kapıları olarak yerleştirdik.
- Docker konteynerleştirmesini ve CI/CD hattını sıfırdan tasarladık; elle yayınların yerini, health-check ve log incelemesiyle doğrulanan, başarısızlıkta tanımlı rollback’i olan otomatik bir build-deploy aldı.
- Gözlemlenebilirliği kurduk: servis health-check’leri, her servisten merkezi hata logu toplama ve kritik hatalarda uyarı. Bu, ekibe üretim problemlerine dair ilk proaktif görüşü verdi.
Geliştirme ve ekip
- Hedef mimariyi üretim kodunda gösteren referans implementasyonlar kurduk; standart soyut bir kılavuz değil, izlenecek somut bir şey olarak var oldu.
- Ödemeleri sağlayıcıdan bağımsız bir soyutlamaya taşıdık. Platform tek sağlayıcı destekliyordu; ikincisini entegre ettik ve bunu yaparken ödeme katmanını ortak bir arayüzün arkasına yeniden yapılandırdık, böylece yeni sağlayıcılar iş mantığına dokunmadan eklenebilir hâle geldi.
- Backend ekibinde kod incelemesini sahiplendik ve junior geliştiriciye eşli programlama ve inceleme geri bildirimiyle mentorluk yaptık.
- React frontend’ine backend’le kesiştiği yerde katkı verdik: editör değişikliklerini mesaj kuyruğuna gönderip, kuyruk yanıtları geldikçe oluşan güncellemeleri canlı önizlemeye uygulamak.
Sonuç
- Platformun merkezi ölçeklenme tavanı kaldırıldı. Daha önce tüm sistemi dakikalarca beklemeye iten eşzamanlı düzenleme, algılanabilir bir yavaşlama olmadan çalıştı ve popup servisi yük arttıkça bağımsız ölçeklenebildi.
- İş süresince yaklaşık 300’den ~2.000 müşteri hesabına büyüme desteklendi; mimari sınırlayıcı etken olmadı.
- Platformun tüm kalite ve teslim temeli kuruldu: testler, linting, konteynerleştirme, CI/CD, health-check’li dağıtımlar ve rollback. Öncesinde hiçbiri yoktu.
- Ödeme entegrasyonu bir geliştirme projesi değil bir yapılandırma meselesi hâline geldi; yeni sağlayıcılar ve pazarlar ucuza açıldı.
- Ekibe net servis sınırları, dokümante edilmiş mimari yön ve çalışan referans implementasyonlar bırakıldı.
İlgili işler
Kurumsal perakende e-ticaret
Kurumsal bir e-ticaret platformunu günde 1.000 hatadan çift haneye indirmek
Büyük bir optik perakende zinciri için kurulmuş composable commerce platformu günde yaklaşık bin hata kaydı üretiyor, indirimlerde zaman aşımına düşüyor ve yanlış tutar tahsil ediyordu. Hata sınıflarını sırayla aşağı çektik.
~1.000 → çift haneliGünlük hata kaydı
Vaka çalışmasını okuyun →
Düzenlemeye tabi tüketici ürünleri · D2C
Düzenlemeye tabi bir doğrudan satış mağazası, 45 günde canlı ve ödeme alıyor
İşi, rakiplerin vermediği bir taahhütle kazandık: 45 gün içinde kart ödemesi alan özel bir mağaza, %100 uptime garantisi altında. İkisi de tutuldu.
45 günSıfırdan canlı kart ödemesine
Vaka çalışmasını okuyun →
Bina otomasyonu · IoT
Cihaz sözleşmesinin bir kez tanımlandığı bir bina otomasyon platformu
KNX donanımı üreten bir firma, hem kendi cihazlarını hem de herhangi bir üçüncü taraf KNX cihazını yönetecek bir yazılım platformuna ihtiyaç duyuyordu. Mimariyi tanımladık; mantık motorunu, görsel otomasyon editörünü ve tablet istemcisini kurduk.
Tek sözleşmeBackend, yönetim paneli ve mobilin paylaştığı düğüm şeması
Vaka çalışmasını okuyun →