الخلاصة

  • يضع UUIDv7 ميلي ثانية Unix في أول 48 بت، ويترك 74 بتاً قابلة للاستعمال للعشوائية أو لبنية اختيارية من كسر زمني وعداد. ذلك يجعل المفتاح قابلاً للفرز، لا يجعل الحدث قابلاً للإثبات بذاته.
  • يسمح RFC 9562 بتغيير الطابع الزمني ولا يضمن قربه من الوقت الفعلي. تراجع الساعة، وترتيب الدفعات، والعدادات وتجاوزها تقع ضمن مسؤولية التطبيق والتنفيذ.
  • يلزم لأي استنتاج قابل للمراجعة ربط UUID بسجل المولد، وانتقال الحالة الدائم، والفاعل والتفويض، ودليل زمني خارجي عند الحاجة، والأثر الذي يؤكده الطرف المستقبل.

ما الذي رتّبته البتات فعلاً؟

يعالج RFC 9562 مشكلة محددة: كيف يصنع نظام موزع معرّفاً من 128 بت من دون انتظار سجل مركزي. في UUIDv7، تحمل البتات الثماني والأربعون الأولى عدداً big-endian لميلي ثانية منذ حقبة Unix. وبعد بتات الإصدار والبديل الإلزامية تأتي rand_a وrand_b. تملأ عادة ببيانات عشوائية، لكن يجوز للتنفيذ أن يضع فيها، بالترتيب، جزءاً دون ميلي ثانية وعداداً مهيأ بعناية ثم عشوائية متبقية كي يضيف رتابة ضمن ميلي ثانية واحدة.

الفائدة هندسية مباشرة. يمكن مقارنة UUIDv7 كبتات خام؛ فتتجاور المفاتيح الجديدة غالباً في فهرس قاعدة البيانات بدلاً من أن تتناثر كإدخالات عشوائية. تصف RFC قابلية الفرز ومحلية الفهرس لهذا الغرض. لكنها لا تقول إن السجل ذي المفتاح الأصغر هو أول عملية أصبحت دائمة، أو أول رسالة وصلت، أو أول فعل استحق الأثر الذي تنسبه إليه الواجهة.

قد يحجز التطبيق المعرّف قبل أن يقبل الطلب. قد يفشل الالتزام بعد الحجز. قد يصدر صندوق الإرسال رسالة لاحقاً. وقد يرى المستقبل الرسالة نفسها مرتين ثم يطبقها مرة واحدة بسبب منطق التماثل. يستطيع UUID أن يصل بين هذه السجلات المبعثرة. لا يستطيع أن يقرر وحده أيها تحقق، أو من أجازه، أو متى ظهر أثره.

حقل الميلي ثانية ليس شهادة ساعة

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

والأهم أن RFC 9562 يسمح للتنفيذ بأن يغيّر الطابع الزمني الفعلي. من أمثلته تصحيح ساعة غير دقيقة، ومعالجة الثواني الكبيسة، والتحويلات المتعلقة بالأداء. ولا يضع المعيار مطلباً أو ضماناً لمدى قرب القيمة المضمنة من الوقت الحقيقي. لذلك، فقراءة المقدمة الزمنية هي قراءة لسياسة مولد محلي، لا شهادة مستقلة عن لحظة حدث في العالم.

ويتضح الأمر أكثر عندما تنتج عملية عدداً كبيراً من المفاتيح في ميلي ثانية واحدة. قد تتركها عشوائية؛ وقد تستخدم عداداً أو دقة إضافية. إذا استعملت عداداً، فعليها اختيار طوله وبذرته وحالة إعادة التشغيل وآلية تجاوز السعة. تطلب RFC من التطبيق معالجة تجاوز العداد لتفادي خلل الفرز، وتوصي بفحص الحالة التي لا يكون فيها UUID الجديد أكبر من سابقه. لا يمنح UUIDv7 كل المولّدات ترتيب إصدار داخلياً مجانياً.

صيغة مشتركة لا تصنع ذاكرة مشتركة

سبب جاذبية UUID هو أنه لا يفرض منسقاً عالمياً. لكن RFC 9562 يقر أيضاً بأن التفرد العالمي الحقيقي لا يمكن ضمانه بلا معرفة مشتركة. قد يكفي تفرد محلي لكثير من التطبيقات، ولا يفرض UUID مخطط سجل أو تسلسل عالمي.

لذلك يستطيع خادمان إصدار مفاتيح متوافقة مع استعمال مصادر زمن وسياسات عداد وحالات استعادة مختلفة. مقارنة نصية بين المفتاحين لا تثبت أن أحد الخادمين رأى الآخر، ولا أن إحدى المعاملات ثبتت قبل الأخرى، ولا أن الرسالة الأولى سببت الأثر اللاحق. UUIDv7 ليس موضعاً في سجل توافق ولا برهان سببية بين مضيفين.

وتوصية RFC بمعاملة UUID كقيمة معتمة عندما لا تكون القراءة الداخلية ضرورية تحمي هذا الحد. قد يفيد فحص جزء الزمن في التشخيص؛ لكنه لا يرخص تحويله إلى قرار تدقيق من دون السجلات التي تختبره.

سجل واحد لا يسع الادعاءات الخمسة

يجب أن يكون UUIDv7 مفتاح وصل في ملف المراجعة، لا الملف نفسه.

  1. سجل التوليد: نسخة المولد، الخدمة أو المضيف، مصدر الزمن، الدقة، سياسة العداد، إعادة التشغيل والأخطاء.
  2. سجل انتقال الحالة: التحقق، الالتزام الدائم أو التراجع، نشر الرسالة، الإعادة، التماثل والمطابقة.
  3. سجل السلطة: الإنسان أو مبدأ الخدمة، التفويض، الموافقة، القاعدة المطبقة وحدود الإذن.
  4. سجل زمن مستقل: إن كان المطلوب إثبات أن بيانات وُجدت قبل وقت مهم، فـ RFC 3161 يصف مساراً مختلفاً: توقع سلطة ختم زمني رمزاً على بصمة بيانات وفق سياسة محددة، ويتحقق الطالب من البصمة والتوقيع والشهادة وnonce أو الحداثة وقبول السياسة. هذا دليل محدود على وجود بيانات قبل وقت ضمن تلك السياسة؛ لا يثبت المؤلف أو التفويض أو نجاح فعل تالٍ.
  5. سجل الأثر: على النظام المستقبل المهم أن يبين هل سوّى، أو طبق إعداداً، أو منح وصولاً، أو رفض، أو عوّض العملية.

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

المصادر