🚀 جرب Zilliz Cloud، الـ Milvus المدارة بالكامل، مجاناً — تجربة أداء أسرع بـ 10 أضعاف! جرب الآن>>

milvus-logo
LFAI
  • Home
  • Blog
  • كيف يوازن ميلفوس بين حمل الاستعلامات عبر العقد؟

كيف يوازن ميلفوس بين حمل الاستعلامات عبر العقد؟

  • Engineering
February 28, 2022
Xi Ge

Binlog Cover Image صورة غلاف المدونة

بقلم شي جي

في مقالات المدونة السابقة، قدمنا تباعًا وظائف الحذف وBitsetet والضغط في Milvus 2.0. تتويجًا لهذه السلسلة، نود أن نشارك التصميم الكامن وراء موازنة التحميل، وهي وظيفة حيوية في الكتلة الموزعة في ميلفوس.

التنفيذ

في حين يختلف عدد وحجم المقاطع المخزنة في عقد الاستعلام، فإن أداء البحث عبر عقد الاستعلام قد يختلف أيضًا. يمكن أن تحدث أسوأ الحالات عندما يتم استنفاد عدد قليل من عقد الاستعلام في البحث على كمية كبيرة من البيانات، ولكن عقد الاستعلام المنشأة حديثًا تظل خاملة لعدم توزيع أي مقطع عليها، مما يتسبب في إهدار هائل لموارد وحدة المعالجة المركزية وانخفاض كبير في أداء البحث.

لتجنب مثل هذه الظروف، تتم برمجة منسق الاستعلام (منسق الاستعلام) لتوزيع المقاطع بالتساوي على كل عقدة استعلام وفقًا لاستخدام ذاكرة الوصول العشوائي للعقد. لذلك، يتم استهلاك موارد وحدة المعالجة المركزية بالتساوي عبر العقد، وبالتالي تحسين أداء البحث بشكل كبير.

تشغيل موازنة التحميل التلقائي

وفقًا للقيمة الافتراضية للتهيئة queryCoord.balanceIntervalSeconds ، يتحقق منسق الاستعلام من استخدام ذاكرة الوصول العشوائي (بالنسبة المئوية) لجميع عقد الاستعلام كل 60 ثانية. إذا تم استيفاء أي من الشرطين التاليين، يبدأ منسق الاستعلام في موازنة حمل الاستعلام عبر عقدة الاستعلام:

  1. استخدام ذاكرة الوصول العشوائي لأي عقدة استعلام في المجموعة أكبر من queryCoord.overloadedMemoryThresholdPercentage (الافتراضي: 90);
  2. أو أن تكون القيمة المطلقة لفرق استخدام ذاكرة الوصول العشوائي لأي عقدتي استعلام أكبر من queryCoord.memoryUsageMaxDifferencePercentage (الافتراضي: 30).

بعد أن يتم نقل المقاطع من عقدة الاستعلام المصدر إلى عقدة الاستعلام الوجهة، يجب أن تستوفي الشرطين التاليين

  1. استخدام ذاكرة الوصول العشوائي لعقدة الاستعلام الوجهة ليس أكبر من queryCoord.overloadedMemoryThresholdPercentage (الافتراضي: 90);
  2. أن تكون القيمة المطلقة لفرق استخدام ذاكرة الوصول العشوائي لعقدة الاستعلام المصدر والوجهة بعد موازنة التحميل أقل من القيمة المطلقة قبل موازنة التحميل.

في حالة استيفاء الشروط المذكورة أعلاه، يستمر تنسيق الاستعلام في موازنة حمل الاستعلام عبر العقد.

موازنة التحميل

عند تشغيل موازنة التحميل، يقوم منسق الاستعلام أولاً بتحميل المقطع (المقاطع) المستهدفة إلى عقدة الاستعلام الوجهة. تقوم كلتا عقدتي الاستعلام بإرجاع نتائج البحث من المقطع (المقاطع) المستهدفة في أي طلب بحث في هذه المرحلة لضمان اكتمال النتيجة.

بعد أن تقوم عقدة الاستعلام الوجهة بتحميل المقطع المستهدف بنجاح، يقوم منسق الاستعلام بنشر sealedSegmentChangeInfo إلى قناة الاستعلام. كما هو موضح أدناه، onlineNodeID و onlineSegmentIDs يشيران إلى عقدة الاستعلام التي تقوم بتحميل المقطع والمقطع الذي تم تحميله على التوالي، و offlineNodeID و offlineSegmentIDs يشيران إلى عقدة الاستعلام التي تحتاج إلى تحرير المقطع والمقطع المراد تحريره على التوالي.

sealedSegmentChangeInfo مختومةSegmentChangeInfo

بعد تلقي sealedSegmentChangeInfo ، تقوم عقدة الاستعلام المصدر بعد ذلك بتحرير المقطع المستهدف.

Load Balance Workflow سير عمل موازنة التحميل

تنجح العملية بأكملها عندما تقوم عقدة الاستعلام المصدر بتحرير المقطع المستهدف. بإكمال ذلك، يتم تعيين حمل الاستعلام متوازنًا عبر عقد الاستعلام، مما يعني أن استخدام ذاكرة الوصول العشوائي لجميع عقد الاستعلام ليس أكبر من queryCoord.overloadedMemoryThresholdPercentage ، وتكون القيمة المطلقة لفرق استخدام ذاكرة الوصول العشوائي لعقد الاستعلام المصدر والوجهة بعد موازنة التحميل أقل من تلك التي كانت قبل موازنة التحميل.

ما التالي؟

نهدف في مدونة سلسلة الميزات الجديدة 2.0 إلى شرح تصميم الميزات الجديدة. اقرأ المزيد في سلسلة المدونة هذه!

هذه هي خاتمة سلسلة المدونات الخاصة بميزة Milvus 2.0 الجديدة. بعد هذه السلسلة، نحن نخطط لسلسلة جديدة من الغوص العميق في ميلفوس (Milvus Deep Dive)، والتي تقدم البنية الأساسية لـ Milvus 2.0. يرجى الترقب.

Try Managed Milvus for Free

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

Get Started

Like the article? Spread the word

استمر في القراءة