Upgrade to Pro — share decks privately, control downloads, hide ads and more …

caching

Emre Yılmaz
February 23, 2014

 caching

buyuk projelerde ve yuksek trafikli sistemlerde caching

Emre Yılmaz

February 23, 2014
Tweet

More Decks by Emre Yılmaz

Other Decks in Programming

Transcript

  1. cache invalidation "There are only two hard things in Computer

    Science: cache invalidation and naming things." -- Phil Karlton
  2. Dog piling  Binlerce, onbinlerce request boş bir cache key'ine

    istek yapar.  Cache'e koyulacak data hesaplanana kadar (key'in içi doldurulana kadar) tüm requestler aynı datayı hesaplama işine girer.  Veritabanının canı çıktı :(
  3. Dog piling - çözüm  -olabildiğince- timeout kullanmayın. Böyle bir

    lüksünüz yoksa 1 ay, 3 ay gibi uzun süreler belirleyin.  Delete operasyonu ikinci bir emre kadar yasak.  Invalidasyon – güncel olmayan data- için UPDATE operasyonlarını kullanın.
  4. Problem #2: hatalı URL'ler  Ashton Kutcher, projenizi beğendi, sosyal

    medyadan linkledi. Linklerken sıkıntı yaşandı, miyonlar 404 veren bir sayfanıza geliyor.  Her istek için key kontrolü yapmak yerine 1 istekten sonra hatayı cache'leyip veritabanına gidiş-geliş'i ikinci istekten sonra durdurmak mümkün.
  5. iyileştirme – binlerce key olunca ne olacak?  Fonksiyon, blok

    içi key tanımlamaları codebase büyüdükçe hataya sebebiyet verecek.  Aksi halde ekibe sonradan katılan geliştiricinin hali:
  6. Memoization & in process caching Aynı süreç ya da aynı

    obje içerisinde aynı hesaplamayı birden fazla kere yapmaya gerek yok.
  7. •Consistent-hashing  Birden fazla sunucuya etkili veri dağıtımı (istemci tarafında

    sharding.)  Sunucu ekleme/çıkarma durumlarında minimum invalidasyon.  github.com/emre/redis-router (libketama)  https://github.com/disqus/nydus  github.com/twitter/twemproxy
  8. Upstream & publishing caching  Varnish gibi araçlarla direkt çıktı

    cache'leme  Harmanlanmış HTML'in cache'lenmesi. (django cache middleware) Iyi yanları: - uygulama kodunda değişikliğe gerek yok. Sıkıntıları: - her yerde kullanılabilir değil.
  9. seperation of concerns  Cache ile ilgili kodlarınız genel kullanımın

    aksine model.save() ya da model.update() metodlarında olmamalı. Django için sinyaller güzel bir kullanım yeri. Cache katmanı ile asıl veritabanınıyla ilgili kodlar ayrı yerlerde olmalı.