Mengapa Cloudflare menyimpan aset yang tidak populer di cache memori
(blog.cloudflare.com)Cloudflare memublikasikan di blognya pengalaman mengubah strategi cache sehingga berhasil mengurangi beban penulisan SSD hingga 25%. (Bahasa Inggris) Berlawanan dengan anggapan umum, Cloudflare mencapai tujuan ini dengan sengaja menyimpan aset yang tidak terlalu sering diakses di cache memori.
SSD adalah media penyimpanan yang rentan terhadap penulisan. Sel memori flash yang menyimpan data pada SSD memiliki batas jumlah penulisan ulang, dan menghapus lalu menulis ulang data yang sudah tercatat bukan hanya memerlukan waktu relatif lama, tetapi juga membuat operasi baca ikut melambat. Karena itu, pada SSD, mengurangi operasi tulis merupakan optimasi yang sangat penting.
Cloudflare adalah perusahaan yang banyak menggunakan SSD NVMe berperforma tinggi di servernya, jadi wajar jika mereka memikirkan masalah ini. Cloudflare adalah perusahaan CDN, dan pada dasarnya CDN dapat dianggap sebagai cache jaringan berskala besar. Isi yang disimpan di SSD server Cloudflare pada akhirnya juga merupakan item yang di-cache, dan dari hasil pengamatan, banyak di antaranya yang setelah sekali di-cache tidak pernah diakses lagi (yang disebut “one-hit wonder”). Karena itu, akan lebih baik jika item seperti ini tidak ditulis ke SSD. Hasil eksperimen untuk tidak menulis item yang hanya diakses sekali ke SSD menunjukkan hasil yang menggembirakan: latensi SSD berkurang hampir 5%.
Masalahnya adalah bagaimana menerapkan ide ini pada skala layanan nyata. Tidak melakukan cache saat akses pertama lalu baru melakukan cache mulai akses kedua berarti jumlah akses ke sumber data asli akan naik dua kali lipat. Tentu saja ini akan menimbulkan berbagai biaya tambahan, dan itu justru bertentangan dengan tujuan awal. Karena itu, Cloudflare membuat pencatatan cache menjadi hierarkis dalam dua tahap. Pada awalnya semua item di-cache ke memori sebagai ‘cache jangka pendek’, lalu hanya item yang diakses beberapa kali yang “dipromosikan” dan ditulis ke SSD sebagai ‘cache permanen’. Dengan begitu, item dengan frekuensi akses rendah akan tersingkir dari cache secara alami. Untuk pembacaan, tidak perlu perhatian khusus, karena pembacaan dari SSD sudah ditangani cache dengan baik oleh sistem operasi.
Tentu saja, penerapan gagasan ini ke layanan nyata dilakukan secara hati-hati dan konservatif. Pendekatan ini pada dasarnya mengonsumsi banyak memori, yang bisa bersaing dengan cache bawaan sistem operasi, atau saat proses server diperbarui dengan metode deployment tanpa downtime, memori bisa sementara tidak mencukupi sehingga pada akhirnya kualitas layanan justru memburuk. Karena itu, ide di atas diperkenalkan secara bertahap hanya pada server baru yang memiliki memori cukup.
Hasil penerapannya positif. Setelah diterapkan sambil menyesuaikan kapasitas cache, penulisan SSD berkurang dari 20% hingga maksimal 25%, dan ini berujung pada penurunan latensi. Ke depannya, Cloudflare berencana memperluas teknik ini ke lebih banyak server, memperbaiki algoritma promosi dan juga memperkenalkan “demosi”, serta membangun struktur berlapis yang mempertimbangkan bukan hanya SSD tetapi juga HDD.
Hal pertama yang terlintas di pikiran saya saat melihat ide ini adalah teknik garbage collection di Java. Premis dasar dari sebagian besar teknik garbage collection adalah bahwa [kebanyakan objek hanya digunakan dalam waktu yang sangat singkat], yang dikenal sebagai ‘weak generational hypothesis’. Mungkin prinsip seperti inilah yang diterapkan dalam bentuk yang dimodifikasi pada kasus di atas.
3 komentar
Terima kasih atas artikelnya.
Sepertinya ada cukup banyak tulisan menarik yang diam-diam terbit di blog Cloudflare.
Bagaimana blog teknis perusahaan yang bagus dikelola? https://id.news.hada.io/topic?id=1698
Tampaknya ini karena blogging sudah menjadi bagian dari budaya internal di Cloudflare.
Sangat menarik, terima kasih.
Wah.. sampai terjemahannya juga sekalian haha. Terima kasih sudah berbagi konten yang bagus.