Semua yang perlu Anda ketahui tentang caching



Selamat siang.

Saya sajikan kepada Anda terjemahan artikel "Semua yang perlu Anda ketahui tentang Caching - Desain Sistem" oleh Animesh Gaitonde.

pengantar


Pernahkah Anda memperhatikan bahwa ketika menelusuri halaman web dengan koneksi Internet yang buruk, teks dimuat di depan gambar berkualitas tinggi? Namun, ketika Anda mengunjungi halaman yang sama lagi, itu memuat lebih cepat. Ketika Anda mengunjungi situs baru, dibutuhkan waktu lebih lama untuk mengunduhnya daripada mengunduh situs yang sering dikunjungi seperti Facebook atau Amazon. Apakah Anda tahu mengapa ini terjadi? Ini semua tentang caching.



Inilah tampilan halaman Instagram saya dengan koneksi yang lambat. Seperti yang Anda lihat, teks ditampilkan sementara gambar belum dimuat.

Sangat penting untuk memberikan pengalaman terbaik menggunakan aplikasi untuk mempertahankan dan melibatkan pengguna. Dalam dunia modern di mana semangat kompetisi berkuasa, bisnis sangat menderita karena pengalaman pengguna yang buruk. Bayangkan Anda sedang menonton serial favorit Anda atau streaming video di situs web, tetapi video itu terus-menerus dihentikan untuk memuat tambahan (buffering). Berapa lama Anda akan bertahan seperti "sikap" dan Anda akan kembali ke situs seperti itu?

Caching bekerja berdasarkan prinsip "lokalisasi tautan." Cache adalah gudang data lokal untuk mempercepat pencarian informasi dan pemulihan data. Tujuan utama cache adalah untuk mengurangi keterlambatan dalam membaca data dan meningkatkan throughput aplikasi. Mari kita lihat beberapa contoh kehidupan nyata.

Penggunaan cache


Misalkan Anda memasak makan malam setiap hari. Untuk memasak, Anda membutuhkan berbagai bahan, sayuran, rempah-rempah, dll. Namun, apakah Anda pergi ke toko setiap hari untuk ini? Ini bisa sangat memberatkan dan memakan waktu. Tentu saja, hal pertama yang Anda lihat adalah lemari di dapur atau lemari es. Ini membantu menghindari perjalanan yang tidak perlu ke supermarket.



Kulkas Anda adalah semacam tembolok untuk sayuran. Keuntungan yang jelas dari cache ini adalah penghematan waktu persiapan makan malam yang signifikan.

Bagaimana cara kerja cache?


Aplikasi server biasanya menyimpan data dalam database. Ketika klien meminta data, aplikasi mengirimkan permintaan ke database, menerima data dari sana dan mengirimkannya ke klien. Server database offline dan dapat ditempatkan di komputer yang berbeda dari komputer di mana server aplikasi berada.



Membaca data dari database adalah proses yang sangat lambat, karena Anda perlu mengirim permintaan dan melakukan I / O untuk mendapatkan data dari sistem file. Jika data disimpan dalam cache, operasi baca akan sangat cepat. Ketika klien berulang kali meminta data yang sama, masuk akal untuk mengembalikan data dari cache alih-alih database.

Misalnya: jika tweet adalah viral, semua klien akan meminta data untuk tweet yang sama. Karena Twitter memiliki jutaan pengguna, menggunakan cache menghindari jutaan permintaan basis data.

Dengan demikian, cache mengurangi beban pada database. Jika data yang diminta ada dalam cache, permintaan basis data akan dialihkan (dicegat). Anda dapat menggambar beberapa analogi dengan tabel hash yang menyimpan pasangan nilai kunci.

Diagram berikut menunjukkan proses membaca data dari cache:



Konsep cache utama


Time to Live (TTL)


Ini adalah batasan jumlah data yang dapat disimpan dalam cache. Anda harus menghapus entri dalam cache yang tidak lagi dibutuhkan server aplikasi.

Dalam kasus Netflix, server akan melakukan cache acara yang paling banyak dilihat atau populer. Tidak perlu melakukan cache menunjukkan bahwa tidak ada yang menonton.

Sebagai contoh: caching seri Paper House lebih rasional daripada film Indiana Jones.

Hapus kebijakan


Pada titik tertentu, cache penuh. Maka dari itu muncul kebutuhan untuk menghapus data lama (tidak relevan) dan menggantinya dengan informasi baru (relevan).

Ada beberapa kebijakan untuk menghapus cache, seperti "lama (paling baru digunakan)" (Paling Baru Digunakan, LRU), "jarang diminta (paling jarang digunakan)" (Paling Sedikit Digunakan, LFU), "terakhir (paling terakhir digunakan)" ( Paling Baru Digunakan, MRU). Kebijakan ini menghapus data dari cache sesuai dengan prinsip tertentu.

Tua


Data yang sudah lama tidak diminta dihapus dari cache. Segera setelah cache penuh, data lama dihapus, data baru ditambahkan.

Misalkan Facebook menyembunyikan foto selebritas. Analisis permintaan pelanggan menunjukkan relevansi foto baru. Ketika cache penuh, foto tertua akan dihapus darinya.

Jarang diminta


LFU melacak frekuensi atau jumlah permintaan data. Ketika ukuran cache mendekati nilai ambang batas, data yang paling jarang diminta akan dihapus.

Ketika kita memasukkan teks, ponsel mulai menawarkan berbagai opsi untuk mengakhiri kata, salah satunya dapat dipilih sebagai ganti set lengkap (pelengkapan otomatis). Perangkat lunak ponsel cerdas menyimpan kata-kata yang paling sering diketik.



Kata-kata yang diketik jarang kemudian dihapus dari cache ini. Dalam contoh di atas, jika Anda menggunakan kata-kata "fitur", "fitur", "bulu", dll., Setelah beberapa waktu ponsel akan berhenti menawarkan Anda "feat", karena itu akan dihapus dari cache.

Terakhir


Dalam kebijakan ini, data terbaru dapat dihapus, preferensi diberikan pada data lama yang disimpan dalam cache. Strategi ini digunakan jika templat akuisisi data sedemikian rupa sehingga pengguna tidak tertarik untuk mengambil data terbaru. Pertimbangkan sebuah contoh.



Aplikasi kencan seperti Tinder biasanya menyimpan semua mitra potensial (kemungkinan kecocokan atau preferensi) dari pengguna. Ketika pengguna membalik-balik feed dengan memindahkan profil tertentu dari calon mitra ke kiri atau kanan, aplikasi seharusnya tidak lagi merekomendasikan profil ini kepadanya. Jika ini terjadi, itu akan menyebabkan pengalaman pengguna yang buruk.

Dalam hal ini, ada kebutuhan untuk menghapus data terbaru. Aplikasi harus menghapus profil yang dilihat dari cache.

Jenis cache


Rekaman Cache


Seperti namanya, data ditulis pertama ke cache, lalu ke database. Ini memastikan konsistensi data dalam cache dan basis data. Setiap pembacaan data dari cache sesuai dengan catatan terbaru.



Kerugian dari pendekatan ini adalah peningkatan waktu perekaman. Ini tidak cocok untuk sistem yang sarat muatan dengan operasi penulisan data yang sering. Namun, itu bagus untuk aplikasi yang sering membaca ulang data yang disimpan dalam database. Menulis lambat diimbangi dengan membaca cepat dan konsistensi.

Entri cache


Alternatif untuk pendekatan pertama adalah menulis data ke cache dan menambahkan catatan tentang perubahan data untuk pembaruan berikutnya ke database.



Menggunakan operasi asinkron secara berkala, Anda dapat membaca data yang diperbarui dalam cache dan membuat perubahan pada data yang sesuai dalam database. Pendekatan ini tidak meningkatkan operasi baca / tulis. Satu-satunya kelemahan di sini adalah keterlambatan sinkronisasi antara cache dan database. Ini bisa mengarah pada fakta bahwa aplikasi yang mengandalkan database sebagai sumber kebenaran akan membaca data yang sudah ketinggalan zaman.

Youtube, misalnya, menggunakan pendekatan ini untuk menyimpan informasi tentang jumlah penayangan video tertentu. Memperbarui basis data untuk setiap tampilan video viral akan sangat mahal. Solusi terbaik adalah menulis data ke cache dan kemudian menyinkronkannya dengan database.

Rekam Abaikan Tembolok


Beberapa aplikasi server tidak sering membaca ulang data terbaru. Dalam hal ini, entri bypass cache digunakan.



Dalam pendekatan ini, basis data diperbarui tanpa cache. Ini menghindari memuat data yang tidak diklaim ke dalam cache. Namun, jika aplikasi masih meminta data terbaru yang tidak ada dalam cache, ini akan menyebabkan pemuatan data tersebut dari database dengan semua konsekuensi yang terjadi.

Contoh Penggunaan Cache Terdistribusi


Daftar proyek cache terbuka:

  • Redis
  • Memcached
  • Voltdb
  • Aerospike dbs
  • Apache terbakar

Terima kasih atas perhatian Anda.

All Articles