Глобально уникальный идентификатор
Глобально уникальный идентификатор (англ. Globally Unique Identifier, GUID) — это статистически уникальный 128-битный (16-байтный) идентификатор, используемый в информатике для однозначной идентификации объектов, ресурсов, сущностей или записей в распределённых системах, где отсутствует централизованный орган, назначающий идентификаторы. Основное свойство GUID — чрезвычайно высокая вероятность уникальности каждого экземпляра, что позволяет генерировать их независимо на разных узлах сети без риска коллизий (совпадений). Формально GUID является реализацией стандарта UUID (Universally Unique Identifier), описанного в RFC 4122, и широко применяется в операционных системах, базах данных, программных интерфейсах (API) и протоколах.
История и происхождение
Концепция глобально уникальных идентификаторов возникла в 1980-х годах в рамках разработки распределённых вычислительных систем в корпорации Xerox. Первоначально идентификаторы использовались в протоколах сетевого взаимодействия для идентификации узлов и объектов. В 1990-х годах компания Microsoft адаптировала эту технологию для своей операционной системы Windows, внедрив GUID в качестве стандартного механизма идентификации COM-объектов (Component Object Model). В 2005 году был опубликован стандарт RFC 4122, который унифицировал формат и алгоритмы генерации UUID, включая GUID. С тех пор GUID стал де-факто стандартом для идентификации в распределённых системах, включая базы данных (например, как первичные ключи в таблицах), веб-сервисы (идентификаторы сессий, запросов) и облачные платформы.
Формат и представление
GUID представляет собой 128-битное число, которое обычно записывается в виде 32 шестнадцатеричных цифр, сгруппированных в пять блоков, разделённых дефисами. Стандартный строковый формат выглядит следующим образом:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
где каждый x — шестнадцатеричная цифра (0–9, a–f). Например: 550e8400-e29b-41d4-a716-446655440000. Общее количество символов в строке — 36 (32 цифры и 4 дефиса). В некоторых реализациях (например, в Microsoft Windows) GUID может также записываться в фигурных скобках: {550e8400-e29b-41d4-a716-446655440000}.
Структура битов
128 бит GUID делятся на несколько полей, определённых в RFC 4122:
- Версия (4 бита) — указывает алгоритм генерации (например, версия 1 — на основе времени и MAC-адреса, версия 4 — случайный).
- Вариант (2–3 бита) — определяет формат и совместимость с различными стандартами.
- Остальные биты — содержат временную метку, случайные или хешированные данные, в зависимости от версии.
Классификация и версии
Стандарт RFC 4122 определяет несколько версий UUID, которые различаются алгоритмами генерации и, соответственно, свойствами уникальности и предсказуемости. Наиболее распространённые версии:
Версия 1 (на основе времени и MAC-адреса)
Генерируется с использованием текущего времени (в 100-наносекундных интервалах с 15 октября 1582 года) и 48-битного MAC-адреса сетевого интерфейса устройства. Это гарантирует уникальность во времени и пространстве, но может раскрывать информацию о времени создания и аппаратном обеспечении. Используется в системах, где требуется высокая степень уникальности, но не требуется конфиденциальность.
Версия 4 (случайный)
Генерируется с помощью криптостойкого генератора псевдослучайных чисел. 122 бита являются случайными, 6 бит зарезервированы для версии и варианта. Вероятность коллизии ничтожно мала (примерно 1 на 2^71 для 1 миллиарда сгенерированных GUID). Это наиболее распространённая версия в современных приложениях, так как она не зависит от времени и не раскрывает информацию о системе.
Версия 3 и 5 (на основе хеширования)
Генерируются путём хеширования пространства имён (например, DNS-имени или URL) и имени объекта с помощью MD5 (версия 3) или SHA-1 (версия 5). Обеспечивают детерминированную уникальность: для одного и того же пространства имён и имени всегда будет получен один и тот же GUID. Используются для идентификации объектов, которые должны быть уникальными в рамках заданного пространства.
Версия 2 (DCE Security)
Редко используемая версия, основанная на времени и идентификаторе пользователя или группы в системе DCE (Distributed Computing Environment). Практически не применяется в современных системах.
Применение
GUID широко используются в различных областях информационных технологий:
Операционные системы
- Microsoft Windows: GUID является основой для идентификации COM-объектов, интерфейсов, типов файлов (CLSID, IID, GUID в реестре). Каждый установленный компонент или приложение может иметь уникальный GUID.
- Linux и Unix: UUID используются для идентификации файловых систем (например, в /etc/fstab), дисковых разделов (GPT-таблицы) и сетевых интерфейсов.
Базы данных
GUID часто применяются в качестве первичных ключей (Primary Key) в реляционных базах данных (например, Microsoft SQL Server, PostgreSQL, Oracle). Их преимущество — уникальность в распределённых системах, где данные могут создаваться на разных узлах (например, в мобильных приложениях или облачных сервисах). Недостаток — больший размер (16 байт против 4 байт для целочисленного ключа) и потенциальное снижение производительности индексов при случайной генерации.
Программные интерфейсы (API)
В RESTful API и веб-сервисах GUID используются для идентификации ресурсов (например, пользователей, заказов, сессий). Они обеспечивают уникальность без необходимости централизованного счётчика, что упрощает масштабирование и кэширование.
Идентификация объектов
GUID применяются для маркировки цифровых объектов, файлов, документов, электронных писем (например, в формате Outlook) и других сущностей, где требуется однозначная идентификация в распределённой среде.
Критика и ограничения
Несмотря на широкое распространение, GUID имеют ряд недостатков:
- Размер: 128 бит (16 байт) занимают больше места, чем традиционные 32-битные или 64-битные целочисленные идентификаторы, что может быть критично в системах с ограниченным объёмом памяти или пропускной способностью.
- Производительность: Случайные GUID (версия 4) могут вызывать фрагментацию индексов в базах данных, так как они не упорядочены по времени. Для решения этой проблемы были разработаны последовательные GUID (например, COMB GUID), которые комбинируют случайную часть с временной меткой.
- Предсказуемость: Версия 1 может быть предсказана, если известна временная метка и MAC-адрес, что может представлять угрозу безопасности в некоторых контекстах.
- Человекочитаемость: GUID сложны для восприятия человеком и не подходят для ручного ввода или отображения пользователю.
Интересные факты
- Вероятность случайной коллизии GUID версии 4 настолько мала, что для её практического возникновения потребовалось бы сгенерировать миллиарды идентификаторов в секунду в течение многих лет.
- В стандарте RFC 4122 описано также представление GUID в виде 128-битного числа, которое может быть преобразовано в строку, двоичный или шестнадцатеричный формат.
- Некоторые системы (например, базы данных) используют GUID как альтернативу автоинкрементным ключам для обеспечения уникальности при репликации данных между серверами.
Источники
- RFC 4122 — A Universally Unique IDentifier (UUID) URN Namespace (2005)
- Microsoft Developer Network (MSDN) — GUID Structure and Usage
- ITU-T Recommendation X.667 — Information technology — Open Systems Interconnection — Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 object identifier components
- Стандарт ISO/IEC 11578:1996 — Information technology — Open Systems Interconnection — Remote Procedure Call (RPC)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →