Büyük Ölçekli Ortamlarda Redis Önbellek Performansını Artırmak
(meetup.toast.com)Redis, çevrimiçi hizmetlerde önbellekleme için yaygın olarak kullanılan bir bellek içi (In-Memory) veritabanıdır. Ancak yanlış kullanıldığında beklenmedik sorunlar ortaya çıkabilir, hatta büyük kesintilere bile yol açabilir. Geçenlerde bir kitapçıya gittiğimde tesadüfen bir şirketin SRE ekibinde çalışan bir mühendisle tanıştım; sohbet sırasında o kişi, “Redis aslında gerekli bir kötülüktür. Er ya da geç bununla ilgili en az bir kez bir arıza patlayacağını düşünerek kullanmak gerekir.” diyecek kadar ileri gitti.
Referans - Kakao "Redis, yanlış kullanırsan batarsın":
https://zdnet.co.kr/view/?no=20131119174125
Referans - Coupang hatasının nedeni açık kaynaklı 'Redis DB':
http://www.digitaltoday.co.kr/news/articleView.html?idxno=212904
Redis işte böyle, iyi bilip dikkatle kullanılması gereken bir araçtır.
Giriş biraz uzun oldu. NHN, RedisConf 2020 sunum içeriğine dayanarak büyük ölçekli trafik ortamlarında Redis'i önbellek olarak kullanırken performans sorunlarının ortaya çıkabileceği 3 noktayı işaret ediyor ve bunların çözüm yöntemlerini anlatan bir dokümanı tanıtıyor. (Korece)
-
Cache Stampede: Önbellek alanı sınırlı olduğu için kaydedilen veriye genellikle bir son kullanma süresi (TTL) verilir. Ancak bu veriye sürekli okuma isteği gelirken önbellek süresi dolarsa, bu okuma istekleri bir anda veritabanına yığılır ve ardından Redis'e yinelenen yazma istekleri olarak geri döner. Buna cache stampede denir. Çözüm olarak, olasılık dağılımına dayalı bir algoritmayla TTL değerini önceden yenilemek ya da debounce (birden çok tekrarlanan olay arasında yalnızca sonuncusunu çalıştırma) kavramını uygulamak mümkündür.
-
Hot Keys: Okumaların tek bir anahtarda yoğunlaşması da performansı düşürebilir. Yazıda buna karşı, anahtar adının önüne bir prefix ekleyip birden fazla kopya oluşturduktan sonra, okumaları bu prefix'li kopyalara rastgele dağıtma yöntemi tanıtılıyor.
-
Compression: Büyük verileri Redis'te saklamak da performans düşüşüne neden olabilir. Bu durumda uygun sıkıştırma uygulamak bile hız ve bellek kullanımı açısından büyük kazanç sağlayabilir. Uygun sıkıştırma yöntemi ve oranı duruma ve ortama göre değişebileceğinden, bunu uygularken kullanım ortamını yeniden oluşturan benchmark testleri yapmak şarttır.
1 yorum
Not - Yukarıda bahsedilen olasılık dağılımı tabanlı algoritmanın (Probablistic Early Recomputation) örnek kodunun yer aldığı yazı:
https://engineering.linecorp.com/ko/blog/…