10 poin oleh kunggom 2020-09-03 | 1 komentar | Bagikan ke WhatsApp

Redis adalah database in-memory yang banyak digunakan untuk caching pada layanan online. Namun, jika digunakan dengan cara yang salah, bisa muncul masalah yang tidak terduga atau bahkan gangguan besar. Baru-baru ini saya pergi ke toko buku dan kebetulan bertemu dengan seorang engineer aktif yang bekerja di tim SRE sebuah perusahaan. Dalam percakapan, beliau sampai berkata, “Redis pada dasarnya adalah kejahatan yang perlu. Kita harus memakainya sambil berpikir bahwa suatu saat gangguan terkait pasti akan meledak setidaknya sekali.”

Referensi - Kakao "Kalau salah pakai Redis, bisa hancur":

https://zdnet.co.kr/view/?no=20131119174125

Referensi - Penyebab error Coupang adalah open source 'Redis DB':

http://www.digitaltoday.co.kr/news/articleView.html?idxno=212904

Karena itulah, Redis adalah sesuatu yang harus dipahami dengan baik dan digunakan secara cermat.

Pengantarnya jadi panjang. Berdasarkan materi presentasi RedisConf 2020 dari NHN, berikut diperkenalkan sebuah dokumen yang menunjukkan 3 titik di mana isu performa dapat muncul saat menggunakan Redis sebagai cache di lingkungan dengan trafik besar, beserta cara mengatasinya. (Bahasa Korea)

  • Cache Stampede: Karena ruang cache terbatas, biasanya data yang disimpan diberi waktu kedaluwarsa (TTL). Namun, jika permintaan baca terus masuk ke data tersebut dan waktu kedaluwarsa cache tiba, permintaan baca itu akan sesaat terkonsentrasi ke DB, lalu kembali menumpuk sebagai permintaan tulis duplikat ke Redis. Ini disebut cache stampede. Solusinya antara lain memperbarui nilai TTL lebih awal dengan algoritma berbasis distribusi probabilitas, atau memperkenalkan konsep debounce (hanya menjalankan event terakhir di antara event yang berulang berkali-kali).

  • Hot Keys: Performa juga bisa menurun ketika pembacaan terkonsentrasi pada satu key. Tulisan di atas memperkenalkan langkah penanganan dengan menambahkan prefix pada nama key untuk membuat beberapa replika, lalu menyebarkan pembacaan secara acak ke replika yang memiliki prefix tersebut.

  • Compression: Penurunan performa juga dapat terjadi saat menyimpan data berukuran besar di Redis. Dalam kasus ini, hanya dengan menerapkan kompresi yang tepat saja sudah bisa memberikan keuntungan besar pada kecepatan dan penggunaan memori. Karena metode dan rasio kompresi yang tepat bisa berbeda tergantung situasi dan lingkungan, benchmark test yang mereproduksi lingkungan penggunaan menjadi hal yang wajib saat menerapkannya.

1 komentar

 
kunggom 2020-09-03

Referensi - artikel yang memuat contoh kode untuk algoritme berbasis distribusi probabilitas (Probabilistic Early Recomputation) yang disebutkan di atas:

https://engineering.linecorp.com/ko/blog/…