API Önbellekleme: Yanıtları Hızlandırmak ve Yedek Veriyle Kesintiye Hazırlanmak

Dış bir servisten veri çeken siteniz o servis yavaşladığında ya da çöktüğünde boş kalmamalı. API önbellekleme ve yedek veri kurgusu bunun için var.

İçindekiler
  1. API önbellekleme nasıl çalışır?
  2. Önbellek süresi nasıl seçilir?
  3. Yedek veri: kaynak çöktüğünde ne olur?
  4. Sık yapılan api önbellekleme hataları
  5. Bu işi nasıl birlikte yaparız?
  6. Sık sorulan sorular
  7. Sonuç

Sitenizde döviz kuru, altın fiyatı, hava durumu ya da stok bilgisi gibi dış bir servisten gelen bir veri gösteriyorsanız, o servisin bir gün yavaşlayacağını veya tamamen cevap vermeyeceğini kabul ederek tasarım yapmanız gerekir. Api önbellekleme, sık istenen yanıtları bir süreliğine saklayıp her ziyaretçide kaynağa yeniden gitmemek demektir. Doğru kurulduğunda hem sayfalar hızlanır hem de kaynak servis çöktüğünde ekranda boşluk yerine son geçerli veri görünür. Bu yazıda önbelleğin nasıl çalıştığını, süreyi nasıl seçeceğinizi ve yedek veri kurgusunu anlatıyorum.

API önbellekleme nasıl çalışır?

Önbelleksiz bir senaryoda her ziyaretçi sayfayı açtığında sunucunuz dış servise istek atar, cevabı bekler ve ancak sonra sayfayı gösterir. Yüz kişi aynı dakikada girerse dış servise yüz istek gider. Bu hem yavaştır hem de birçok servisin koyduğu istek sınırlarına takılma riskini artırır; bu sınırları API rate limit yazısında ayrıntılı anlattım.

Önbellekli senaryoda ilk istek dış servise gider, gelen cevap belirli bir süre için saklanır. O süre dolana kadar gelen tüm ziyaretçilere saklanan cevap sunulur. Süre dolunca bir sonraki istekte veri tazelenir. Sonuç olarak dış servise dakikada yüz değil, belki bir istek gider.

Önbellek nerede tutulur?

  • Sunucu belleği veya Redis gibi bir anahtar-değer deposu: Çok hızlıdır, sık değişen veriler için uygundur.
  • Veritabanı veya dosya: WordPress gibi sistemlerde geçici veri (transient) mekanizmasıyla kolayca kurulur; sunucu yeniden başlasa da veri kaybolmaz.
  • CDN veya ters vekil sunucu: Herkese aynı olan yanıtlar kullanıcıya en yakın noktada saklanabilir.
  • İstemci tarafı: Mobil uygulama veya tarayıcı da son cevabı saklayarak bağlantı yokken bile bir şey gösterebilir.

Önbellek süresi nasıl seçilir?

Süre (TTL), verinin ne kadar sıklıkla değiştiğine ve eski veri göstermenin ne kadar sorun yaratacağına göre belirlenir. Tek bir doğru rakam yoktur; aşağıdaki tablo düşünme biçimini göstermek için hazırlanmış genel bir rehberdir.

Veri türü Değişim sıklığı Önbellek yaklaşımı
Canlı piyasa fiyatı (altın, döviz) Çok sık Kısa süre; kaynak erişilemezse son geçerli fiyat
Ürün listesi, kategori Günde birkaç kez Orta süre; ürün güncellenince önbelleği temizle
Şehir, ilçe, sabit listeler Nadiren Uzun süre
Kullanıcıya özel veri (sepet, hesap) Kişiye göre Ortak önbelleğe alınmaz

Son satır kritik: kişiye özel veriyi herkesin göreceği bir önbelleğe koymak, bir müşterinin bilgisinin başkasına görünmesine yol açabilir. Önbellek anahtarı kullanıcıyı da içermeli ya da bu veriler hiç önbelleğe alınmamalıdır.

Yedek veri: kaynak çöktüğünde ne olur?

Önbelleğin asıl değeri kriz anında ortaya çıkar. Klasik kurguda süre dolduğunda önbellek silinir ve kaynağa gidilir. Kaynak o an cevap vermiyorsa elinizde hiçbir şey kalmaz; ziyaretçi boş bir tablo ya da hata mesajı görür.

Daha dayanıklı kurguda süre dolan veri silinmez, “bayat” olarak işaretlenir. Tazeleme denemesi başarılı olursa yeni veri yazılır. Başarısız olursa son geçerli veri gösterilmeye devam eder ve isteğe bağlı olarak “son güncelleme: saat 14:05” gibi bir bilgi notu eklenir. Böylece ziyaretçi en azından yakın zamanlı, doğru olduğu bilinen bir veri görür.

Bu yaklaşımı altın fiyatları eklentisi ve mobil uygulamasında doğrudan kullanıyorum: eklenti fiyatları önbellekli bir REST API üzerinden sunuyor, kaynak erişilemezse son geçerli fiyatı göstermeye devam ediyor. Aynı veriyi kullanan Flutter uygulaması da böylece kaynak tarafındaki kısa kesintilerden etkilenmiyor. Kuyumcu müşterim Nazım Kuyumculuk sitesindeki canlı fiyat tablosu bu altyapıyla çalışıyor.

Arka planda tazeleme

Bir adım ötesi, tazelemeyi ziyaretçinin isteğinden ayırmaktır. Zamanlanmış bir görev belirli aralıklarla kaynağa gider ve önbelleği günceller; ziyaretçiler her zaman hazır veriyi okur. Bu sayede hiçbir ziyaretçi “tazeleme yapan talihsiz kişi” olup yavaş sayfa görmez.

Sık yapılan api önbellekleme hataları

  1. Önbelleği hiç temizlememek: Panelden fiyat değiştirdiğiniz hâlde sitede eski fiyat görünüyorsa, güncelleme anında ilgili önbelleğin temizlenmesi kurgulanmamıştır.
  2. Hataları önbelleğe almak: Kaynak bir kez hata döndü diye o hata yanıtının dakikalarca saklanması, kısa bir aksaklığı uzun bir kesintiye çevirir.
  3. Aynı anda yüzlerce tazeleme: Süre dolduğu anda gelen tüm istekler birlikte kaynağa giderse kaynak yeniden çöker. Tazelemeyi kilitleyerek yalnızca bir isteğin yapmasını sağlamak gerekir.
  4. Kullanıcıya özel veriyi ortak önbelleğe koymak: Yukarıda anlattığım gibi hem güvenlik hem KVKK açısından risklidir.
  5. Ölçmeden süre seçmek: Önbelleğin ne sıklıkla isabet ettiğini izlemeden süre ayarlamak tahmine dayalı kalır.

Döviz ve altın verisi kullanacaksanız kaynak seçimiyle ilgili döviz ve altın kuru API yazısı da işinize yarayabilir.

Bu işi nasıl birlikte yaparız?

Sitenizde veya uygulamanızda dış servisten gelen veri yavaş yükleniyorsa ya da zaman zaman boş görünüyorsa şu adımlarla ilerliyoruz:

  1. Veri akışını çıkarma: Hangi verinin nereden geldiğini, ne sıklıkla değiştiğini ve kesintide ne olduğunu birlikte inceliyoruz.
  2. Kurgu ve teklif: Her veri türü için önbellek yeri, süresi ve yedek veri davranışını belirleyip kapsamı yazılı hâle getiriyorum.
  3. Geliştirme ve kesinti testi: Kaynağı bilerek kapatıp sistemin son geçerli veriyle çalışmaya devam ettiğini test ediyorum.
  4. Teslim ve izleme: Canlıya aldıktan sonra kaynak hatalarını ve önbellek davranışını bir süre birlikte izliyoruz.

Durumunuzu anlatmak için iletişim formunu kullanabilirsiniz.

Sık sorulan sorular

Önbellek, verinin eski görünmesine yol açmaz mı?

Süre doğru seçildiğinde ve veri güncellendiğinde önbellek temizlendiğinde fark edilir bir gecikme olmaz. Canlı fiyat gibi hassas verilerde kısa süre ve son güncelleme saati bilgisi birlikte kullanılır.

WordPress sitelerde api önbellekleme nasıl yapılır?

WordPress’in geçici veri (transient) mekanizması veya nesne önbelleği kullanılabilir. Daha ileri senaryolarda zamanlanmış görevle arka planda tazeleme eklenir.

Sayfa önbelleği eklentisi bu işi yapmıyor mu?

Sayfa önbelleği tüm HTML çıktısını saklar; API önbelleği ise veriyi saklar. İkisi birbirini tamamlar ama yedek veri gibi davranışları sayfa önbelleği tek başına sağlamaz.

Kaynak servis günlerce kapalı kalırsa ne olur?

Son geçerli veri gösterilmeye devam eder. Ancak çok eski verinin yanıltıcı olmaması için belirli bir süreden sonra uyarı göstermek veya alanı gizlemek gibi bir üst sınır tanımlanmalıdır.

Sonuç

İyi kurulmuş bir api önbellekleme katmanı, sitenizi hem hızlandırır hem de dış servislerin aksaklıklarına karşı korur; yedek veri kurgusu ise ziyaretçinin hiçbir zaman boş ekranla karşılaşmamasını sağlar. Kendi projenizde bunu nasıl uygulayabileceğimizi konuşmak isterseniz bana yazabilirsiniz.