مولد معرفات الثلج - إنشاء معرفات موزعة فريدة
مولد ومحلل معرفات الثلج المجاني. قم بإنشاء معرفات فريدة بطول 64 بت للأنظمة الموزعة. قم بتحليل المعرفات الموجودة لاستخراج الطابع الزمني، معرف الآلة، والتسلسل.
مولد معرف الثلج
اختياري: الطابع الزمني بالمللي ثانية (الافتراضي هو الوقت الحالي)
معرف الجهاز (0-31)
معرف مركز البيانات (0-31)
رقم التسلسل (0-4095)
التوثيق
ما مُولِّد معرّفات Snowflake؟
ينشئ مُولِّد معرّفات Snowflake عددًا فريدًا من 64 بت اعتمادًا على طابع زمني ومعرّف آلة ورقم تسلسلي. أنشأت Twitter هذا التنسيق في 2010 لمنح كل تغريدة معرّفًا يمكن لعدد كبير من الخوادم إنتاجه في الوقت نفسه، من دون أن يضطر أي منها إلى سؤال الآخر: «هل استُخدم هذا الرقم من قبل؟». تنشئ هذه الأداة معرّف Snowflake واحدًا من القيم المُدخلة، وتُظهر كيفية ملء هذه القيم للبتات وعددها 64.
كيف يعمل مُولِّد معرّفات Snowflake هذا؟
يتلقى المولِّد أربع مُدخلات:
- الطابع الزمني: طابع زمني لنظام Unix بوحدة المللي ثانية. اتركه فارغًا لاستخدام الوقت الحالي.
- معرّف الآلة: عدد صحيح من 0 إلى 31 (5 بت). هذا هو «معرّف العامل» الأصلي لدى Twitter.
- معرّف مركز البيانات: عدد صحيح من 0 إلى 31 (5 بت).
- الرقم التسلسلي: عدد صحيح من 0 إلى 4095 (12 بت)، ويُستخدم للتمييز بين المعرّفات التي أُنشئت في المللي ثانية نفسها.
تدمج الأداة القيم الأربع في معرّف واحد من 64 بت. ثم تعرض النتيجة بصيغة ثنائية، مقسّمة إلى مقاطع الطابع الزمني ومركز البيانات والآلة والتسلسل.
يُقاس الطابع الزمني انطلاقًا من نقطة بدء ثابتة تُسمى حقبة Twitter: 4 نوفمبر 2010، عند 1:42:54.657 بالتوقيت العالمي المنسق، أو بعد مرور 1,288,834,974,657 مللي ثانية من حقبة Unix. لا تتيح هذه الأداة تغيير نقطة البدء تلك. ويُقاس كل معرّف تنتجه انطلاقًا من ذلك التاريخ الثابت.
بنية معرّف Snowflake
معرّف Snowflake هو عدد صحيح من 64 بت، مقسّم إلى أربعة أجزاء تُقرأ بدءًا من البت الأعلى أهمية نزولًا:
| البتات | الحقل | المدى |
|---|---|---|
| 1 | بت الإشارة | دائمًا 0 |
| 41 | الطابع الزمني | المللي ثوانٍ منذ حقبة Twitter |
| 5 | معرّف مركز البيانات | 0–31 |
| 5 | معرّف الآلة (العامل) | 0–31 |
| 12 | الرقم التسلسلي | 0–4095 |
يكون البت الأول دائمًا 0، ولذلك يكون معرّف Snowflake دائمًا عددًا موجبًا. ويُعد حقلا الطابع الزمني ذي 41 بت والتسلسل ذي 12 بت الجزأين اللذين يجعلان معرّفات Snowflake مفيدة للفرز: فالمعرّفات المنشأة لاحقًا لها مقطع طابع زمني أكبر، ولذلك تأتي بعد المعرّفات الأقدم عند الفرز.
صيغة معرّف Snowflake
ينشئ المولِّد المعرّف باستخدام الصيغة الآتية:
حيث يمثّل d الفرق، ويمثّل t الطابع الزمني المُدخل بالمللي ثانية، ويمثّل I المعرّف النهائي، ويمثّل c معرّف مركز البيانات، ويمثّل m معرّف الآلة، ويمثّل s الرقم التسلسلي.
تمثّل << إزاحة بتات إلى اليسار. وإزاحة عدد إلى اليسار بمقدار 22 بت تعادل ضربه في 2²²، أي في 4,194,304. وتأتي مقادير الإزاحة (22 و17 و12) مباشرةً من عروض الحقول: فعرض حقل التسلسل هو 12 بت، لذا يقع معرّف الآلة أعلى منه بمقدار 12 بت؛ وعرض حقل الآلة هو 5 بت، لذا يقع معرّف مركز البيانات أعلى منه بمقدار 17 بت (12 + 5)، وهكذا.
كيفية حساب معرّف Snowflake: مثال محلول
لنفترض أن شخصًا أدخل:
- الطابع الزمني: 1,288,834,975,657 (بعد 1,000 مللي ثانية بالضبط من حقبة Twitter)
- معرّف مركز البيانات: 1
- معرّف الآلة: 1
- الرقم التسلسلي: 0
الخطوة 1 — إيجاد الفرق. اطرح الحقبة من الطابع الزمني: 1,288,834,975,657 − 1,288,834,974,657 = 1,000.
الخطوة 2 — إزاحة كل حقل إلى موضعه.
- الطابع الزمني: 1,000 << 22 = 4,194,304,000
- معرّف مركز البيانات: 1 << 17 = 131,072
- معرّف الآلة: 1 << 12 = 4,096
- التسلسل: 0
الخطوة 3 — الدمج باستخدام OR على مستوى البتات. بما أن الحقول المُزاحة لا يتداخل أي منها مع الآخر، فإن جمعها يعطي النتيجة نفسها التي يعطيها تطبيق OR عليها:
4,194,304,000 + 131,072 + 4,096 + 0 = 4,194,439,168
ذلك هو معرّف Snowflake لهذه المُدخلات. ويقسّم عرض النتيجة في الأداة السلسلة الثنائية نفسها ذات 64 بت من جديد إلى كتلة طابع زمني ذات 41 بت، وكتلة مركز بيانات ذات 5 بت، وكتلة آلة ذات 5 بت، وكتلة تسلسل ذات 12 بت، بحيث تظل بنية العدد ظاهرة.
أين تُستخدم معرّفات Snowflake؟
طوّرت Twitter هذا التنسيق لمنح التغريدات معرّفات فريدة مرتبة زمنيًا على نحو تقريبي عبر آلاف آلات قواعد البيانات، من دون عدّاد مركزي يتعين على كل خادم التحقق منه. واعتمدت Discord وInstagram لاحقًا تصميمات مشابهة لمعرّفات من 64 بت للرسائل والمنشورات. وتظهر الفكرة نفسها في تقسيم قواعد البيانات، ومعرّفات الطلبات في أنظمة التجارة الإلكترونية، وسجلات الأحداث في التطبيقات الموزعة. وهي تناسب أي بيئة تمنح فيها آلات كثيرة المعرّفات بشكل مستقل، مع الحاجة إلى فرزها زمنيًا على نحو تقريبي.
قيود معرّفات Snowflake
يحتفظ مولّد Snowflake في بيئة الإنتاج عادةً بساعة تشغيلية خاصة به: فهو يزيد الرقم التسلسلي لكل معرّف يُنشأ في المللي ثانية نفسها، وينتظر المللي ثانية التالية عندما يصل التسلسل إلى 4,095. لا تحتفظ هذه الأداة بذاكرة بين العمليات الحسابية. فهي تنشئ معرّفًا واحدًا من القيم المُدخلة، ما يجعلها مفيدة لاستكشاف التنسيق، لكنها تختلف عن خدمة إنتاجية قيد التشغيل.
للتصميم حدود ثابتة، بصرف النظر عن الخدمة التي تطبّقه:
- حقبة ثابتة: لا يقبل هذا المولّد إلا الطوابع الزمنية الواقعة في 4 نوفمبر 2010 أو بعده (حقبة Twitter). ولا يمكن ترميز التواريخ الأسبق.
- الحد الأقصى للطابع الزمني: ينفد حقل الطابع الزمني ذي 41 بت تقريبًا في يوليو 2080. وبعد ذلك لا يعود الفرق من الحقبة ملائمًا في 41 بت.
- حد التسلسل: لا يمكن لآلة واحدة إصدار سوى 4,096 معرّفًا مميزًا (0–4095) في المللي ثانية نفسها قبل تكرار القيم.
- حيّز الآلات: مع تخصيص 5 بت لكل من معرّف الآلة ومعرّف مركز البيانات، يتيح النشر 1,024 هوية آلة مميزة (32 × 32) لتوزيعها من دون تصادمات.
- ترتيب محلي لا عالمي: لا تُفرز المعرّفات ترتيبًا صحيحًا بالنسبة إلى بعضها إلا إذا جاءت من آلات ذات ساعات متزامنة. وقد يؤدي انحراف الساعات بين الآلات إلى كسر الترتيب الزمني الصارم.
تاريخ معرّف Snowflake
أعلنت Twitter تنسيق معرّف Snowflake في 2010 بديلًا لمعرّفات قواعد البيانات البسيطة المتزايدة تلقائيًا، التي لا تتوسع عبر العديد من خوادم قواعد البيانات المستقلة. وجاء الاسم من فكرة أن المعرّفات المُنشأة، مثل رقائق الثلج الحقيقية، لا يتشابه اثنان منها. ثم أُتيح التصميم كمصدر مفتوح ونسخته منصات كبيرة أخرى بصيغ معدّلة، إذ كانت تحتاج إلى الشيء نفسه: معرّفات فريدة قابلة للفرز تُنشئها آلات كثيرة في الوقت نفسه.
الأسئلة الشائعة
ما معرّف Snowflake؟ معرّف Snowflake هو عدد من 64 بت يتكوّن من طابع زمني ومعرّف آلة ورقم تسلسلي، وقد صُمّم بحيث تستطيع آلات كثيرة إنشاء معرّفات فريدة من دون التنسيق فيما بينها.
ما صيغة معرّف Snowflake؟
id = ((timestamp − epoch) << 22) | (dataCenterId << 17) | (machineId << 12) | sequence، حيث إن الحقبة هي تاريخ بدء ثابت، وتمثّل << إزاحة بتات إلى اليسار.
هل يمكنني تغيير الحقبة في هذا المولّد؟ لا. تقيس هذه الأداة الطابع الزمني دائمًا انطلاقًا من حقبة Twitter الثابتة، 4 نوفمبر 2010. ولا يوجد حقل لتعيين تاريخ بدء مختلف.
هل تفكك هذه الأداة معرّف Snowflake موجودًا؟ لا. فهي تنشئ فقط معرّفًا جديدًا من الطابع الزمني ومعرّف الآلة ومعرّف مركز البيانات والرقم التسلسلي المُدخَل، ثم تعرض تفصيل البتات لذلك المعرّف الجديد.
كم عدد معرّفات Snowflake التي يمكن لآلة واحدة إنشاؤها في كل مللي ثانية؟ ما يصل إلى 4,096، لأن عرض حقل التسلسل هو 12 بت (القيم من 0 إلى 4,095).
حتى أي عام يمكن لهذا المولّد إنتاج طوابع زمنية صالحة؟ حتى يوليو تقريبًا 2080. ويمكن لحقل الطابع الزمني ذي 41 بت أن يستوعب مدة أقصاها نحو 69.7 عامًا محسوبة من حقبة 2010 الثابتة، وبعد ذلك تفيض القيمة عن سعة الحقل.
المراجع
- "الإعلان عن Snowflake." مدونة هندسة Twitter، 2010.
- "Snowflake ID." ويكيبيديا، https://en.wikipedia.org/wiki/Snowflake_ID