Генератор UUID

Додати на сайт Метаінформація

Інші інструменти

Генерувати ідентифікатор UUID/GUID

Генерувати ідентифікатор UUID/GUID

Найширше застосування в комп'ютерних системах отримав універсальний унікальний ідентифікатор (UUID), також відомий під назвою «глобальний унікальний ідентифікатор» (GUID).

Він являє собою 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 може генерувати коди за допомогою різних алгоритмів та змінних/постійних величин.

Усього існує 5 версій ідентифікатора, що використовують системну дату/час та MAC-адреси, протоколи безпеки DCE, хеш MD5, хеш SHA-1 та простір імен при генерації.

У всіх випадках підсумковий результат відображається у форматі xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx (число в шістнадцятковій системі числення, що складається з малих латинських літер і цифр, і розділене дефісами на п'ять блоків: 8-4-4-4- 12), 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 нерозривно пов'язаний із системним часом, використання тактової послідовності — обов'язкове. Інакше багато разів підвищуються ризики генерації таких самих кодів — протягом тієї секунди, коли системний час «застигає» на тому чи іншому значенні.

Версія 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, а на другий останні два.