Teknik

E-pin Scriptin Neden Yavaş Olduğunu Sana Kimse Açıkça Söylemedi: Panelini Uçuran 5 Katmanlı Önbellek Sisteminin İçini Satır Satır Açıyoruz

E-pin scriptinde önbellek katmanları nasıl kurulur? Opcode, nesne, sorgu, tam sayfa ve kenar önbelleği; stok tutarlılığı ve kampanya gecesi çökme çözümleri.

E-pin Scriptin Neden Yavaş Olduğunu Sana Kimse Açıkça Söylemedi: Panelini Uçuran 5 Katmanlı Önbellek Sisteminin İçini Satır Satır Açıyoruz

Çoğu e-pin satıcısı panelinin yavaşlamasını tek bir cümleyle açıklar: "Sunucu yetersiz kaldı." Hosting paketini büyütür, RAM ekler, hatta VDS'e geçer. İlk iki hafta iyi gider, sonra aynı yerden aynı yavaşlık geri döner. Çünkü sorun sunucunun gücü değildi; sorun, sitenin aynı soruyu saniyede onlarca kez yeniden sormasıydı. Ana sayfada 24 ürün kartı varsa ve her kart için fiyat, stok, kur, kategori adı ve bayi indirimi ayrı ayrı hesaplanıyorsa, ziyaretçi başına yüzlerce tekrar iş üretiyorsun demektir. Daha güçlü sunucu bu tekrarı hızlandırır, ortadan kaldırmaz.

İşin sessiz tarafı şu: önbellek, bir özellik değil bir mimari katman dizisi. İyi kurulmuş bir e-pin satış scripti aynı veriyi beş farklı yerde farklı ömürlerle tutar ve hangi katmanın ne zaman temizleneceğini bilir. Kötü kurulmuş bir epin yazılım ise ya hiç önbellek kullanmaz ve boğulur, ya da her şeyi önbelleğe atar ve müşteriye tükenmiş kod satar. Bu yazıda o beş katmanı tek tek açıyoruz: hangisi ne kazandırır, hangisi seni çift satışa sürükler, kampanya gecesi hangisi patlar. Pinova'nın altyapısında bu katmanların nasıl ayrıldığını da örnekleyerek anlatacağım.

%78İlk sayfa yükünün önbelleklenebilir veriden gelme oranı
340 msOpcode önbelleği kapalı bir panelde boşa giden ortalama derleme süresi
1/14Nesne önbelleği sonrası ürün listesi sorgu sayısındaki düşüş
%31Kampanya gecesi önbellek boşaltma anında oluşan ani yük artışı

Panelin Yavaş Değil, Aynı Soruyu Saniyede Kırk Kez Soruyor

Bir e-pin sitesinin trafiği diğer e-ticaret sitelerine benzemez. Ziyaretçi tek ürüne gelir, fiyata bakar, sepete atar, öder ve çıkar. Ortalama oturum süresi kısa, ama sayfa başına veri yoğunluğu çok yüksektir: kur bilgisi, bayi seviyesi, kampanya kuralı, stok adedi, teslimat tipi. Bu beş bilgi tek ürün kartında birleşir. 24 kartlık bir vitrinde 120 karar demektir.

Önbelleğin işi bu kararların sonucunu saklamaktır, girdilerini değil. Yani "1 numaralı ürünün bayi seviyesi 2 için nihai satış fiyatı 148,90 TL" bilgisini saklarsın; kuru ve indirim tablosunu her seferinde yeniden çarpmazsın. Doğru kurgulanmış bir dijital ürün satış scripti, bu nihai sonucu anahtarlar halinde tutar ve anahtarın içine değişkenleri gömer: ürün kimliği, bayi seviyesi, kur sürümü. Kur değişince yalnızca kur sürümü artar ve ilgili anahtarlar kendiliğinden geçersizleşir. Bu tek cümle, çoğu yavaş panelin tek eksiğidir.

Katman Bir: Opcode Önbelleği, Hiç Kimsenin Açık Olduğunu Kontrol Etmediği Ayar

PHP her istekte kodunu okur, ayrıştırır, derler ve çalıştırır. Opcode önbelleği bu zincirin ilk üç adımını hafızada tutar. Kulağa teknik geliyor ama pratikte tek satırlık bir ayardır ve kapalı olduğunda her istekte 200-400 milisaniyeyi çöpe atarsın. Paylaşımlı hostingte genelde açıktır, fakat kendi VDS'ini kuran satıcıların yarısında hafıza limiti fazla küçük kalır; önbellek sürekli dolar, sürekli boşalır ve hiç işe yaramaz.

Kontrol etmenin yolu basit: önbellek doluluk oranına ve "kaçırma" sayısına bakarsın. Doluluk %90'ın üstündeyse limiti büyütmen gerekir. Bir diğer tuzak da FTP ile dosya güncelledikten sonra eski kodun servis edilmeye devam etmesidir; deploy sonrası önbelleği elle temizlemeyen ekipler "düzelttim ama değişmedi" sarmalına girer. Bu yüzden ciddi bir e-pin satış yazılımı kurulumunda deploy adımının sonuna mutlaka bir temizleme çağrısı konur.

Katman İki: Nesne Önbelleği ve "Bayi Fiyatı" Tuzağı

Nesne önbelleği, veritabanından çıkan hazır sonuçları anahtar-değer olarak tutar: kategori ağacı, kur tablosu, kampanya kuralları, ürün özet kartları. Bunlar günde belki üç kez değişir ama saniyede kırk kez okunur. Klasik hata, bu katmana bayiye özel veriyi anahtarsız yazmaktır. Bir kez yanlış anahtarladığında, 3. seviye bayinin gördüğü indirimli fiyat son kullanıcıya da görünür ve kârını kendi elinle sıfırlarsın.

Doğru yaklaşım, anahtarı kimliğe göre parçalamaktır: ortak veri ortak anahtarda, kişiye özel veri kullanıcı segmentiyle birleşmiş anahtarda. Segment sayısı sınırlı tutulur; her kullanıcıya özel anahtar üretirsen önbellek şişer ve isabet oranı düşer. Pinova'nın yaklaşımı segmenti "bayi seviyesi + para birimi" ile sınırlamak; böylece 5.000 kullanıcı için 12 varyant yeterli oluyor.

KatmanNe saklarÖnerilen ömürTipik kazançAna risk
OpcodeDerlenmiş PHP koduDeploy'a kadar200-400 ms/istekDeploy sonrası eski kod
NesneKategori, kur, kampanya5-60 dakikaSorgu sayısı 14'te 1Bayi fiyatı sızması
Sorgu sonucuÜrün listesi, sayfalama60-300 saniyeVeritabanı yükü -%60Yeni ürünün gecikmeli görünmesi
Tam sayfaHTML çıktısı30-120 saniyeTTFB 900 ms → 80 msSepet ve oturum karışması
Kenar (CDN)Görsel, CSS, JS7-30 günBant genişliği -%70Sürümsüz dosya güncellemesi

Katman Üç: Tam Sayfa Önbelleği Neden E-pin Sitelerinde Tehlikelidir?

Tam sayfa önbelleği en büyük hız kazancını verir çünkü PHP'yi hiç çalıştırmaz. Blog için mükemmeldir. Ama e-pin sitesinde sayfanın sağ üst köşesinde "Bakiye: 412,50 TL" yazıyorsa, o sayfayı olduğu gibi saklamak demek başka birinin bakiyesini üçüncü kişiye göstermek demektir. Bu yüzden tam sayfa önbelleği yalnızca oturumsuz ziyaretçiye verilir ve giriş çerezi görüldüğü anda atlanır.

İkinci koruma, kişiye bağlı parçaların sayfadan koparılmasıdır. Bakiye, sepet adedi, son siparişler; bunlar sayfa içine gömülmek yerine ayrı bir istekle sonradan doldurulur. Böylece HTML iskeleti herkes için aynı kalır, kişisel kısımlar tarayıcıda tamamlanır. Bu ayrım yapılmamış bir e-pin scriptinde tam sayfa önbelleğini açmak, hız kazancı değil veri sızıntısı üretir.

Önbellek yanlış kurulduğunda oluşan arıza dağılımı

  • Eski stok/fiyat gösterimi 40%
  • Oturum ve sepet karışması 30%
  • Boşaltma anında ani yük 20%
  • Sürümsüz statik dosya 10%

Stok Sayısını Önbelleğe Almak Seni Nasıl Çift Satışa Sürükler?

Bu, e-pin işinde en pahalı hata. Kod stoğu 3 adet kalmışken stok bilgisi 120 saniye önbellekte tutuluyorsa, o iki dakika içinde beş kişi aynı anda sepete ekleyip ödeme yapabilir. Sistem beşine de "başarılı" der, sonra teslimat kuyruğunda iki sipariş karşılıksız kalır. Müşteri parayı ödemiş, kodu almamıştır; iade, itibar kaybı ve yorumlarda "dolandırıcı" etiketi tam buradan doğar.

Çözüm, stoğu iki ayrı doğruluk seviyesine bölmektir. Vitrindeki "stokta var" göstergesi önbelleklenebilir, çünkü yaklaşık bilgi yeter. Ama ödeme anındaki stok kontrolü asla önbellekten okunmaz; doğrudan veritabanından, satır kilidiyle ve tek işlem içinde yapılır. Pinova'daki akış tam olarak böyle kurulur: liste ekranı hızlı ve toleranslı, ödeme adımı yavaş ve tavizsiz. Bu ayrımı kuran bir dijital ürün satış yazılımı, hem hızlı hem güvenilir olabilir; kurmayan biri ikisinden birini feda etmek zorunda kalır.

Tek cümlelik kural

Parayı etkileyen her okuma canlı, gözü etkileyen her okuma önbellekli olsun. Bu ayrımı yaptığın gün çift satış şikâyetlerinin neredeyse tamamı biter.

Önbelleği Boşaltma Anı: Kampanya Gecesi Neden Her Şey Çöker?

Sitenin en kırılgan anı, önbelleğin dolduğu an değil boşaldığı andır. Kampanya başlatmak için fiyat tablosunu güncellersin, script de "emin olmak için" bütün önbelleği siler. O saniyede sitede 600 kişi vardır ve 600 istek aynı anda ham veritabanına gider. Buna önbellek çığı denir ve genellikle 503 hatasıyla sonuçlanır.

Üç basit önlem bunu tamamen engeller. Birincisi seçici geçersizleştirme: yalnızca değişen ürün grubunun anahtarlarını sil, tümünü değil. İkincisi kilitli yenileme: aynı anahtarı yeniden üretme işini tek isteğe ver, diğerleri eski değeri okumaya devam etsin. Üçüncüsü ısıtma: kampanyayı yayına almadan önce yeni fiyatlarla ilk 100 ürünün anahtarını arka planda doldur. Bu üç adım birlikte uygulandığında, kampanya duyurusunun ilk 30 saniyesi sitenin en hızlı anı olur, en kötü anı değil.

KontrolNasıl bakılırGeçer değerDurum
Opcode önbelleği açık mıSunucu bilgi sayfası / doluluk oranıAçık, doluluk <%85Zorunlu
Deploy sonrası temizlemeYayın adımlarında çağrı var mıOtomatikZorunlu
Bayi fiyatı anahtarlaması2 farklı seviyeyle aynı ürünü açFiyatlar farklıKritik
Oturumlu istekte tam sayfa atlamaGiriş yapıp yanıt başlığına bakBYPASSKritik
Ödeme anı stok kontrolüKodda kilit kullanımıCanlı + kilitliKritik
Seçici geçersizleştirmeTek ürün güncelle, diğerlerini izleDiğerleri etkilenmezÖnerilir
Statik dosya sürümlemeCSS/JS adresinde sürüm etiketiVarÖnerilir
Önbellek isabet oranıHaftalık ölçüm%80 üzeriİzleme

Bu Katmanları Sıfırdan Kurmak mı, Hazır Kurulmuş Olanı Almak mı?

Yukarıdaki beş katmanı kendi kodunda kurmak teknik olarak mümkün ama iş yükü göründüğünden büyüktür. Zor kısım katmanları açmak değil, geçersizleştirme kurallarını doğru yazmak. Kaç gün sonra hangi anahtarın hangi olayda silineceğini haritalamadan başlarsan, altı ay sonra "fiyatı değiştirdim ama sitede eski görünüyor" diye kod içinde kaybolursun. Hazır bir altyapıda bu haritanın zaten çizilmiş olması, aldığın en büyük zaman tasarrufudur.

Kendi e-pin yazılımı tercihini yaparken tek soru sor: fiyat güncellediğimde sitede kaç saniyede görünüyor ve o anda site ayakta kalıyor mu? Cevabı net veremeyen bir sistem, trafiğin arttığı gün seni yalnız bırakır. Özellikler sayfasındaki performans başlıkları ve fiyat tablosu, bu katmanların hangi paketle birlikte geldiğini gösteriyor.

Panelin kampanya gecesini kaldırsın

Önbellek katmanları, stok kilidi ve seçici geçersizleştirme kurulu halde gelen bir altyapıyla başla. Kendi kodunda deneme yanılma yaparak öğrenmek zorunda değilsin.

Önbellek açmak stok hatasına yol açar mı?

Yalnızca ödeme anındaki stok kontrolünü de önbellekten okursan yol açar. Vitrindeki gösterge önbellekli, ödeme kontrolü canlı ve kilitli olduğunda hata oluşmaz.

Kaç dakikalık önbellek ömrü doğru?

Veri tipine göre değişir. Kategori ağacı için 30-60 dakika, ürün listesi için 1-5 dakika, HTML çıktısı için 30-120 saniye makul aralıklardır. Fiyat değişiminde ömrü beklemek yerine seçici silme kullanılır.

Paylaşımlı hostingte bu katmanlar kurulabilir mi?

Opcode ve dosya tabanlı nesne önbelleği çoğu paylaşımlı pakette çalışır. Bellek tabanlı sunucu gerektiren katmanlar için VDS gerekir; ancak ilk üç katman tek başına büyük fark yaratır.

Fiyat güncellemesinden sonra eski fiyat görünüyorsa ne yapmalıyım?

Sorun neredeyse her zaman geçersizleştirme eksikliğidir. Fiyat kaydeden kod, ilgili ürün ve liste anahtarlarını silmeli; ayrıca kenar önbelleğinde o adres varsa oradan da temizlenmeli.

Önbellek, hız için eklenen bir süs değil; işletmenin kaç kişiyi aynı anda ağırlayabileceğini belirleyen taşıyıcı duvar. Bu duvarı doğru kurmuş bir sistemde 50 kişiyle 500 kişi arasında ziyaretçi açısından hiçbir fark yoktur. Anlattığım katmanların gerçek bir panelde nasıl davrandığını kendi gözünle görmek istersen canlı demo üzerinden ürün listesini, fiyat değişimini ve sepet akışını sırayla dene; farkı ilk tıklamada hissedeceksin.

Daha Fazlasını Keşfedin

Dijital ürün satışı ve otomasyon üzerine güncel rehberlere göz atın.

Tüm Yazıları Gör →
Bu yazıyı paylaşın
Bu yazıyı beğendiniz mi?
Teşekkürler!
← Tüm yazılar