caching

Ffe7cce8b26d88cb96c8db8df021b5c7?s=47 Emre Yılmaz
February 23, 2014

 caching

buyuk projelerde ve yuksek trafikli sistemlerde caching

Ffe7cce8b26d88cb96c8db8df021b5c7?s=128

Emre Yılmaz

February 23, 2014
Tweet

Transcript

  1. yüksek trafikli sistemlerde caching emre yılmaz – labsessions, şubat 2014

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

    Science: cache invalidation and naming things." -- Phil Karlton
  3. genel caching deseni

  4. Dog piling

  5. 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ı :(
  6. 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.
  7. Dog piling – kodun yeni hali

  8. 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.
  9. Problem #2: hatalı URL'ler - çözüm

  10. 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:
  11. key tanımlamaları

  12. son durum

  13. Memoization & in process caching Aynı süreç ya da aynı

    obje içerisinde aynı hesaplamayı birden fazla kere yapmaya gerek yok.
  14. •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
  15. Consistent hashing

  16. Basit güvenlik  Memcache, redis gibi aletlerin portları dışarıya kapatılmalı.

  17. 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.
  18. 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ı.
  19. teşekkürler, iletişim: mail@emreyilmaz.me twitter.com/emre_yilmaz