Идентификаторы Snowflake используются в распределенных средах для создания коротких уникальных идентификаторов без конфликтов. В отличие от традиционных методов, таких как использование базы данных для генерации идентификаторов или использование длинного 128-битного UUID, идентификаторы Snowflake используют время и простые побитовые операции. Этот умный метод позволяет каждому микросервису генерировать уникальные идентификаторы независимо, без необходимости использования центральной системы во избежание коллизий.
Создание идентификатора снежинки похоже на сбор головоломки из трех ключевых частей. Давайте разберемся:
Возьмите n-битовую битовую строку:
Сначала мы начинаем с битовой строки длины n. Здесь будет храниться вся необходимая информация для создания уникального идентификатора.
Разделите его на три части: i, j и k:
Битовая строка разделена на три части, так что i j k = n.
i - Компонент времени:
Первая часть, i, представляет текущее время. Выберите фиксированное время начала (также известное как эпоха), и биты i будут рассчитываться путем взятия текущего времени в наносекундах и вычитания времени начала. Это гарантирует, что новые идентификаторы всегда будут больше старых.
j – идентификатор машины:
Вторая часть j — это идентификатор машины. При запуске микросервиса ему присваивается уникальный идентификатор (идентификатор компьютера), который становится частью j. Это гарантирует, что идентификаторы, сгенерированные разными машинами, не будут конфликтовать, даже если они созданы в один и тот же момент.
k — порядковый номер:
Последняя часть k — это порядковый номер. Он действует как счетчик, который увеличивается всякий раз, когда в течение одной и той же единицы времени генерируется несколько идентификаторов. Благодаря этому идентификаторы остаются уникальными, даже если они генерируются в быстрой последовательности.
Думайте о идентификаторе снежинки как о специальной бирке для блюда на оживленной кухне:
Посмотрите в этом репозитории GitHub реализацию генерации идентификатора Snowflake ID на Go
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3