Ada dua alasan untuk menggunakan beberapa node dalam sebuah cluster:
- Sharding untuk membatasi jumlah data yang disimpan di setiap node
- Duplikasi untuk mengurangi beban baca dan memungkinkan node dihapus tanpa kehilangan data.
Keduanya pada dasarnya berbeda, tetapi Anda dapat mengimplementasikan keduanya - gunakan hashing yang konsisten untuk menunjuk ke satu set node dengan pengaturan master/slave standar daripada satu node.
Jika kluster adalah penyimpanan data utama Anda dan bukan cache, Anda akan memerlukan strategi redistribusi berbeda yang mencakup penyalinan data.
Implementasi saya didasarkan pada meminta klien memilih salah satu dari 64 ribu ember untuk hash dan memiliki tabel yang memetakan ember itu ke sebuah simpul. Awalnya, semua petakan ke node #1.
Ketika node #1 menjadi terlalu besar, slave-nya menjadi master node #2 dan tabel diperbarui untuk memetakan setengah dari kunci node #1 ke node #2. Pada titik ini semua membaca dan menulis akan bekerja dengan pemetaan baru dan Anda hanya perlu membersihkan kunci yang sekarang berada di node yang salah. Bergantung pada persyaratan kinerja, Anda dapat memeriksa semua kunci sekaligus atau memeriksa pilihan kunci secara acak seperti yang dilakukan sistem kedaluwarsa.