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

Понимание UUID: руководство бэкэнд-инженера для младших разработчиков

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

Understanding UUIDs: A Backend Engineer’s Guide for Junior Developers

Введение

Как бэкэнд-инженерам, нам часто приходится создавать системы, которые могут масштабировать и обрабатывать многочисленные ресурсы, пользователей и объекты, каждый из которых нуждается в уникальной идентификации. Во многих случаях использование последовательных идентификаторов (например, 1, 2, 3) кажется простым решением, но это может быстро стать проблематичным по мере роста и масштабирования вашего приложения в распределенных системах. Здесь на помощь приходят UUID (универсальные уникальные идентификаторы).

В этой записи блога мы рассмотрим:

  • Что такое UUID
  • Реальные примеры использования UUID
  • Как реализовать UUID в Python
  • Риски игнорирования UUID
  • Распространенные ошибки при использовании UUID
  • Рекомендации по использованию UUID

Что такое UUID?

UUID (универсальный уникальный идентификатор) — это 128-битное число, используемое для уникальной идентификации информации в компьютерных системах. Он спроектирован так, чтобы быть глобально уникальным, а это означает, что UUID, созданные независимо в разных системах, не будут конфликтовать.

UUID выглядит следующим образом:

66e69275-c6bc-800c-90a6-2f41cb991502

Он состоит из 32 шестнадцатеричных цифр, отображаемых пятью группами, разделенными дефисами, в виде 8-4-4-4-12.

Реальные варианты использования UUID

  1. Ключи базы данных в распределенных системах: в системах, где разные базы данных или микросервисы должны генерировать уникальные идентификаторы без взаимодействия друг с другом, UUID обеспечивают уникальность. Например, в распределенной платформе электронной коммерции каждая служба может независимо генерировать идентификаторы заказов или транзакций, а UUID позволит избежать конфликтов.

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

  3. Идентификаторы файлов или ресурсов: когда вам нужно отслеживать файлы, документы или любой ресурс на различных платформах или базах данных, каждому ресурсу можно назначить UUID для облегчения поиска без риска дубликаты.

  4. API и внешние ссылки: раскрытие последовательных или легко угадываемых идентификаторов (например, user/1, user/2) в API может привести к уязвимостям конфиденциальности. Используя UUID (например, user/66e69275-c6bc-800c-90a6-2f41cb991502), вы снижаете вероятность того, что пользователи угадают и получат доступ к ресурсам, которые им не принадлежат.

Реализация UUID в Python

Библиотека uuid Python упрощает создание UUID и управление ими. Вот как:

import uuid

# Generate a UUID
generated_uuid = uuid.uuid4()
print(f"Generated UUID: {generated_uuid}")

Функция uuid4() генерирует случайный UUID на основе случайных или псевдослучайных чисел, что является наиболее распространенным вариантом, используемым в веб-разработке.

Пример. Использование UUID в качестве первичных ключей в базах данных

При использовании таких баз данных, как PostgreSQL, в качестве первичных ключей обычно используются UUID. Вот как это можно настроить на Python с помощью SQLAlchemy:

from sqlalchemy import Column, String
from sqlalchemy.dialects.postgresql import UUID
import uuid
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
    username = Column(String, nullable=False)

# This will generate a UUID primary key for each new user.

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

Риски игнорирования UUID

Игнорирование UUID в пользу последовательных или автоматически увеличивающихся идентификаторов может представлять собой несколько рисков:

  1. Уязвимости безопасности: Последовательные идентификаторы предсказуемы, что позволяет злоумышленникам легко перебирать записи и обнаруживать конфиденциальные данные. Например, если идентификаторы пользователей являются последовательными, злоумышленник может попытаться угадать идентификаторы других пользователей и получить доступ к неавторизованным учетным записям.

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

  3. Проблемы миграции и слияния данных: при объединении баз данных или переносе данных между системами наличие неуникальных последовательных идентификаторов может привести к конфликтам. UUID позволяют избежать этих проблем, гарантируя уникальность.

Распространенные ошибки при использовании UUID

  1. Хранение UUID в виде строк: Распространенной ошибкой является сохранение UUID в виде строк, что приводит к потере места и может замедлить выполнение запросов, особенно в больших базах данных. Большинство современных баз данных, таких как PostgreSQL, имеют собственные типы UUID, которые эффективно хранят UUID.

    Неправильный:

    CREATE TABLE users (
        id VARCHAR(36) PRIMARY KEY
    );
    

    Верно:

    CREATE TABLE users (
        id UUID PRIMARY KEY
    );
    
  2. Не используется правильная версия UUID: существует несколько версий UUID (например, uuid1(), uuid3(), uuid4(), uuid5()), каждая из которых подходит для конкретного использования. случаи. uuid4(), основанный на случайных числах, чаще всего используется для генерации уникальных идентификаторов в веб-приложениях. Помните, какую версию вы используете и соответствует ли она вашим потребностям.

  3. Игнорирование возможности коллизии: хотя UUID спроектированы так, чтобы быть уникальными, вероятность коллизии очень мала. Для большинства приложений риск незначителен, но если вы генерируете миллиарды UUID или работаете в высокочувствительных средах, вам следует реализовать обнаружение коллизий.

Лучшие практики использования UUID

  1. Используйте UUID для внешних ссылок: при представлении идентификаторов в URL-адресах или API отдавайте предпочтение UUID последовательным идентификаторам. Это повышает безопасность и затрудняет пользователям прогнозирование идентификаторов ресурсов.

  2. Сохранение UUID в собственных форматах: используйте собственный тип UUID базы данных для хранения UUID вместо строк. Это уменьшает объем памяти и повышает производительность запросов.

  3. Выберите правильную версию UUID: в большинстве случаев uuid4() (случайный UUID) является лучшим выбором для генерации уникальных идентификаторов в веб-приложениях. Однако, если вам нужны детерминированные UUID, вы можете рассмотреть uuid3() или uuid5() (UUID на основе пространства имен).

  4. Проверка UUID: при принятии UUID из пользовательского ввода всегда проверяйте их, чтобы убедиться, что они правильно отформатированы перед обработкой. В Python вы можете использовать объекты UUID для проверки правильности строки.

def is_valid_uuid(uuid_to_test, version=4):
    try:
        uuid_obj = uuid.UUID(uuid_to_test, version=version)
        return str(uuid_obj) == uuid_to_test
    except ValueError:
        return False

# Example usage
print(is_valid_uuid("66e69275-c6bc-800c-90a6-2f41cb991502"))  # True
print(is_valid_uuid("invalid-uuid-string"))  # False

Заключение

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

Не забудьте использовать соответствующую версию UUID, правильно хранить их в своих базах данных и помнить о потенциальных рисках. Благодаря этим советам вы будете хорошо подготовлены к эффективной работе с UUID в своих проектах!


Не стесняйтесь оставлять комментарии ниже, если у вас есть какие-либо вопросы или дополнительные советы по UUID! Приятного кодирования!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/usooldatascience/understanding-uuids-a-backend-engineers-guide-for-junior-developers-5075?1. В случае нарушения прав обращайтесь по адресу [email protected]. удалить его
Последний учебник Более>

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

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

Copyright© 2022 湘ICP备2022001581号-3