مزامنة الوقت
يقدم هذا الموضوع آلية مزامنة الوقت في ميلفوس.
نظرة عامة
يمكن تصنيف الأحداث في ميلفوس بشكل عام إلى نوعين:
أحداث لغة تعريف البيانات (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 في العقد المختلفة بالترتيب، يحتاج ميلفوس إلى معالجة المشكلتين التاليتين
تختلف الساعة الزمنية للمستخدمين الاثنين في المثال أعلاه إذا كانا على عقد مختلفة. على سبيل المثال، إذا كان المستخدم 2 متأخرًا بـ 24 ساعة عن المستخدم 1، فإن جميع العمليات التي يقوم بها المستخدم 1 لا تكون مرئية للمستخدم 2 حتى اليوم التالي.
يمكن أن يكون هناك تأخير في الشبكة. إذا أجرى المستخدم 2 بحثًا على المجموعة
C0
علىt17
، يجب أن يكون ميلفوس قادرًا على ضمان معالجة جميع العمليات قبلt17
وإتمامها بنجاح. إذا تأخرت عملية الحذف على الموقعt15
بسبب زمن انتقال الشبكة، فمن المحتمل جدًا أن يظل بإمكان المستخدم 2 رؤية البيانات المفترض حذفهاA1
عند إجراء بحث علىt17
.
لذلك، يتبنى ميلفوس نظام مزامنة الوقت (timetick) لحل المشكلة.
أوراكل الطابع الزمني (TSO)
لحل المشكلة الأولى المذكورة في القسم السابق، يوفر ميلفوس، مثل الأنظمة الموزعة الأخرى، خدمة أوراكل الطابع الزمني (TSO). هذا يعني أنه يجب تخصيص جميع الأحداث في Milvus بطابع زمني من TSO بدلاً من الساعة المحلية.
يتم توفير خدمة TSO من قبل المنسق الجذر في Milvus. يمكن للعملاء تخصيص طابع زمني واحد أو أكثر في طلب تخصيص طابع زمني واحد.
الطابع الزمني TSO هو نوع من القيمة uint64
التي تتكون من جزء مادي وجزء منطقي. يوضح الشكل أدناه تنسيق الطابع الزمني.
TSO_Timestamp.
كما هو موضح، فإن ال 46 بت في البداية هي الجزء المادي، أي التوقيت العالمي المنسق بالمللي ثانية. آخر 18 بت هو الجزء المنطقي.
نظام مزامنة الوقت (timetick)
يستخدم هذا القسم مثالاً لعملية إدخال بيانات لشرح آلية مزامنة الوقت في ميلفوس.
عندما يتلقى الوكيل طلب إدراج بيانات من SDK، فإنه يقسم رسائل الإدراج إلى تدفقات رسائل مختلفة (MsgStream
) وفقًا لقيمة تجزئة المفاتيح الأساسية.
يتم تعيين طابع زمني لكل رسالة إدراج (InsertMsg
) قبل إرسالها إلى MsgStream
.
MsgStream
هو عبارة عن غلاف لقائمة انتظار الرسائل، وهو Pulsar افتراضيًا في Milvus 2.0.
timesync_proxy_insert_msg
أحد المبادئ العامة هو أنه في MsgStream
، يجب أن تكون الطوابع الزمنية لـInsertMsgs
من نفس الوكيل متزايدة. ومع ذلك، لا توجد مثل هذه القاعدة لتلك الخاصة بـ InsertMsgs
من وكلاء مختلفين.
الشكل التالي هو مثال على InsertMsgs
في MsgStream
. يحتوي المقتطف على خمسة InsertMsgs
، ثلاثة منها من Proxy1
والباقي من Proxy2
.
msgstream
إن الطوابع الزمنية للثلاثة InsertMsgs
من Proxy1
هي طوابع زمنية متزايدة، وكذلك الأمر بالنسبة للاثنين InsertMsgs
من Proxy2
. ومع ذلك، لا يوجد ترتيب معين بين Proxy1
و Proxy2
InsertMsgs
.
يتمثل أحد السيناريوهات المحتملة في أنه عند قراءة رسالة ذات طابع زمني 110
من Proxy2
، يجد ميلفوس أن الرسالة ذات الطابع الزمني 80
من Proxy1
لا تزال في MsgStream
. لذلك، يقدم ميلفوس نظام مزامنة الوقت، timetick، لضمان أنه عند قراءة رسالة من MsgStream
، يجب استهلاك جميع الرسائل ذات قيم الطابع الزمني الأصغر.
مزامنة_الوقت
كما هو موضح في الشكل أعلاه,
يقوم كل وكيل بشكل دوري (كل 200 مللي ثانية بشكل افتراضي) بالإبلاغ عن أكبر قيمة طابع زمني لأحدث
InsertMsg
فيMsgStream
إلى التنسيق الجذر.يحدد التنسيق الجذر الحد الأدنى لقيمة الطابع الزمني الأدنى على هذا
Msgstream
، بغض النظر عن الوكيل الذي ينتمي إليهInsertMsgs
. ثم يقوم جذر التنسيق بإدراج هذا الحد الأدنى للطابع الزمني فيMsgstream
. يسمى هذا الطابع الزمني أيضًا بالعلامة الزمنية.عندما تقرأ المكونات المستهلكة الطابع الزمني الذي أدرجه جذر التنسيق، فإنها تفهم أن جميع رسائل الإدراج ذات قيم الطابع الزمني الأصغر قد استهلكت. لذلك، يمكن تنفيذ الطلبات ذات الصلة بأمان دون مقاطعة الترتيب.
الشكل التالي هو مثال على Msgstream
مع إدراج طابع زمني.
timetick
MsgStream
بمعالجة الرسائل على دفعات وفقًا للعلامة الزمنية للتأكد من أن الرسائل الناتجة تفي بمتطلبات الطابع الزمني. في المثال أعلاه، سوف يستهلك جميع السجلات باستثناء InsertMsgs
من Proxy2
على Timestamp: 120
لأنه بعد آخر علامة زمنية.
ما التالي
- تعرف على مفهوم الطابع الزمني.
- تعرف على سير عمل معالجة البيانات في ميلفوس.