mongodb: set replika dengan load balancer

9

Apakah ada opsi untuk load balancing dengan set replika mongodb? Saya tidak meminta HAProxy atau yang serupa, tetapi untuk fitur bawaan dari mongodb. Tidak dapat menemukan kiat untuk ini di dokumen.

ledy
sumber

Jawaban:

11

Jika Anda menggunakan sharding, maka "load balancer" adalah proses mongo - sebenarnya lebih mirip router - ia menyimpan salinan dalam memori dari database konfigurasi dan dapat membuat keputusan berdasarkan pada kunci shard.

Jika yang Anda maksud load balancing di set replika identik atau di seluruh anggota set, maka ada permintaan fitur agar mongo juga menangani skenario itu ( https://jira.mongodb.org/browse/SERVER-1594 ), namun diberikan bagaimana driver beroperasi itu tidak benar-benar diperlukan (itu akan membuat driver kurang rumit).

Dalam set replika tunggal, Anda tidak dapat mendistribusikan tulisan, semuanya harus masuk ke utama. Anda dapat mendistribusikan bacaan ke sekunder, melalui Preferensi Baca jika Anda anggap pantas. Pengemudi melacak apa yang primer dan apa yang sekunder dan merutekan pertanyaan dengan tepat.

Adam C
sumber
2

'Load balancing' dicapai melalui sharding. Dengan sharding Anda benar-benar mendistribusikan tulisan / pembaruan ke pecahan individu. Tidak ada algoritma khusus yang melakukan ini karena mongo akan membiarkan Anda mempartisi data berdasarkan kombinasi tombol apa pun yang Anda inginkan. Algoritma partisi terbaik adalah yang memiliki senyawa entri berurutan ditambah yang acak.

Misalnya id pengguna dapat dipartisi sebagai berikut

xx-sha1(user email) 
xx = time sequence

Ketahuilah bahwa untuk mengimplementasikan sharding, Anda harus memiliki tiga server konfigurasi dan simpul data. Node data dapat dikelompokkan ke dalam set replika untuk redundansi dan dapat digunakan (hanya jika Anda bisa) untuk membaca data dari sekunder. Saya katakan hanya jika Anda dapat membaca data karena replikasi dilakukan asinkron sehingga tidak ada jaminan bahwa data baru akan tersedia pada waktu kueri pada sekunder.

Perlu diingat bahwa algoritma partisi sepenuhnya terserah Anda dan harus sesuai dengan kebutuhan aplikasi Anda. Anda juga harus mempertimbangkan apakah Anda hanya ingin menulis data dan hanya sesekali membaca atau Anda perlu membacanya setelah Anda menulisnya.

silviud
sumber