Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

cache invalidation "There are only two hard things in Computer Science: cache invalidation and naming things." -- Phil Karlton

Slide 3

Slide 3 text

genel caching deseni

Slide 4

Slide 4 text

Dog piling

Slide 5

Slide 5 text

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ı :(

Slide 6

Slide 6 text

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.

Slide 7

Slide 7 text

Dog piling – kodun yeni hali

Slide 8

Slide 8 text

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.

Slide 9

Slide 9 text

Problem #2: hatalı URL'ler - çözüm

Slide 10

Slide 10 text

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:

Slide 11

Slide 11 text

key tanımlamaları

Slide 12

Slide 12 text

son durum

Slide 13

Slide 13 text

Memoization & in process caching Aynı süreç ya da aynı obje içerisinde aynı hesaplamayı birden fazla kere yapmaya gerek yok.

Slide 14

Slide 14 text

•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

Slide 15

Slide 15 text

Consistent hashing

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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.

Slide 18

Slide 18 text

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ı.

Slide 19

Slide 19 text

teşekkürler, iletişim: [email protected] twitter.com/emre_yilmaz