🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
  • Home
  • Blog
  • Bagaimana Milvus Menyeimbangkan Beban Kueri di Seluruh Node?

Bagaimana Milvus Menyeimbangkan Beban Kueri di Seluruh Node?

  • Engineering
February 28, 2022
Xi Ge

Binlog Cover Image Gambar Sampul Binlog

Oleh Xi Ge.

Dalam artikel blog sebelumnya, kami telah memperkenalkan fungsi Penghapusan, Bitset, dan Pemadatan di Milvus 2.0 secara berturut-turut. Sebagai penutup dari seri ini, kami ingin berbagi desain di balik Load Balance, sebuah fungsi penting dalam cluster terdistribusi Milvus.

Implementasi

Ketika jumlah dan ukuran segmen yang disangga di node kueri berbeda, kinerja pencarian di seluruh node kueri juga dapat bervariasi. Kasus terburuk dapat terjadi ketika beberapa node kueri kelelahan mencari data dalam jumlah besar, tetapi node kueri yang baru dibuat tetap menganggur karena tidak ada segmen yang didistribusikan kepada mereka, menyebabkan pemborosan sumber daya CPU yang sangat besar dan penurunan besar dalam kinerja pencarian.

Untuk menghindari keadaan seperti itu, koordinator kueri (query coord) diprogram untuk mendistribusikan segmen secara merata ke setiap node kueri sesuai dengan penggunaan RAM node. Oleh karena itu, sumber daya CPU dikonsumsi secara merata di seluruh node, sehingga secara signifikan meningkatkan kinerja pencarian.

Memicu keseimbangan beban otomatis

Menurut nilai default dari konfigurasi queryCoord.balanceIntervalSeconds, koordinat kueri memeriksa penggunaan RAM (dalam persentase) dari semua node kueri setiap 60 detik. Jika salah satu dari kondisi berikut ini terpenuhi, koordinat kueri mulai menyeimbangkan beban kueri di seluruh node kueri:

  1. Penggunaan RAM dari node kueri mana pun dalam klaster lebih besar dari queryCoord.overloadedMemoryThresholdPercentage (default: 90);
  2. Atau nilai absolut dari perbedaan penggunaan RAM dari dua node kueri lebih besar dari queryCoord.memoryUsageMaxDifferencePercentage (default: 30).

Setelah segmen ditransfer dari node kueri sumber ke node kueri tujuan, segmen tersebut juga harus memenuhi kedua kondisi berikut:

  1. Penggunaan RAM node kueri tujuan tidak lebih besar dari queryCoord.overloadedMemoryThresholdPercentage (default: 90);
  2. Nilai absolut dari perbedaan penggunaan RAM node kueri sumber dan tujuan setelah penyeimbangan beban lebih kecil daripada sebelum penyeimbangan beban.

Dengan kondisi di atas terpenuhi, koordinat kueri melanjutkan untuk menyeimbangkan beban kueri di seluruh node.

Keseimbangan beban

Ketika keseimbangan beban dipicu, koordinat kueri pertama-tama memuat segmen target ke node kueri tujuan. Kedua node kueri mengembalikan hasil pencarian dari segmen target pada setiap permintaan pencarian pada saat ini untuk menjamin kelengkapan hasil.

Setelah node kueri tujuan berhasil memuat segmen target, koordinat kueri menerbitkan sealedSegmentChangeInfo ke Saluran Kueri. Seperti yang ditunjukkan di bawah ini, onlineNodeID dan onlineSegmentIDs menunjukkan simpul kueri yang memuat segmen dan segmen yang dimuat masing-masing, dan offlineNodeID dan offlineSegmentIDs menunjukkan simpul kueri yang perlu melepaskan segmen dan segmen yang akan dilepaskan masing-masing.

sealedSegmentChangeInfo sealedSegmentChangeInfo

Setelah menerima sealedSegmentChangeInfo, node kueri sumber kemudian melepaskan segmen target.

Load Balance Workflow Alur Kerja Keseimbangan Beban

Seluruh proses berhasil ketika node kueri sumber melepaskan segmen target. Dengan menyelesaikannya, beban kueri diatur seimbang di seluruh node kueri, yang berarti penggunaan RAM semua node kueri tidak lebih besar dari queryCoord.overloadedMemoryThresholdPercentage, dan nilai absolut dari perbedaan penggunaan RAM node kueri sumber dan tujuan setelah penyeimbangan beban lebih kecil daripada sebelum penyeimbangan beban.

Apa selanjutnya?

Dalam blog seri fitur baru 2.0, kami bertujuan untuk menjelaskan desain fitur-fitur baru. Baca lebih lanjut dalam seri blog ini!

Ini adalah bagian akhir dari seri blog fitur baru Milvus 2.0. Setelah seri ini, kami merencanakan seri baru Milvus Deep Dive, yang memperkenalkan arsitektur dasar Milvus 2.0. Mohon untuk terus mengikuti perkembangannya.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Terus Baca