جميع الأدلة

DEVOMNITOOLS / أدلة المطورين

دليل الطابع الزمني ليونكس وهندسة معرفات Snowflake الموزعة

تعرف على طوابع POSIX الزمنية وتفكيك معرفات Snowflake ذات 64 بت ومشكلة عام 2038 ومزامنة الساعات الموزعة بدقة متناهية.

DevOmniTools نُشر: 3 دقائق للقراءة
مخطط بنية بتات الطابع الزمني ليونكس ومعرفات Snowflake الموزعة

النقاط الأساسية

  • تحسب طوابع يونكس الزمنية الثواني المنقضية منذ 1970-01-01T00:00:00Z بالتوقيت العالمي المنسق مع استبعاد الثواني الكبيسة.
  • تتضمن معرفات Snowflake الموزعة 41 بت لفارق الميلي ثانية وتتطلب استخدام BigInt لتفادي فقدان دقة الأعداد 64 بت.
  • تؤدي مشكلة عام 2038 إلى طفح الأعداد الصحيحة ذات 32 بت لتعود إلى عام 1901؛ الأعداد ذات 64 بت إلزامية.

الأسس الزمنية: حقبة POSIX

في البنى التحتية الموزعة الحديثة، يشكل تتبع الوقت الركيزة الأساسية لاتساق قواعد البيانات (Spanner TrueTime) وخوارزميات الإجماع (Raft و Paxos). يُعرَّف طابع يونكس الزمني (POSIX time) رسمياً بأنه عدد الثواني المنقضية منذ بداية الحقبة: 1970-01-01T00:00:00Z بالتوقيت العالمي المنسق، مع تجاهل الثواني الكبيسة.

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

// الحصول الحتمي على طوابع يونكس الزمنية في بيئات التشغيل
const unixSeconds = Math.floor(Date.now() / 1000); // عدد صحيح قياسي من 10 أرقام
const unixMilliseconds = Date.now();              // طابع زمني من 13 رقماً
const highResTimer = performance.now();           // مؤقت فائق الدقة لا يرجع إلى الوراء

بنية المعرفات الموزعة: تفكيك معرفات Snowflake 64 بت

تفشل المفاتيح الأساسية التسلسلية التقليدية في مجموعات قواعد البيانات الموزعة المقسمة لأنها تسبب اختناقات مركزية وتفصح عن حجم المعاملات للمنافسين.

تعتمد الأنظمة الحديثة مثل Twitter و Discord و Bluesky على معرفات Snowflake بسعة 64 بت. هذه المعرفات مرتبة زمنياً، وفريدة عالمياً دون الحاجة لتنسيق مركزي بين الخوادم.

تقسيم البتات

ينقسم معرف Snowflake القياسي ذو 64 بت إلى أربعة أجزاء رئيسية:

  1. بت الإشارة (1 بت): يضبط دائماً على 0 للحفاظ على القيمة الموجبة في لغات مثل Java و Go.
  2. فارق التوقيت (41 بت): الميلي ثواني المنقضية منذ حقبة مخصصة، مما يوفر مدى تشغيلياً يقارب 69.73 عاماً.
  3. معرف الجهاز أو مركز البيانات (10 بت): يتيح دعم ما يصل إلى 2¹⁰ = 1,024 خادم أو حاوية مستقلة دون أي تضارب.
  4. رقم التسلسل (12 بت): يولد حتى 2¹² = 4,096 معرفاً فريداً لكل ميلي ثانية لكل خادم (أكثر من 4 ملايين معرف في الثانية).
// استخراج الطابع الزمني باستخدام BigInt لتفادي أخطاء الفاصلة العائمة
function extractSnowflakeTimestamp(snowflakeId, customEpoch = 1420070400000n) {
  const id = BigInt(snowflakeId);
  const deltaMs = id >> 22n;
  const unixMs = deltaMs + customEpoch;
  return new Date(Number(unixMs));
}

// مثال: معرف Snowflake في Discord
const discordEpoch = 1420070400000n; // 2015-01-01T00:00:00.000Z
const messageId = "1284567890123456789";
console.log(extractSnowflakeTimestamp(messageId, discordEpoch).toISOString());

مشكلة عام 2038 وطفح الأعداد الصحيحة

تنشأ مشكلة عام 2038 في الأنظمة القديمة ذات 32 بت:

  • أقصى قيمة يمكن تمثيلها: 2³¹ - 1 = 2,147,483,647 ثانية.
  • اللحظة الحرجة: 2038-01-19T03:14:07Z UTC.
  • النتيجة: ينقلب البت الثنائي إلى سالب، مما يعيد الوقت تلقائياً إلى عام 1901. تضمن البنى الحديثة ذات 64 بت استقرار الأنظمة لمئات المليارات من السنين.

تحويل دفعات الطوابع الزمنية وملفات CSV

في خطوط معالجة البيانات الضخمة وسجلات الخوادم، يتم تخزين ملايين الأحداث بصيغة أرقام الثواني أو الميلي ثانية في جداول CSV موسعة.

باستخدام محول طابع الوقت Unix من DevOmniTools، يمكن للمطورين تحويل دفعات الأرقام وسجلات CSV محلياً في الذاكرة:

  • التعرف التلقائي على الوحدات: يميز فورياً بين ثواني POSIX المكونة من 10 أرقام، والميلي ثانية المكونة من 13 رقماً، والميكرو ثانية.
  • حماية تامة للبيانات: تتم جميع التحويلات إلى صيغة ISO-8601 محلياً داخل المتصفح دون رفع أي سجلات لخوادم خارجية.
  • دعم معرفات Snowflake: تحويل معرفات Discord و Twitter و Mastodon إلى تواريخ مقروءة بنقرة واحدة.

FAQ

ما هي حقبة يونكس (Unix Epoch) ولماذا تبدأ في 1 يناير 1970؟

حقبة يونكس هي نقطة بداية زمنية معيارية محددة في معيار POSIX (IEEE Std 1003.1). تمثل الساعة 00:00:00 بالتوقيت العالمي المنسق في 1 يناير 1970، وتعد المرجع الأساسي لساعات النظام في الحوسبة الحديثة.

كيف يتم استخراج التوقيت من معرفات Snowflake في Discord و Twitter؟

تستخدم معرفات Snowflake حقلاً ثنائياً بسعة 64 بت. تمثل أول 41 بت الفارق الزمني بالميلي ثانية منذ حقبة مخصصة. بإجراء إزاحة لليمين بمقدار 22 بت وإضافة إزاحة الحقبة نحصل على التوقيت العالمي المنسق بدقة.

كيف تحدث مشكلة عام 2038 (Y2K38)؟

الأنظمة التي تخزن وقت يونكس في عدد صحيح ذي إشارة بسعة 32 بت ستتعرض لطفح رقمي في 19 يناير 2038 عند تجاوز 2,147,483,647 ثانية، مما يعيد الوقت إلى عام 1901. تعالج بنى 64 بت هذه المشكلة تماماً.