كيف يوازن ميلفوس بين حمل الاستعلامات عبر العقد؟
صورة غلاف المدونة
بقلم شي جي
في مقالات المدونة السابقة، قدمنا تباعًا وظائف الحذف وBitsetet والضغط في Milvus 2.0. تتويجًا لهذه السلسلة، نود أن نشارك التصميم الكامن وراء موازنة التحميل، وهي وظيفة حيوية في الكتلة الموزعة في ميلفوس.
التنفيذ
في حين يختلف عدد وحجم المقاطع المخزنة في عقد الاستعلام، فإن أداء البحث عبر عقد الاستعلام قد يختلف أيضًا. يمكن أن تحدث أسوأ الحالات عندما يتم استنفاد عدد قليل من عقد الاستعلام في البحث على كمية كبيرة من البيانات، ولكن عقد الاستعلام المنشأة حديثًا تظل خاملة لعدم توزيع أي مقطع عليها، مما يتسبب في إهدار هائل لموارد وحدة المعالجة المركزية وانخفاض كبير في أداء البحث.
لتجنب مثل هذه الظروف، تتم برمجة منسق الاستعلام (منسق الاستعلام) لتوزيع المقاطع بالتساوي على كل عقدة استعلام وفقًا لاستخدام ذاكرة الوصول العشوائي للعقد. لذلك، يتم استهلاك موارد وحدة المعالجة المركزية بالتساوي عبر العقد، وبالتالي تحسين أداء البحث بشكل كبير.
تشغيل موازنة التحميل التلقائي
وفقًا للقيمة الافتراضية للتهيئة queryCoord.balanceIntervalSeconds
، يتحقق منسق الاستعلام من استخدام ذاكرة الوصول العشوائي (بالنسبة المئوية) لجميع عقد الاستعلام كل 60 ثانية. إذا تم استيفاء أي من الشرطين التاليين، يبدأ منسق الاستعلام في موازنة حمل الاستعلام عبر عقدة الاستعلام:
- استخدام ذاكرة الوصول العشوائي لأي عقدة استعلام في المجموعة أكبر من
queryCoord.overloadedMemoryThresholdPercentage
(الافتراضي: 90); - أو أن تكون القيمة المطلقة لفرق استخدام ذاكرة الوصول العشوائي لأي عقدتي استعلام أكبر من
queryCoord.memoryUsageMaxDifferencePercentage
(الافتراضي: 30).
بعد أن يتم نقل المقاطع من عقدة الاستعلام المصدر إلى عقدة الاستعلام الوجهة، يجب أن تستوفي الشرطين التاليين
- استخدام ذاكرة الوصول العشوائي لعقدة الاستعلام الوجهة ليس أكبر من
queryCoord.overloadedMemoryThresholdPercentage
(الافتراضي: 90); - أن تكون القيمة المطلقة لفرق استخدام ذاكرة الوصول العشوائي لعقدة الاستعلام المصدر والوجهة بعد موازنة التحميل أقل من القيمة المطلقة قبل موازنة التحميل.
في حالة استيفاء الشروط المذكورة أعلاه، يستمر تنسيق الاستعلام في موازنة حمل الاستعلام عبر العقد.
موازنة التحميل
عند تشغيل موازنة التحميل، يقوم منسق الاستعلام أولاً بتحميل المقطع (المقاطع) المستهدفة إلى عقدة الاستعلام الوجهة. تقوم كلتا عقدتي الاستعلام بإرجاع نتائج البحث من المقطع (المقاطع) المستهدفة في أي طلب بحث في هذه المرحلة لضمان اكتمال النتيجة.
بعد أن تقوم عقدة الاستعلام الوجهة بتحميل المقطع المستهدف بنجاح، يقوم منسق الاستعلام بنشر sealedSegmentChangeInfo
إلى قناة الاستعلام. كما هو موضح أدناه، onlineNodeID
و onlineSegmentIDs
يشيران إلى عقدة الاستعلام التي تقوم بتحميل المقطع والمقطع الذي تم تحميله على التوالي، و offlineNodeID
و offlineSegmentIDs
يشيران إلى عقدة الاستعلام التي تحتاج إلى تحرير المقطع والمقطع المراد تحريره على التوالي.
مختومةSegmentChangeInfo
بعد تلقي sealedSegmentChangeInfo
، تقوم عقدة الاستعلام المصدر بعد ذلك بتحرير المقطع المستهدف.
سير عمل موازنة التحميل
تنجح العملية بأكملها عندما تقوم عقدة الاستعلام المصدر بتحرير المقطع المستهدف. بإكمال ذلك، يتم تعيين حمل الاستعلام متوازنًا عبر عقد الاستعلام، مما يعني أن استخدام ذاكرة الوصول العشوائي لجميع عقد الاستعلام ليس أكبر من queryCoord.overloadedMemoryThresholdPercentage
، وتكون القيمة المطلقة لفرق استخدام ذاكرة الوصول العشوائي لعقد الاستعلام المصدر والوجهة بعد موازنة التحميل أقل من تلك التي كانت قبل موازنة التحميل.
ما التالي؟
نهدف في مدونة سلسلة الميزات الجديدة 2.0 إلى شرح تصميم الميزات الجديدة. اقرأ المزيد في سلسلة المدونة هذه!
- كيف يحذف Milvus البيانات المتدفقة في مجموعة موزعة
- كيفية ضغط البيانات في ميلفوس؟
- كيف يوازن ميلفوس حمل الاستعلام عبر العقد؟
- كيف تمكّن Bitset تعدد استخدامات البحث عن التشابه المتجهي
هذه هي خاتمة سلسلة المدونات الخاصة بميزة Milvus 2.0 الجديدة. بعد هذه السلسلة، نحن نخطط لسلسلة جديدة من الغوص العميق في ميلفوس (Milvus Deep Dive)، والتي تقدم البنية الأساسية لـ Milvus 2.0. يرجى الترقب.
- التنفيذ
- موازنة التحميل
- ما التالي؟
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word