Black Friday'den Sağ Çıkış: Next.js E-Ticaret Sitesini 50K Eş Zamanlı Kullanıcıya Nasıl Ölçekledik
Black Friday'den bir hafta önce, yük testleri sitenin 8K eş zamanlı kullanıcıda çökeceğini gösterdi. 50K'ya ulaşmak için yaptığımız her optimizasyon.
Black Friday'den alti gun once, musterimizin e-ticaret sitesi yuk testinde 8.000 esza kullanicida cokeldi. 40.000-50.000 bekliyorlardi. Iste nasil calistirdik.
Oncelikle profil cikardik. Darbogazin sebebi kimsenin bekledigi yerde degildi. Urun listeleme sayfalari iyiydi -- ISR ile statik olusturulmuslardi. Sorun sepet ve odeme akisiydi. Her sepete ekleme islemi, tum sepeti (fiyatlar, indirimler, kargo tahminleri, vergi) senkron olarak yeniden hesaplayan tam bir sunucu gidis-donusu tetikliyordu. 8K kullanicida Node.js sunucusu tum zamanini sepet hesaplamalarina harciyordu.
Duzeltme 1: Sepet durumunu iyimser guncellemelerle istemciye tasidik. Kullanici bir urun eklediginde, UI yerel durumdan hemen guncelleniyor. Sunucu hesaplamasi arka planda debounce edilmis bir API cagrisi ile gerceklesiyor. Sunucu ayni fikirde degilse (fiyat degisti, urun stokta yok), uzlastirma yapiyoruz. Bu algilanan gecikmeyi 800ms'den 40ms'ye dusurdu ve sunucu yukunu %60 azaltti.
Duzeltme 2: Urun verileri icin Redis onbellekleme. Urun fiyatlari, stok seviyeleri ve indirim kurallari her sepet hesaplamasinda PostgreSQL'den cekiliyordu. 30 saniyelik TTL ile bir Redis katmani ekledik. Yogun trafik sirasinda onbellek isabet orani %94'tu. Bu tek basina p95 API yanit suresini 320ms'den 45ms'ye dusurdu.
Duzeltme 3: Urun sayfalari icin edge onbellekleme. Zaten ISR kullaniyorduk, ama yeniden dogrulama suresi 60 saniyeydi. Black Friday sirasinda envanter her birkac saniyede degisiyor. Envanter webhook olaylari tarafindan tetiklenen talep uzerine yeniden dogrulamaya gectik. Stok 10 birimin altina dustugunde sayfa hemen yeniden dogrulaniyor. Aksi takdirde 60 saniyelik ISR devam ediyor.
Duzeltme 4: Veritabani baglanti havuzu. Orijinal kurulum sunucusuz fonksiyon cagrisi basina dogrudan PostgreSQL baglantisi kullaniyordu. Olcekte bu, dakikalar icinde 100 baglanti limitini tuketti. Islem modunda PgBouncer ekledik -- yuzlerce fonksiyon cagrisini 20 gercek veritabani baglantisi uzerinden cokluyor. Baglanti hatalari sifira dustu.
Duzeltme 5: Stripe webhook yonetimi. Odeme akisi Stripe'i senkron olarak cagirip, onay bekleyip, sonra veritabanini guncelleyip, sonra onay e-postasi gonderiyordu. Asenkron yaptik: bir Stripe PaymentIntent olustur, hemen basari sayfasina yonlendir, webhook onayini asenkron ele al. Kullanici 'Siparis Onaylandi'yi 4.5 saniye yerine 1.2 saniyede goruyor.
Sonuc: Black Friday'de site 52.000 esza kullniciyi p95 sayfa yukleme suresi 1.1 saniye ile tasiadi. Sifir kesinti, sifir kayip siparis. Musterinin geliri bir onceki yilin Black Friday'inin 3.2 katiydi.
Meta-ders: performans optimizasyonu neredeyse hicbir zaman kodu daha hizli bir dilde yeniden yazmakla ilgili degildir. Asil darbogazin (varsayilan degil) bulunmasi ve onu kaldiran minimum degisikligin yapilmasiyla ilgilidir. Bes duzeltmemizden dordu mimari degisikliklerdi, kod duzeyinde optimizasyonlar degil. Once profil cikarin, sonra optimize edin.
Projeniz için konuşalım
15 dakika, taahhut yok.