Генератор UUID

Добавить на сайт Метаинформация

Другие инструменты

Генератор UUID/GUID

Генератор UUID/GUID

Широчайшее применение в компьютерных системах получил универсальный уникальный идентификатор (UUID, universally unique identifier), также известный под названием «глобальный уникальный идентификатор» (GUID, globally unique identifier).

Он представляет собой 128-битный код, который генерируется системой на основе переменных и постоянных величин: текущего времени, MAC-адреса, хэша SHA-1, пространства имён MD5. Конечный результат генерации UUID, отображаемый в виде 32-значного буквенно-цифрового кода, разделённого дефисами, может показаться произвольным, но на самом деле это — результат сложных вычислений. Так, компьютер не «придумывает» код, а формирует его из конкретных технических величин, актуальных в данный момент времени.

Вероятность того, что на двух разных компьютерах в разное время будет сгенерирован одинаковый UUID, стремится к нулю, что позволяет использовать полученные коды для точечной/локальной идентификации данных без привязки к центру координации. Сегодня UUID/GUID повсеместно применяется как в онлайн, так и в офлайн-сетях, и эффективно работает не только в глобальном интернет-пространстве, но и в автономных компьютерных системах.

История UUID

Впервые 128-битные коды UUID начала использовать американская компания Apollo Computer в 1980-х годах. Они были основаны на более простых 64-битных кодах, применяемых в Domain/OS, и нашли широкое применение в вычислительной среде Open Software Foundation.

С появлением первых платформ Windows, глобальный уникальный идентификатор был обобщён и стандартизирован. Компания Microsoft приняла дизайн DCE от Apollo Computer и зарегистрировала пространство имён URN в RFC 4122. В 2005 году последний был предложен в качестве нового стандарта IETF, и UUID стандартизировали в рамках ITU.

Ранее — в 2002 году — при использовании UUID в качестве первичных ключей в локальных базах данных были выявлены проблемы с производительностью системы. Они были устранены в четвёртой версии добавлением неслучайного суффикса, основанного на системном времени компьютера. Так называемый подход COMB (комбинированный идентификатор времени GUID) увеличил риски дублирования кодов, но в то же время — существенно повысил производительность при работе с Microsoft SQL Server.

С развитием IT-технологий, универсальный уникальный идентификатор перестал быть узкоспециальным техническим инструментом, и сегодня им могут пользоваться все желающие. Вероятность повторения сгенерированных кодов не равна нулю, но стремится к нему, и идентифицировать ими можно любую цифровую информацию, после чего — объединять её в единые массивы данных с минимальными рисками повторов.

Преимущества UUID

Генераторы глобальных уникальных кодов не требуют централизованной сверки/синхронизации данных и распространяются в свободном доступе для всех пользователей. К главные преимущества UUID можно отнести:

  • Минимальные риски «столкновения» (повторения) кодов. Несмотря на их массовое применение, вероятность повторов стремится к нулю.
  • Возможность объединять разные массивы данных, используя UUID в качестве первичных (уникальных) ключей.
  • Упрощённое распределение данных по нескольким разнесённым серверам.
  • Возможность генерации кодов в автономном режиме.

Уникальные идентификационные коды, записываемые в формате xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, позволяют разнесённым системам распознавать информацию без координирования из единого data-центра: при практически нулевой вероятности ошибок/повторов. Эта особенность, наряду с простотой применения и небольшими требованиями к производительности компьютеров, делает UUID востребованной и незаменимой в самых разных отраслях IT и автономных вычислительных систем.

Что такое UUID/GUID

Что такое UUID/GUID

Универсальный уникальный идентификатор данных UUID может генерировать коды с использованием разных алгоритмов и переменных/постоянных величин.

Всего существует 5 версий идентификатора, использующих системную дату/время и MAC-адреса, протоколы безопасности DCE, хэш MD5, хэш SHA-1 и пространство имён при генерации.

Во всех случаях итоговый результат отображается в формате xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx (число в шестнадцатеричной системе счисления, разделённое дефисами на пять блоков: 8-4-4-4-12), где на месте иксов могут находиться строчные латинские буквы и цифры от 0 до 9, а M — обозначает версию, N — вариант UUID.

Таким образом, в системе одновременно используется 36 символов (26 букв и 10 цифр), благодаря чему вероятность повторения 32-значных кодов стремится к нулю, несмотря на то, что их ежедневно генерируют миллионы пользователей по всему миру.

Версии UUID

Версия 1

Первая версия уникального идентификатора при генерации кода отталкивается от MAC-адреса компьютера и его системного времени, которое меняет своё числовое значение 1 раз в секунду. Как в этом случае происходит процесс генерации? Он состоит из пяти этапов:

  • Из метки UTC берутся младшие 32 бита информации. Они преобразуются в 8 шестнадцатеричных символов и занимают 4 байта.
  • Из той же метки UTC берутся средние 16 бит информации, преобразуемые в 4 шестнадцатеричных символа, занимающих 2 байта.
  • Берутся старшие 12 битов информации из метки UTC и преобразуются ещё в 4 шестнадцатеричных символа.
  • Ещё 1–3 бита приходятся на тактовую последовательность и снижают риски коллизий, внося долю случайности/неопределённости. Системное время или условно замедляется, или переводится назад — чтобы не «пересеклись» два и более идентификатора, работающих на одном компьютере одновременно.
  • Оставшиеся 6 байтов — это постоянная величина, генерируемая на основе MAC-адреса устройства. Она состоит из 12 шестнадцатеричных символов и весит 48 битов.

Так как алгоритм первой версии UUID неразрывно связан с системным временем, использование тактовой последовательности — обязательно. В противном случае многократно повышаются риски генерации таких же самых кодов — в течение той секунды, когда системное время «застывает» на том или ином значении: 00:12:32, 09:30:00 и так далее.

Версия 2

Вторая версия минимально отличается от первой, и достаточно редко применяется на практике. Вместо тактовой последовательности в ней задействован системный идентификатор, привязанный к данным пользователя или другим уникальным значениям, которые не повторяются на других компьютерах или повторяются крайне редко. Эффект случайности во второй версии минимизирован, и она может использоваться для повышения безопасности распределённой вычислительной среды.

Версии 3 и 5

Имеют между собой много общего: они используют для создания кодов уникальные имена и названия (из пространства MD5), то есть — неслучайные величины. Только версия 3 использует стандартный хэш, а версия 5 — хэш SHA-1. Такие идентификаторы менее зависимы от случайных величин, которые в той же четвёртой версии играют решающую роль.

Версия 4

Генерация этой версии UUID более чем на 90% происходит случайным образом. На постоянные величины в ней приходится 6 битов, а на произвольные — 122. Реализация алгоритма заключается в том, что сначала произвольно генерируются 128 битов информации, и 6 из них заменяются данными о версии и варианте.

Роль генератора псевдослучайных чисел в четвёртой версии — максимальна, и если у него слишком простой алгоритм, существенно возрастают риски повторов/коллизий. Несмотря на это, именно четвёртая версия на сегодняшний день — самая распространённая и часто применяемая на практике.

Варианты UUID

Уникальный идентификатор UUID несколько раз дорабатывался по мере развития компьютерных технологий, и сегодня представлен в нескольких вариантах.

Вариант 0

Предназначен для работы с устаревшими базами данных формата Apollo Network Computing System 1.5 1988 года выпуска. Этот вариант обладает с ними обратной совместимостью и не вступает в конфликты с историческими UUID NCS.

Варианты 1 и 2

Используются для идентификации современных блоков и массивов данных, и в каноническом текстовом виде не отличаются друг от друга, кроме порядка написания битов вариантов. Так, вариант 1 использует порядок байтов big-endian, а вариант 2 — title-endian. Первый является основным, а второй — зарезервированным для работы с ранними GUID от Microsoft Windows.

Вариант 3

На сегодняшний день не используется. Является зарезервированной версией для использования в будущем — когда возможности предыдущих вариантов будут исчерпаны.

Большинство систем кодируют идентификатор в big-endian, но есть исключения. Например, маршалинг в Microsoft COM/OLE libraries использует mixed-endian, одновременно формируя код из блока title-endian и big-endian. На первый приходятся первые три компонента UUID, а на второй — последние два.