Performance & Scalability serimizin bir parçası
Tam kılavuzu okuyunÖnbellekleme Stratejileri: Web Uygulamaları için Redis, CDN ve HTTP Önbelleğe Alma
Önbelleğe alma, uygulama performansını artırmanın en etkili tekniğidir. İyi tasarlanmış bir önbellek, veritabanı yükünü %90 oranında azaltabilir, yanıt sürelerini 200 ms'den 2 ms'ye düşürebilir ve altyapı maliyetlerinde aylık binlerce dolar tasarruf sağlayabilir. Ancak önbelleğe alma aynı zamanda yazılım mühendisliğinin en yanlış anlaşılan alanlarından biridir; geçersiz kılma hataları eski veriler yaratır, önbellek damgaları sunucuları çökertir ve kötü seçilmiş TTL'ler ya belleği boşa harcar ya da güncelliğini yitirmiş içerik sunar.
Önemli Çıkarımlar
- Katmanlarda önbelleğe alma tasarımı: tarayıcıdan CDN'ye, uygulamaya (Redis) ve veritabanı sorgu önbelleğine - her katman farklı veri özelliklerini işler
- Redis'in önbellek ayırma modeli en güvenli varsayılandır: önbellekten oku, veritabanına geri dön, kaçırıldığında önbelleği doldur
- HTTP önbellek başlıkları (Cache-Control, ETag, Vary) gereksiz istekleri tamamen ortadan kaldırır; en hızlı istek sunucunuza asla ulaşmayan istektir
- Önbelleği geçersiz kılmak, önbelleğe almaktan daha zordur -- kritik veri güncelliği için birincil strateji olarak TTL tabanlı süre sonu ve olaya dayalı geçersiz kılmayı kullanın
Önbellek Hiyerarşisi
Etkili önbelleğe alma, her katmanın farklı gecikme, kapasite ve tazelik gereksinimlerine göre optimize edildiği katmanlar halinde çalışır.
| Katman | Gecikme | Kapasite | En İyisi | Geçersiz kılma |
|---|---|---|---|---|
| Tarayıcı önbelleği | 0 ms (yerel) | Cihazla sınırlıdır | Statik varlıklar, kullanıcıya özel veriler | Önbellek Kontrolü başlıkları |
| CDN kenar önbelleği | 5-50ms | Uç düğümlerde terabaytlar | Statik varlıklar, genel API yanıtları | Temizleme API'si, TTL |
| Uygulama önbelleği (Redis) | 1-5ms | Gigabayt (RAM sınırlı) | Oturum verileri, hesaplanan sonuçlar, hız sınırları | TTL + olay odaklı |
| Veritabanı sorgu önbelleği | 10-50ms | Yapılandırılabilir | Tekrarlanan aynı sorgular | Tabloya otomatik yazma |
Katman 1: Tarayıcı Önbelleği
Tarayıcı önbelleği en hızlı ve en ucuz önbellektir çünkü ağ isteğini tamamen ortadan kaldırır. HTTP Önbellek Kontrolü üstbilgileri tarayıcının önbelleğe alma davranışını denetler.
İçerik karma dosya adlarına sahip statik varlıklar için (Next.js derleme çıktısı gibi), Cache-Control: public, max-age=31536000, immutable değerini ayarlayın. Dosya adındaki içerik karması, değiştirilen içeriğin yeni bir URL almasını garanti eder, böylece eski içerik konusunda endişelenmeden agresif bir şekilde önbelleğe alabilirsiniz.
HTML sayfaları ve API yanıtları için yeniden doğrulamalı daha kısa TTL'ler kullanın: Cache-Control: public, max-age=60, stale-while-revalidate=300. Bu, önbelleğe alınmış içeriği 60 saniye boyunca sunar, ardından arka planda yeniden doğrulayarak 5 dakikaya kadar eski içeriği sunmaya devam eder.
Katman 2: CDN Kenar Önbelleği
Bir CDN, içeriği küresel olarak dağıtılan uç sunucularda önbelleğe alır ve içeriği her kullanıcıya en yakın konumdan sunarak gecikmeyi azaltır. Küresel bir kullanıcı tabanı için, CDN önbelleğe alma, ortalama gecikmeyi 200-500 ms'den (başlangıç sunucusu gidiş-dönüş) 10-50 ms'ye (en yakın uç) düşürür.
CDN'de önbelleğe alınması gerekenler:
- Tüm statik varlıklar (JavaScript, CSS, resimler, yazı tipleri)
- Herkese açık pazarlama sayfaları (içerik tazeliği için kısa TTL ile)
- Ürün katalog sayfaları (e-Ticaret için 5-15 dakikalık TTL)
- Herkese açık veriler için API yanıtları (ürün listeleri, blog içeriği)
CDN'de önbelleğe alınmaması gerekenler:
- Kimliği doğrulanmış API yanıtları (kullanıcıya özel veriler)
- Alışveriş sepeti ve ödeme sayfaları
- Yönetici paneli sayfaları
- Web kancası uç noktaları
- Set-Cookie başlıklarıyla herhangi bir yanıt
Katman 3: Uygulama Önbelleği (Redis)
Redis, önbelleğe alınmış verilere mikro saniyelik gecikme süresiyle erişim sağlayarak, hesaplanması pahalı veya sık erişilen veriler için idealdir. Redis, CDN önbelleğe almanın aksine, kimliği doğrulanmış ve kullanıcıya özel verileri önbelleğe alabilir çünkü uygulamanız erişimi kontrol eder.
Katman 4: Veritabanı Sorgu Önbelleği
PostgreSQL, sık erişilen tablo ve dizin sayfalarını bellekte önbelleğe alan bir arabellek önbelleği (shared_buffers) tutar. Sorgu başına doğrudan kontrol edilemese de uygun yapılandırma, sıcak verilerin bellekte kalmasını sağlar. Raporlama sorguları için pahalı toplamaları önceden hesaplayan gerçekleştirilmiş görünümleri göz önünde bulundurun.
Redis Önbelleğe Alma Kalıpları
Redis, dizeleri, karmaları, listeleri, kümeleri, sıralanmış kümeleri ve akışları destekleyen web uygulamaları için en popüler uygulama düzeyinde önbellektir. Seçtiğiniz model, önbelleğinizin uç durumlarda nasıl davranacağını belirler.
Önbellek Kenarı (Tembel Yükleme)
Önbellek bir kenara en güvenli varsayılan kalıptır. Uygulama önce Redis'i kontrol eder. Bir önbellek isabetinde önbelleğe alınan verileri döndürür. Önbellek kaybı durumunda veritabanını sorgular, sonucu bir TTL ile Redis'te saklar ve verileri döndürür.
Avantajları:
- Yalnızca istenen veriler önbelleğe alınır (kullanılmayan verilerde boşa bellek harcanmaz)
- Veritabanı hatası yalnızca önbellek kayıplarını etkiler, önbellek isabetlerini etkilemez
- Uygulaması ve gerekçelendirilmesi basit
Dezavantajları:
- Her anahtar için ilk istek her zaman veritabanına ulaşır (soğuk başlatma)
- Veritabanı güncellemesi ile önbellek süresinin dolması arasında eski veriler mümkün
İçe Yazma
Yazma önbelleğe almada, her veritabanı yazma işlemi aynı zamanda önbelleği de anında günceller. Uygulama aynı işlemde hem veritabanına hem de Redis'e yazar.
Avantajları:
- Önbellek her zaman tazedir; eski veri penceresi yoktur
- Okuma performansı her zaman hızlıdır (ilk yazma sonrasında önbellek kaybı yaşanmaz)
Dezavantajları:
- Yazma gecikmesi artar (işlem başına iki yazma)
- Önbellek asla okunmayan veriler içerebilir (boşa giden bellek)
- Bir yazma başarılı, diğeri başarısız olduğunda dikkatli hata yönetimi gerektirir
Arkasına Yaz (Geri Yaz)
Arkasına yazma önbelleğe alma, Redis'e hemen yazar ancak veritabanına yazmayı bir arka plan işlemine erteler. Bu, yazma gecikmesini azaltır ancak Redis'in veritabanına yazma işlemi tamamlanmadan başarısız olması durumunda veri kaybı riskini ortaya çıkarır.
İdari kullanım -- Bu model, finansal işlemler veya stok sayımları için değil, ara sıra veri kaybının kabul edilebilir olduğu analiz sayaçları, hız sınırlaması ve oturum verileri için uygundur.
Önbellek Sıkışmasını Önleme
Popüler bir önbellek anahtarının süresi dolduğunda ve yüzlerce eşzamanlı isteğin tümü veritabanını yeniden oluşturmak için aynı anda veritabanını sorguladığında bir önbellek damgası meydana gelir. Bu, veritabanının aşırı yüklenmesine neden olabilir.
Önleme stratejileri:
- Yeniden doğrulama sırasında eskimiş -- bir istek arka planda önbelleği yeniden oluştururken biraz eskimiş veriler sunar
- Mutex kilitleme - diğerleri beklerken veya eski verileri sunarken yalnızca bir isteğin önbelleği yeniden oluşturmasını sağlamak için Redis SETNX'i kullanın
- Olasılığa dayalı erken sona erme -- TTL'nin sona ermesinden önce rastgele yeniden hesaplayın, yeniden oluşturmaları sona erme noktasında yoğunlaştırmak yerine zamana yayın
TTL Strateji Tasarımı
Yaşam süresi (TTL) değerleri, verilerin önbellekte ne kadar süre kalacağını belirler. Çok kısa olursa aşırı miktarda önbellek kaybı yaşarsınız. Çok uzun sürerse eski veriler sunarsınız.
| Veri Türü | Önerilen TTL | Gerekçe |
|---|---|---|
| Kullanıcı oturumu | 30 dakika (kayan) | Güvenliği UX ile dengeleyin |
| Ürün kataloğu | 5-15 dakika | Ürünler nadiren değişir, fiyatlandırmada tazelik önemlidir |
| Arama sonuçları | 1-5 dakika | Envanter güncellendikçe sonuçlar değişir |
| Statik içerik (hakkında, SSS) | 1-24 saat | İçerik nadiren değişir |
| Hız sınırlayıcı sayaçlar | Pencere boyutunu eşleştir | Hız sınırlamasının işe yaraması için kesin olmalıdır |
| Bilgisayarlı kontrol panelleri | 5-30 dakika | Yeniliği hesaplama maliyetiyle dengeleyin |
| Özellik bayrakları | 30-60 saniye | Bayrak değişikliklerinin hızlı yayılması |
Kayan TTL ve Sabit TTL
Sabit TTL, oluşturulduktan sonra belirli bir zamanda anahtarın geçerliliğini sona erdirir. Kayan TTL, anahtara her erişildiğinde son kullanma tarihini sıfırlar. Oturum verileri için kayan TTL kullanın (aktif oturumları canlı tutun) ve içerik önbellekleri için sabit TTL kullanın (kaynaktan düzenli olarak yenilendiğinden emin olun).
HTTP Önbellek Başlıkları Derinlemesine İnceleme
HTTP önbelleğe alma güçlüdür çünkü her katmanda çalışır; tarayıcı, CDN, proxy'ler ve yük dengeleyicilerin tümü aynı başlıkları anlar.
Önbellek Kontrol Yönergeleri
- genel -- herhangi bir önbellek (tarayıcı, CDN, proxy) yanıtı saklayabilir
- özel -- yalnızca tarayıcı önbelleğe alabilir (CDN veya proxy'ler değil) -- kimliği doğrulanmış yanıtlar için kullanın
- önbellek yok -- yanıtı önbelleğe alın ancak kullanmadan önce sunucuyla yeniden doğrulayın (yanıltıcı ad - önbellek yapar)
- mağaza yok -- hiçbir şekilde önbelleğe almayın (bankacılık sayfaları gibi hassas veriler)
- max-age=N -- önbellek N saniye boyunca geçerlidir
- s-maxage=N -- CDN/proxy önbellek süresi (paylaşılan önbellekler için maksimum yaşı geçersiz kılar)
- stale-while-revalidate=N -- arka planda yeniden doğrulama yapılırken eski içeriği N saniye boyunca sunar
- değişmez -- içerik asla değişmez (içerik karma URL'leriyle kullanın)
ETag ve Koşullu İstekler
ETag'ler içerik tabanlı önbellek doğrulaması sağlar. Sunucu, yanıt içeriğinin bir karmasını oluşturur ve bunu ETag başlığı olarak gönderir. Sonraki isteklerde tarayıcı ETag'ı If-None-Match başlığında gönderir. İçerik değişmediyse, sunucu 304 Değiştirilmedi (gövde yok) yanıtı vererek bant genişliğinden tasarruf sağlar.
İçeriğin öngörülemez şekilde değiştiği ve TTL tabanlı önbelleğe almanın çok agresif veya çok tutucu olacağı API yanıtları için ETag'leri kullanın.
Başlığı Değiştir
Vary başlığı, önbelleklere yanıtın belirli istek başlıklarına bağlı olduğunu bildirir. Örneğin, Vary: Accept-Encoding, gzip ve Brotli sürümlerinin ayrı ayrı önbelleğe alındığı anlamına gelir. Vary: Accept-Language farklı dil sürümlerini ayrı ayrı önbelleğe alır.
Vary'ye dikkat edin; çeşitli başlıkların her benzersiz kombinasyonu ayrı bir önbellek girişi oluşturur. Vary: Cookie her kullanıcının farklı çerezleri olduğundan önbelleğe almayı etkili bir şekilde devre dışı bırakır.
Önbellek Geçersiz Kılma Stratejileri
Önbelleğin geçersiz kılınması, bilgisayar bilimlerindeki iki zor sorundan biridir. Amaç, kaynak veriler değiştiğinde eski okumalara veya gereksiz önbellek kayıplarına yol açmadan önbelleğe alınmış verileri kaldırmak veya güncellemektir.
TTL Tabanlı Sona Erme Tarihi
En basit ve en güvenilir geçersiz kılma stratejisi. Önbelleğe alınan her anahtara bir TTL ayarlayın ve verilerin TTL penceresinde biraz eski olabileceğini kabul edin. Çoğu kullanım durumunda 5 dakikalık bir TTL, tazelik ve performans arasında mükemmel bir denge sağlar.
Olay Odaklı Geçersiz Kılma
Bir veritabanı kaydı değiştiğinde, önbellek silinmesini tetikleyen bir olayı yayınlayın. Bu, neredeyse anında tazelik sağlar ancak karmaşıklığı ve arıza modlarını artırır. Olay kaybolursa (ağ sorunu, kuyruk hatası), önbellek, TTL'nin süresi dolana kadar eski verileri sunar.
Envanter sayımları ve fiyatlandırma gibi kritik veriler için olaya dayalı geçersiz kılmayı kullanın ve diğer her şey için TTL'ye güvenin.
Etiket Tabanlı Geçersiz Kılma
Bazı önbellekleme sistemleri, önbellek girişlerinin etiketlerle etiketlenmesini destekler. Bir etiketi geçersiz kıldığınızda o etikete sahip tüm girişler silinir. Bu, belirli bir varlıkla ilgili önbelleğe alınmış tüm verileri (örneğin, bir ürün kataloğu güncellendiğinde ürünle ilgili tüm önbellekler) geçersiz kılmak için kullanışlıdır.
Sıkça Sorulan Sorular
Neyin önbelleğe alınacağına nasıl karar vereceğim?
Sık okunan, hesaplanması pahalı ve kısa süreliğine eskimeye karşı dayanıklı önbellek verileri. Ürün kataloğu sayfaları, kullanıcı izinleri, hesaplanan kontrol paneli ölçümleri ve yapılandırma verileri mükemmel adaylardır. Alışveriş sepetleri, gerçek zamanlı envanter sayımları ve finansal işlemler genellikle önbelleğe alınmamalı veya olaya dayalı geçersiz kılma ile çok kısa TTL'ler kullanılmalıdır.
Redis çökerse ne olur?
Önbellek bir kenara modeliyle uygulamanız doğrudan veritabanını sorgulamaya geri döner. Yanıt süreleri artar ancak uygulama işlevsel kalır. Uygulamanızı, önbellek kayıplarını zarif bir şekilde ele alacak şekilde tasarlayın - Redis, tek bir hata noktası değil, performans optimizasyonu olmalıdır.
Redis'e ne kadar bellek ayırmalıyım?
Önbellek isabet oranınızı ve bellek kullanımınızı izleyin. Bellek kullanımının %80'in altında olduğu ve %95'in üzerinde bir isabet oranı, iyi boyutlandırmanın göstergesidir. İsabet oranı %90'ın altına düşerse ya daha fazla belleğe ihtiyacınız vardır ya da TTL'leriniz çok kısadır. Çoğu uygulama için 1-2 GB ile başlayın ve izleme verilerine göre ölçeklendirin.
Redis'i mi yoksa Memcached'i mi kullanmalıyım?
Redis çoğu uygulama için daha iyi varsayılan seçimdir. Daha fazla veri türünü, kalıcılık seçeneğini, olaya dayalı geçersiz kılma için pub/sub'u ve atomik işlemler için Lua komut dosyasını destekler. Memcached, aşırı ölçekte saf anahtar/değer önbelleğe alma için daha basit ve biraz daha hızlıdır, ancak Redis daha fazla kullanım durumunu kapsar.
Dağıtımdan sonra eski verilerin sunulmasını nasıl önleyebilirim?
Önbellek anahtarlarınıza bir sürüm tanımlayıcı ekleyin (örneğin, dağıtım sürümünü veya şema sürümünü içeren önek anahtarları). Dağıtım yaptığınızda, yeni sürüm yeni önbellek anahtarlarını kullanır ve eski anahtarların süresi TTL aracılığıyla doğal olarak sona erer. Alternatif olarak, uygulamanız soğuk önbellekleri düzgün bir şekilde işliyorsa, dağıtım sırasında önbelleğin tamamını temizleyin.
Sırada Ne Var
Statik varlıklarınız ve genel sayfalarınız için HTTP önbellek başlıklarını uygulayarak başlayın; bu, sıfır uygulama değişikliğiyle anında performans artışı sağlar. Ardından, en pahalı veritabanı sorgularınız ve API uç noktalarınız için Redis önbelleğe almayı ekleyin.
Tam performans optimizasyonu resmi için iş platformunuzu ölçeklendirme hakkındaki temel kılavuzumuza bakın. Önbelleğinizi besleyen veri kaynağını optimize etmek için veritabanı sorgu optimizasyonu hakkındaki kılavuzumuzu okuyun.
ECOSIRE, Odoo ERP ve Shopify üzerinde çalışan platformlar için önbelleğe alma mimarileri uygular. Önbelleğe alma stratejisinin incelenmesi için ekibimizle iletişime geçin.
ECOSIRE tarafından yayınlandı — işletmelerin Odoo ERP, Shopify eCommerce ve OpenClaw AI genelinde yapay zeka destekli çözümlerle ölçeklenmesine yardımcı oluyor.
Yazan
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
ECOSIRE
ECOSIRE ile İşinizi Büyütün
ERP, e-Ticaret, yapay zeka, analitik ve otomasyon genelinde kurumsal çözümler.
İlgili Makaleler
Şekillendirilebilir Ticaret: E-Ticaret Mimarisinin Geleceği
Şekillendirilebilir ticareti ve MACH mimarisini keşfedin; API öncelikli, başsız bileşenlerin monolitik platformların yerini nasıl aldığını ve daha hızlı, daha esnek e-ticareti nasıl mümkün kıldığını keşfedin.
Veri Ağı Mimarisi: İşletmeler için Merkezi Olmayan Veriler
Veri ağı mimarisine (ilkeler, uygulama kalıpları, organizasyonel gereksinimler ve bunun ölçeklenebilir, etki alanı odaklı veri sahipliğini nasıl sağladığına) ilişkin kapsamlı bir kılavuz.
k6 Yük Testi: Lansmandan Önce API'lerinize Stres Testi Yapın
Node.js API'leri için k6 yük testinde uzmanlaşın. Sanal kullanıcı artışlarını, eşikleri, senaryoları, HTTP/2, WebSocket testini, Grafana kontrol panellerini ve CI entegrasyon modellerini kapsar.
Performance & Scalability serisinden daha fazlası
Web Kancası Hata Ayıklama ve İzleme: Eksiksiz Sorun Giderme Kılavuzu
Arıza modellerini, hata ayıklama araçlarını, yeniden deneme stratejilerini, izleme kontrol panellerini ve en iyi güvenlik uygulamalarını kapsayan bu eksiksiz kılavuzla webhook hata ayıklama konusunda uzmanlaşın.
k6 Yük Testi: Lansmandan Önce API'lerinize Stres Testi Yapın
Node.js API'leri için k6 yük testinde uzmanlaşın. Sanal kullanıcı artışlarını, eşikleri, senaryoları, HTTP/2, WebSocket testini, Grafana kontrol panellerini ve CI entegrasyon modellerini kapsar.
Nginx Üretim Yapılandırması: SSL, Önbelleğe Alma ve Güvenlik
Nginx üretim yapılandırma kılavuzu: SSL sonlandırma, HTTP/2, önbelleğe alma başlıkları, güvenlik başlıkları, hız sınırlama, ters proxy kurulumu ve Cloudflare entegrasyon modelleri.
Odoo Performans Ayarlama: PostgreSQL ve Sunucu Optimizasyonu
Odoo 19 performans ayarlaması için uzman kılavuzu. Kurumsal dağıtımlar için PostgreSQL yapılandırmasını, indekslemeyi, sorgu optimizasyonunu, Nginx önbelleğe almayı ve sunucu boyutlandırmayı kapsar.
Odoo ve Acumatica: Büyüyen İşletmeler için Bulut ERP
Odoo ve Acumatica'nın 2026 karşılaştırması: benzersiz fiyatlandırma modelleri, ölçeklenebilirlik, üretim derinliği ve hangi bulut ERP'nin büyüme yörüngenize uyduğu.
Üretimde Yapay Zeka Aracılarını Test Etme ve İzleme
Üretim ortamlarında yapay zeka aracılarını test etmeye ve izlemeye yönelik eksiksiz bir kılavuz. OpenClaw dağıtımları için değerlendirme çerçevelerini, gözlemlenebilirliği, sapma tespitini ve olay müdahalesini kapsar.