Saya mencoba mencari tahu sesuatu yang tidak bisa saya temukan jawabannya.
Jika saya mengatakan cache REDIS (atau cache di-memori eksternal) yang duduk di pusat data, dan server aplikasi yang duduk di pusat data yang sama, apa yang akan menjadi kecepatan koneksi jaringan (latensi, throughput) untuk membaca data antara dua mesin ini?
Akankah jaringan "kecepatan", misalnya, masih setidaknya urutan besarnya lebih tinggi daripada kecepatan RAM yang mencari data saya keluar dari cache pada REDIS?
Pertanyaan pamungkas saya adalah - apakah semua ini tersimpan dalam memori pada REDIS sebenarnya menyediakan utilitas apa pun? Berbeda dengan jika REDIS melakukan caching semua ini ke SSD? Memori itu mahal. Jika jaringan memang bukan hambatan DALAM pusat data, maka memori memiliki nilai. Kalau tidak, tidak.
Saya kira pertanyaan umum saya adalah meskipun tidak diketahui luas di pusat data dan ketidakmampuan untuk menggeneralisasi serta varians, apakah kita berbicara perintah yang cukup besar antara latensi memori dalam sistem komputer dan bahkan jaringan terbaik internal ke DC bahwa memori mengurangi latensi tidak memberikan peningkatan kinerja yang signifikan? Saya mendapatkan bahwa ada banyak variabel, tetapi seberapa dekat itu? Apakah sudah sangat dekat sehingga variabel-variabel ini penting? Sebagai contoh, ambil posisi hiperbolik di atasnya, tape drive lebih lambat dari jaringan, jadi tape tidak ideal untuk cache.
Jawaban:
Ada beberapa versi "grafik latensi yang harus diketahui semua orang" seperti:
Masalahnya, pada kenyataannya, ada lebih dari sekadar latensi. Ini kombinasi faktor.
Jadi, apa latensi jaringan di dalam pusat data? Latency, well saya akan mengatakan itu "selalu" di bawah 1 ms. Apakah lebih cepat dari RAM? Tidak. Apakah dekat dengan RAM? Saya kira tidak.
Tetapi pertanyaannya tetap, apakah ini relevan. Apakah itu datum yang perlu Anda ketahui? Pertanyaan Anda masuk akal bagi saya. Karena semuanya memiliki biaya, sebaiknya Anda mendapatkan lebih banyak RAM sehingga semua data dapat tetap dalam RAM atau tidak masalah untuk membaca dari disk dari waktu ke waktu.
"Asumsi" Anda adalah bahwa jika latensi jaringan lebih tinggi (lebih lambat) daripada kecepatan SSD, Anda tidak akan memperoleh dengan memiliki semua data dalam RAM karena Anda akan memiliki lambat di jaringan.
Dan akan muncul begitu. Tapi, Anda juga harus memperhitungkan konkurensi akun. Jika Anda menerima 1.000 permintaan untuk data sekaligus, dapatkah disk melakukan 1.000 permintaan bersamaan? Tentu saja tidak, jadi berapa lama untuk melayani 1.000 permintaan itu? Dibandingkan dengan RAM?
Sulit untuk merebusnya menjadi satu faktor tunggal seperti beban berat. Tapi ya, jika Anda memiliki operasi tunggal, latensi jaringan sedemikian rupa sehingga Anda mungkin tidak akan melihat perbedaan SSD vs RAM.
Sama seperti sampai disk 12Gbps muncul di pasaran, tautan jaringan 10Gbps tidak akan kelebihan beban oleh satu aliran karena disk adalah hambatannya.
Tetapi ingat bahwa disk Anda melakukan banyak hal lain, proses Anda bukan satu-satunya proses pada mesin, jaringan Anda dapat membawa hal-hal yang berbeda, dll.
Juga, tidak semua aktivitas disk berarti lalu lintas jaringan. Permintaan basis data yang berasal dari aplikasi ke server basis data hanyalah lalu lintas jaringan yang sangat minim. Respons dari server database mungkin sangat kecil (satu nomor) atau sangat besar (ribuan baris dengan beberapa bidang). Untuk melakukan operasi, server (server basis data atau tidak) mungkin perlu melakukan beberapa pencarian disk, membaca dan menulis namun hanya mengirim sedikit kembali ke jaringan. Ini jelas bukan satu-untuk-satu network-disk-RAM.
Sejauh ini saya menghindari beberapa detail pertanyaan Anda - khususnya, bagian Redis.
OK, jadi itu berarti semuanya ada di memori. Maaf, drive SSD cepat ini tidak akan membantu Anda di sini. Redis dapat mempertahankan data ke disk, sehingga dapat dimuat ke dalam RAM setelah restart. Itu hanya untuk tidak "kehilangan" data atau harus mengisi ulang cache dingin setelah restart. Jadi dalam hal ini, Anda harus menggunakan RAM, apa pun yang terjadi. Anda harus memiliki RAM yang cukup untuk memuat kumpulan data Anda. Tidak cukup RAM dan saya kira OS Anda akan digunakan
swap
- mungkin bukan ide yang baik.sumber
Ada banyak lapisan cache di sistem komputer. Memasukkan satu di lapisan aplikasi dapat bermanfaat, caching API dan permintaan basis data. Dan mungkin data sementara seperti sesi pengguna.
Menyimpan data seperti Redis menyediakan layanan seperti itu melalui jaringan (cepat) atau soket UNIX (bahkan lebih cepat), seperti halnya Anda akan menggunakan database.
Anda perlu mengukur kinerja aplikasi Anda, tetapi mari kita buat contoh. Katakanlah permintaan pengguna umum melakukan 5 permintaan API yang masing-masing mengambil 50 ms. 250 ms adalah latensi yang dapat dideteksi pengguna. Kontras dengan caching hasilnya. Bahkan jika cache berada di zona ketersediaan berbeda di seluruh kota (tidak optimal), hit mungkin paling banyak 10 ms. Yang akan menjadi speedup 5x.
Pada kenyataannya, basis data dan sistem penyimpanan memiliki cache sendiri juga. Namun, biasanya lebih cepat untuk mendapatkan hasil yang telah diambil sebelumnya daripada melalui mesin basis data dan lapisan sistem penyimpanan lagi. Juga, lapisan caching dapat mengambil beban signifikan dari database di belakangnya.
Untuk contoh cache yang demikian dalam produksi, tidak terlihat lagi dari blog infrastruktur Stack Overflow pada arsitektur . Ratusan ribu permintaan HTTP yang menghasilkan milyaran hit Redis cukup signifikan.
DRAM pada waktu akses 100 ns kira-kira 100x lebih cepat daripada penyimpanan permanen solid state. Ini relatif murah untuk kinerja ini. Untuk banyak aplikasi, sedikit lebih banyak RAM membeli kecepatan dan waktu respons yang berharga.
sumber