مزامنة الوقت
يقدم هذا الموضوع آلية مزامنة الوقت في ميلفوس.
نظرة عامة
يمكن تصنيف الأحداث في ميلفوس بشكل عام إلى نوعين:
أحداث لغة تعريف البيانات (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 لأنه بعد آخر علامة زمنية.
ما التالي
- تعرف على مفهوم الطابع الزمني.
- تعرف على سير عمل معالجة البيانات في ميلفوس.