«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Реализация генератора идентификаторов Snowflake Id

Реализация генератора идентификаторов Snowflake Id

Опубликовано 7 ноября 2024 г.
Просматривать:662

Implementing Snowflake Id generator

Что такое идентификатор снежинки?

Идентификаторы Snowflake используются в распределенных средах для создания коротких уникальных идентификаторов без конфликтов. В отличие от традиционных методов, таких как использование базы данных для генерации идентификаторов или использование длинного 128-битного UUID, идентификаторы Snowflake используют время и простые побитовые операции. Этот умный метод позволяет каждому микросервису генерировать уникальные идентификаторы независимо, без необходимости использования центральной системы во избежание коллизий.

Как создать один

Создание идентификатора снежинки похоже на сбор головоломки из трех ключевых частей. Давайте разберемся:

  1. Возьмите n-битовую битовую строку:

    Сначала мы начинаем с битовой строки длины n. Здесь будет храниться вся необходимая информация для создания уникального идентификатора.

  2. Разделите его на три части: i, j и k:

    Битовая строка разделена на три части, так что i j k = n.

  • i - Компонент времени:

    Первая часть, i, представляет текущее время. Выберите фиксированное время начала (также известное как эпоха), и биты i будут рассчитываться путем взятия текущего времени в наносекундах и вычитания времени начала. Это гарантирует, что новые идентификаторы всегда будут больше старых.

  • j – идентификатор машины:

    Вторая часть j — это идентификатор машины. При запуске микросервиса ему присваивается уникальный идентификатор (идентификатор компьютера), который становится частью j. Это гарантирует, что идентификаторы, сгенерированные разными машинами, не будут конфликтовать, даже если они созданы в один и тот же момент.

  • k — порядковый номер:

    Последняя часть k — это порядковый номер. Он действует как счетчик, который увеличивается всякий раз, когда в течение одной и той же единицы времени генерируется несколько идентификаторов. Благодаря этому идентификаторы остаются уникальными, даже если они генерируются в быстрой последовательности.

  1. Объедините части: Получив значения i, j и k, объедините их, чтобы сформировать одну битовую строку. Затем преобразуйте эту битовую строку в десятичную, чтобы получить окончательный идентификатор снежинки.

Быстрая аналогия

Думайте о идентификаторе снежинки как о специальной бирке для блюда на оживленной кухне:

  • Время (i): Это похоже на тиканье часов на кухне: блюда, приготовленные позже, получают большее количество, чем те, которые были приготовлены раньше.
  • Идентификатор машины (j): у каждого шеф-повара (или микросервиса) есть собственная подпись, благодаря чему теги блюд не конфликтуют с чьими-либо еще.
  • Порядковый номер (k): если шеф-повар готовит несколько блюд за один раз, он добавляет небольшое приращение к их тегам, поэтому каждое блюдо имеет уникальную этикетку.

Снежинка реализована на Go

Посмотрите в этом репозитории GitHub реализацию генерации идентификатора Snowflake ID на Go

Источники

  1. https://blog.x.com/engineering/en_us/a/2010/announcing-snowflake
  2. https://en.wikipedia.org/wiki/Snowflake_ID
Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/alquama/implementing-snowflake-id-generator-3f8k?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3