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

milvus-logo
LFAI
الصفحة الرئيسية
  • المفاهيم

مزامنة الوقت

يقدم هذا الموضوع آلية مزامنة الوقت في ميلفوس.

نظرة عامة

يمكن تصنيف الأحداث في ميلفوس بشكل عام إلى نوعين:

  • أحداث لغة تعريف البيانات (DDL): إنشاء/إسقاط مجموعة، إنشاء/إسقاط قسم، إلخ.

  • أحداث لغة معالجة البيانات (DML): إدراج، بحث، إلخ.

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

لنفترض أن هناك مستخدمين اثنين يقومان ببدء سلسلة من أحداث لغة معالجة البيانات (DML) و DDL في ميلفوس بالترتيب الزمني الموضح في الجدول التالي.

الطابع الزمنيالمستخدم 1المستخدم 2
t0أنشأ مجموعة باسم C0./
t2/إجراء بحث على المجموعة C0.
t5تم إدراج البيانات A1 في المجموعة C0./
t7/إجراء بحث في المجموعة C0.
t10تم إدراج البيانات A2 في المجموعة C0./
t12/إجراء بحث في المجموعة C0
t15تم حذف البيانات A1 من المجموعة C0./
t17/إجراء بحث في المجموعة C0

من الناحية المثالية، يجب أن يكون المستخدم 2 قادرًا على رؤية

  • مجموعة فارغة C0 في t2.

  • البيانات A1 في t7.

  • كل من البيانات A1 و A2 على t12.

  • البيانات فقط A2 في t17 (حيث تم حذف البيانات A1 من المجموعة قبل هذه النقطة).

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

  1. تختلف الساعة الزمنية للمستخدمين الاثنين في المثال أعلاه إذا كانا على عقد مختلفة. على سبيل المثال، إذا كان المستخدم 2 متأخرًا بـ 24 ساعة عن المستخدم 1، فإن جميع العمليات التي يقوم بها المستخدم 1 لا تكون مرئية للمستخدم 2 حتى اليوم التالي.

  2. يمكن أن يكون هناك تأخير في الشبكة. إذا أجرى المستخدم 2 بحثًا على المجموعة C0 على t17 ، يجب أن يكون ميلفوس قادرًا على ضمان معالجة جميع العمليات قبل t17 وإتمامها بنجاح. إذا تأخرت عملية الحذف على الموقع t15 بسبب زمن انتقال الشبكة، فمن المحتمل جدًا أن يظل بإمكان المستخدم 2 رؤية البيانات المفترض حذفها A1 عند إجراء بحث على t17.

لذلك، يتبنى ميلفوس نظام مزامنة الوقت (timetick) لحل المشكلة.

أوراكل الطابع الزمني (TSO)

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

يتم توفير خدمة TSO من قبل المنسق الجذر في Milvus. يمكن للعملاء تخصيص طابع زمني واحد أو أكثر في طلب تخصيص طابع زمني واحد.

الطابع الزمني TSO هو نوع من القيمة uint64 التي تتكون من جزء مادي وجزء منطقي. يوضح الشكل أدناه تنسيق الطابع الزمني.

TSO_Timestamp TSO_Timestamp.

كما هو موضح، فإن ال 46 بت في البداية هي الجزء المادي، أي التوقيت العالمي المنسق بالمللي ثانية. آخر 18 بت هو الجزء المنطقي.

نظام مزامنة الوقت (timetick)

يستخدم هذا القسم مثالاً لعملية إدخال بيانات لشرح آلية مزامنة الوقت في ميلفوس.

عندما يتلقى الوكيل طلب إدراج بيانات من SDK، فإنه يقسم رسائل الإدراج إلى تدفقات رسائل مختلفة (MsgStream) وفقًا لقيمة تجزئة المفاتيح الأساسية.

يتم تعيين طابع زمني لكل رسالة إدراج (InsertMsg) قبل إرسالها إلى MsgStream.

MsgStream هو عبارة عن غلاف لقائمة انتظار الرسائل، وهو Pulsar افتراضيًا في Milvus 2.0.

timesync_proxy_insert_msg timesync_proxy_insert_msg

أحد المبادئ العامة هو أنه في MsgStream ، يجب أن تكون الطوابع الزمنية لـInsertMsgs من نفس الوكيل متزايدة. ومع ذلك، لا توجد مثل هذه القاعدة لتلك الخاصة بـ InsertMsgs من وكلاء مختلفين.

الشكل التالي هو مثال على InsertMsgs في MsgStream. يحتوي المقتطف على خمسة InsertMsgs ، ثلاثة منها من Proxy1 والباقي من Proxy2.

msgstream msgstream

إن الطوابع الزمنية للثلاثة InsertMsgs من Proxy1 هي طوابع زمنية متزايدة، وكذلك الأمر بالنسبة للاثنين InsertMsgs من Proxy2. ومع ذلك، لا يوجد ترتيب معين بين Proxy1 و Proxy2 InsertMsgs .

يتمثل أحد السيناريوهات المحتملة في أنه عند قراءة رسالة ذات طابع زمني 110 من Proxy2 ، يجد ميلفوس أن الرسالة ذات الطابع الزمني 80 من Proxy1 لا تزال في MsgStream. لذلك، يقدم ميلفوس نظام مزامنة الوقت، timetick، لضمان أنه عند قراءة رسالة من MsgStream ، يجب استهلاك جميع الرسائل ذات قيم الطابع الزمني الأصغر.

time_synchronization مزامنة_الوقت

كما هو موضح في الشكل أعلاه,

  • يقوم كل وكيل بشكل دوري (كل 200 مللي ثانية بشكل افتراضي) بالإبلاغ عن أكبر قيمة طابع زمني لأحدث InsertMsg في MsgStreamإلى التنسيق الجذر.

  • يحدد التنسيق الجذر الحد الأدنى لقيمة الطابع الزمني الأدنى على هذا Msgstream ، بغض النظر عن الوكيل الذي ينتمي إليه InsertMsgs. ثم يقوم جذر التنسيق بإدراج هذا الحد الأدنى للطابع الزمني في Msgstream. يسمى هذا الطابع الزمني أيضًا بالعلامة الزمنية.

  • عندما تقرأ المكونات المستهلكة الطابع الزمني الذي أدرجه جذر التنسيق، فإنها تفهم أن جميع رسائل الإدراج ذات قيم الطابع الزمني الأصغر قد استهلكت. لذلك، يمكن تنفيذ الطلبات ذات الصلة بأمان دون مقاطعة الترتيب.

الشكل التالي هو مثال على Msgstream مع إدراج طابع زمني.

timetick timetick

MsgStream بمعالجة الرسائل على دفعات وفقًا للعلامة الزمنية للتأكد من أن الرسائل الناتجة تفي بمتطلبات الطابع الزمني. في المثال أعلاه، سوف يستهلك جميع السجلات باستثناء InsertMsgs من Proxy2 على Timestamp: 120 لأنه بعد آخر علامة زمنية.

ما التالي

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟