Bir web sayfasi ilk acilistan sonra saniyeler icinde tekrar yuklendiginde arkada calisan sey cogunlukla onbellektir (cache). Onbellek, sik istenen verinin kopyasini erisimi hizli bir yerde tutarak ayni isi tekrar tekrar yapmaktan kacinmanin yoludur. Bu rehber, onbellegin ne oldugunu, hangi katmanlarda calistigini ve bir yayin altyapisinda dogru kurulunca neyi hizlandirdigini adim adim anlatir.

Ilgili icerikler: SEO uyumlu haber yazilimi rehberi · Hizli veritabani yapisi nasil kurulur · Gorsel optimizasyonu nasil yapilir

Onbellek (Cache) Nedir?

Onbellek, hesaplanmasi veya getirilmesi pahali olan bir verinin kopyasini, ona daha hizli ulasilabilecek gecici bir depoda saklama teknigidir. Amac, ayni istegin ikinci kez geldiginde asil kaynaga (veritabani, disk, uzak sunucu) gitmeden yaniti dogrudan bu hizli depodan vermektir.

Fikir, bilgisayarin her katmaninda tekrar eder. Islemci, ana bellekten daha hizli olan kucuk L1/L2/L3 onbelleklerini kullanir; isletim sistemi disk bloklarini RAM'de tutar; tarayici indirdigi dosyalari yerelde saklar; sunucu ise uretilen HTML sayfasini yeniden uretmek yerine hazir tutar. Hepsinin ortak mantigi aynidir: bir kez uret, cok kez kullan.

Onbellek Neden Onemlidir?

Onbellegin degeri tek bir cumleyle ozetlenebilir: tekrarlanan isi ortadan kaldirir. Ayni veriyi her istekte yeniden hesaplamak veya diskten getirmek yerine hazir kopyayi sunmak, sistemin uc temel kaynagini birden korur.

  • Hiz: Bellekten okuma, diske veya uzak bir veritabanina gitmekten cok daha kisa surer; bu, kullaniciya daha hizli yanit demektir.
  • Olceklenebilirlik: Isteklerin buyuk bolumu onbellekten karsilaninca, asil kaynak ayni donanimla cok daha fazla trafik tasiyabilir.
  • Maliyet: Daha az veritabani sorgusu ve daha az kaynak sunucu istegi, daha az islemci ve bant genisligi tuketimi anlamina gelir.
  • Dayaniklilik: Ani trafik zirvelerinde onbellek bir tampon gorevi gorur ve asil kaynagi asiri yuklenmekten korur.

Onbellek Nasil Calisir? Hit ve Miss

Onbellegin calismasi iki temel duruma dayanir. Bir istek geldiginde sistem once onbellege bakar:

  • Cache hit (isabet): Istenen veri onbellekte vardir ve gecerlidir. Yanit dogrudan buradan doner; asil kaynaga hic gidilmez. En hizli yol budur.
  • Cache miss (kacirma): Veri onbellekte yoktur veya suresi dolmustur. Sistem asil kaynaga gider, veriyi getirir, kullaniciya doner ve genellikle bir sonraki istek icin onbellege de yazar.

Bir onbellegin ne kadar ise yaradigini olcen degere isabet orani (hit ratio) denir: toplam istekler icinde onbellekten karsilanan isteklerin payi. Isabet orani yukseldikce asil kaynagin uzerindeki yuk azalir ve ortalama yanit suresi kisalir.

Onbellek alani sinirsiz degildir. Dolunca yeni veriye yer acmak icin bir tahliye politikasi (eviction policy) devreye girer. En yaygin yaklasimlar sunlardir:

PolitikaKuralNe zaman uygun
LRUEn uzun suredir kullanilmayani atarGenel amacli; erisimde yakinlik varsa
LFUEn az sikda erisileni atarBelirli kayitlar surekli populerse
FIFOIlk giren ilk cikarBasit; erisim sikligi onemsizse
TTLSure dolunca gecersiz sayarVerinin belirli sure sonra bayatlamasi kabul edilebilirse

Onbellek Katmanlari

Bir web istegi kullanicidan veritabanina kadar birden cok durakta onbelleklenebilir. Her katman farkli bir sorunu cozer; guclu bir kurulum bunlari birlikte kullanir.

KatmanNerede calisirTipik kullanim
Tarayici onbellegiZiyaretcinin cihazindaStatik dosyalar: CSS, JS, gorsel, font
CDN / kenar onbellegiKullaniciya yakin dagitik sunuculardaStatik varliklar ve onbelleklenebilir sayfalar
Ters vekil (reverse proxy)Uygulama sunucusunun onundeTam sayfa HTML onbellegi (Varnish, Nginx)
Uygulama / nesne onbellegiUygulamanin yaninda (RAM'de)Sorgu sonuclari, parcalar, oturum (Redis, Memcached)
Veritabani onbellegiVeritabani motorunun icindeTampon havuzu, sorgu plani, sik okunan sayfalar

Tarayici Onbellegi ve HTTP Basliklari

Tarayici onbellegi, sunucunun gonderdigi HTTP yanit basliklariyla yonetilir. Sunucu, bir dosyanin ne kadar sure saklanabilecegini ve ne zaman yeniden dogrulanmasi gerektigini bu basliklarla soyler. En onemli baslik Cache-Control'dur.

http
# 1 yil boyunca sakla, surum damgali statik dosyalar icin idealdir
Cache-Control: public, max-age=31536000, immutable

# Sakla ama her kullanimdan once sunucuya dogrula
Cache-Control: no-cache

# Hic saklama (hassas, kisiye ozel yanitlar)
Cache-Control: no-store

# Bayat kopyayi goster, arka planda yenile
Cache-Control: max-age=60, stale-while-revalidate=600

Yaygin yonergelerin anlami sudur:

YonergeAnlami
max-age=NKopya N saniye boyunca taze sayilir
s-maxage=NPaylasimli onbellekler (CDN) icin ayri sure
publicHerkes tarafindan onbelleklenebilir
privateYalnizca tarayici saklar, paylasimli onbellek saklamaz
no-cacheSaklanir ama kullanimdan once dogrulanir
no-storeHicbir yerde saklanmaz
immutableSure dolana kadar yeniden dogrulama yapma

Bir kopyanin gecerligini kontrol etmek icin sunucu dogrulayicilar da gonderir: ETag (icerigin parmak izi) ve Last-Modified (son degisiklik tarihi). Tarayici bir sonraki istekte bunlari If-None-Match veya If-Modified-Since ile geri gonderir; icerik degismediyse sunucu govde yerine kisa bir 304 Not Modified doner ve bant genisligi tasarruf edilir.

CDN ve Kenar Onbellegi

CDN (Content Delivery Network), icerigin kopyasini cografi olarak dagitilmis sunuculara yayan bir agdir. Ziyaretci, kaynak sunucu yerine kendisine en yakin kenar (edge) noktasindan yanit alir. Bu, hem gecikmeyi (latency) dusurur hem de kaynak sunucunun yukunu azaltir.

CDN'ler s-maxage ve Cache-Control basliklarina gore davranir. Statik varliklar (gorsel, CSS, JS) icin CDN idealdir. Onbelleklenmis kopyalari elle guncellemek gerektiginde CDN'in temizleme (purge) ozelligi kullanilir. Gorselleri boyut ve bicim acisindan da hafifletmek icin gorsel optimizasyonu rehberimize bakabilirsiniz.

Uygulama ve Nesne Onbellegi

Sunucu tarafinda, tekrar tekrar hesaplanan verileri bellekte tutmak icin nesne onbellekleri kullanilir. En bilinen ikisi Redis ve Memcached'dir; her ikisi de veriyi RAM'de anahtar-deger olarak saklar ve disk yerine bellekten okuma sayesinde cok hizli yanit verir.

En yaygin desen cache-aside (yanina onbellek) desenidir: uygulama once onbellege bakar, veri yoksa asil kaynaktan alir ve sonraki istekler icin onbellege yazar.

python
def haber_getir(haber_id):
    anahtar = f"haber:{haber_id}"
    veri = cache.get(anahtar)          # 1) once onbellege bak
    if veri is not None:
        return veri                    #    cache hit
    veri = db.sorgu(haber_id)          # 2) cache miss -> asil kaynak
    cache.set(anahtar, veri, ttl=300)  # 3) 5 dk sakla
    return veri

Nesne onbellegi ozellikle veritabani yukunu azaltmakta etkilidir. Ayni sorguyu binlerce kez calistirmak yerine sonucu bir sure saklamak, hem veritabanini rahatlatir hem de yaniti hizlandirir. Veritabani katmanini bastan hizli tasarlamak icin hizli veritabani yapisi rehberimiz tamamlayici bir kaynaktir.

Veritabani Onbellegi

Veritabani motorlarinin kendi onbellek mekanizmalari vardir. En onemlisi tampon havuzudur (buffer pool / buffer cache): sik okunan veri ve indeks sayfalari RAM'de tutulur, boylece diske gitme ihtiyaci azalir. Ayrica sorgu planlari ve hazir ifadeler de onbelleklenerek ayni sorgunun tekrar cozumlenmesi onlenir.

Onbellek Gecersiz Kilma (Invalidation)

Onbellegin en zor kismi, kopyanin ne zaman bayatladigina karar vermektir. Asil veri degistiginde onbellekteki eski kopya hala servis edilirse kullanici guncel olmayan icerik gorur. Bu sorunu cozmenin baslica yollari:

  • Sure temelli (TTL): Her kopyaya bir omur verilir; sure dolunca otomatik gecersiz olur. Basittir ama guncelleme ile gorunurluk arasinda gecikme birakir.
  • Olay temelli temizleme: Veri degistiginde (ornegin haber guncellenince) ilgili anahtar elle silinir veya yenilenir. Daha tazedir ama daha fazla kod gerektirir.
  • Surum damgalama (cache busting): Dosya adina icerik ozeti eklenir (ornegin style.a1b2c3.css); icerik degisince URL degisir ve tarayici yeni dosyayi indirir.

Haber Sitelerinde Onbellek Stratejisi

Haber siteleri onbellek acisindan ozel bir durumdur: trafik ani zirveler yapar (bir haber viral olunca), icerik cogunlukla okunur ama nadiren degisir, ve bir manset dakikalar icinde guncellenebilir. Dengeli bir strateji su unsurlari birlestirir:

  • Statik varliklar (gorsel, CSS, JS) icin uzun sureli tarayici ve CDN onbellegi, surum damgalama ile birlikte.
  • Sik degismeyen sayfalar (kategori, arsiv) icin kisa sureli tam sayfa onbellegi.
  • Ana sayfa ve manset gibi hizli degisen alanlar icin cok kisa TTL veya olay temelli temizleme.
  • Kisiye ozel bolumler (giris yapmis kullanici, yorum formu) icin onbellegi devre disi birakma veya kenar tarafta parca birlestirme.

Ana sayfada tazelik, ic sayfalarda hiz onceliklidir. Bir mansetin bir dakika gecikmeyle guncellenmesi genellikle kabul edilebilir; bunu, her istekte tum sayfayi yeniden uretmenin maliyetiyle karsilastirin.

Yaygin Onbellek Hatalari

  • Kisiye ozel veriyi paylasimli onbellege koymak: Bir kullanicinin oturum bilgisi baskasina servis edilebilir. Bu tur yanitlarda private veya no-store kullanin.
  • Surum damgalamadan uzun max-age: Bir dosyaya 1 yil omur verip adini degistirmezseniz, guncellemeleriniz kullanicilara ulasmaz.
  • Gecersiz kilmayi unutmak: Icerik degisir ama onbellek eski kopyayi servise devam eder.
  • Her seyi onbelleklemek: Nadiren istenen veya surekli degisen veriyi onbelleklemek bellek israf eder ve isabet oranini dusurur.

Sikca Sorulan Sorular

Onbellek ile CDN ayni sey mi?

Hayir. Onbellek genel bir kavramdir; CDN ise bu kavrami cografi olarak dagitilmis sunucular uzerinde uygulayan bir hizmettir. CDN bir tur onbellek katmanidir ama tek onbellek turu degildir.

Onbellek suresini ne kadar vermeliyim?

Verinin degisim sikligina baglidir. Surum damgali statik dosyalara cok uzun sure verebilirsiniz. Sik degisen icerige kisa TTL verin veya olay temelli temizleme kullanin. Tek dogru sayi yoktur; tazelik ile hiz arasindaki dengeyi siz belirlersiniz.

no-cache gercekten onbelleklemeyi kapatir mi?

Hayir; isim yanilticidir. no-cache kopyanin saklanmasina izin verir ama her kullanimdan once sunucuya dogrulatir. Gercekten hicbir yerde saklanmamasini istediginiz veri icin no-store kullanin.

Redis ile Memcached arasindaki fark nedir?

Ikisi de bellekte calisan hizli anahtar-deger depolaridir. Memcached daha yalindir ve basit onbellek senaryolarina odaklanir; Redis ise liste, kume ve siralanmis kume gibi zengin veri yapilari, kalicilik secenekleri ve yayinla-abone ol gibi ek ozellikler sunar. Yalnizca basit onbellek yeterliyse ikisi de is gorur; daha fazla veri yapisina ihtiyaciniz varsa Redis daha esnektir.

Onbellek verisi RAM'de kaybolursa ne olur?

Onbellek yalnizca kopya tuttugu icin veri kaybi yasanmaz. Sunucu yeniden baslatilir veya onbellek temizlenirse, gelen ilk istekler cache miss olur ve asil kaynaktan yeniden doldurulur. Bu kisa surede sistem yavas calisabilir; buna genellikle onbellegin "sogumasi" denir.