"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Comprensión de los UUID: una guía de ingenieros de backend para desarrolladores junior

Comprensión de los UUID: una guía de ingenieros de backend para desarrolladores junior

Publicado el 2024-11-08
Navegar:191

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

Introducción

Como ingenieros de backend, a menudo se nos asigna la tarea de crear sistemas que puedan escalar y manejar numerosos recursos, usuarios y entidades, cada uno de los cuales necesita una identificación única. En muchos casos, usar ID secuenciales (por ejemplo, 1, 2, 3) parece una solución sencilla, pero puede volverse problemático rápidamente a medida que su aplicación crece y escala en sistemas distribuidos. Aquí es donde entran los UUID (identificadores universalmente únicos).

En esta publicación de blog, exploraremos:

  • Qué es un UUID
  • Casos de uso de UUID en el mundo real
  • Cómo implementar UUID en Python
  • Riesgos de ignorar los UUID
  • Errores comunes al usar UUID
  • Mejores prácticas para el uso de UUID

¿Qué es un UUID?

Un UUID (Identificador único universal) es un número de 128 bits que se utiliza para identificar de forma única información en los sistemas informáticos. Está diseñado para ser globalmente único, lo que significa que los UUID generados de forma independiente en diferentes sistemas no entrarán en conflicto.

Un UUID tiene este aspecto:

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

Consta de 32 dígitos hexadecimales, mostrados en cinco grupos separados por guiones, en la forma 8-4-4-4-12.

Casos de uso del mundo real para UUID

  1. Claves de base de datos en sistemas distribuidos: en sistemas donde diferentes bases de datos o microservicios necesitan generar ID únicos sin comunicarse entre sí, los UUID garantizan la unicidad. Por ejemplo, en una plataforma de comercio electrónico distribuida, cada servicio puede generar de forma independiente ID de pedidos o transacciones, y los UUID evitarán cualquier colisión.

  2. ID de sesión: los UUID se utilizan comúnmente para identificar sesiones de usuario en aplicaciones web. Son particularmente útiles cuando necesita mantener la información de la sesión sin filtrar datos confidenciales o predecibles.

  3. Identificadores de archivos o recursos: cuando necesite realizar un seguimiento de archivos, documentos o cualquier recurso en varias plataformas o bases de datos, se puede asignar un UUID a cada recurso para facilitar la búsqueda sin riesgo de duplicados.

  4. API y referencias externas: exponer ID secuenciales o fácilmente adivinables (por ejemplo, usuario/1, usuario/2) en una API puede provocar vulnerabilidades de privacidad. Al utilizar UUID (por ejemplo, usuario/66e69275-c6bc-800c-90a6-2f41cb991502), se reduce la probabilidad de que los usuarios adivinen y accedan a recursos que no les pertenecen.

Implementación de UUID en Python

La biblioteca uuid de Python simplifica la generación y administración de UUID. He aquí cómo:

import uuid

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

La función uuid4() genera un UUID aleatorio basado en números aleatorios o pseudoaleatorios, que es la variante más común utilizada en el desarrollo web.

Ejemplo: uso de UUID como claves principales en bases de datos

Cuando se utilizan bases de datos como PostgreSQL, es común utilizar UUID como claves principales. Así es como puedes configurarlo en Python con 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.

En este ejemplo, definimos el campo de identificación como UUID, lo que garantiza que cada usuario tendrá un identificador único que no entrará en conflicto con otros registros, incluso en bases de datos distribuidas.

Riesgos de ignorar los UUID

Ignorar los UUID en favor de ID secuenciales o de incremento automático puede plantear varios riesgos:

  1. Vulnerabilidades de seguridad: las identificaciones secuenciales son predecibles, lo que facilita a los atacantes enumerar registros y descubrir datos confidenciales. Por ejemplo, si los ID de usuario son secuenciales, un atacante podría intentar adivinar otros ID de usuario y acceder a cuentas no autorizadas.

  2. Colisiones de datos: en un sistema distribuido, confiar en números enteros que se incrementan automáticamente puede provocar colisiones de ID, especialmente cuando múltiples servicios o bases de datos generan ID sin una coordinación central.

  3. Problemas de fusión y migración de datos: al combinar bases de datos o migrar datos entre sistemas, tener ID secuenciales no únicos puede causar conflictos. Los UUID evitan estos problemas al garantizar la unicidad.

Errores comunes al usar UUID

  1. Almacenar UUID como cadenas: Un error común es almacenar UUID como cadenas, lo que desperdicia espacio y puede ralentizar las consultas, especialmente en bases de datos grandes. La mayoría de las bases de datos modernas, como PostgreSQL, tienen tipos de UUID nativos que almacenan los UUID de manera eficiente.

    Equivocado:

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

    Bien:

    CREATE TABLE users (
        id UUID PRIMARY KEY
    );
    
  2. No usar la versión correcta de UUID: Hay varias versiones de UUID (p. ej., uuid1(), uuid3(), uuid4(), uuid5()), cada una adecuada para un uso específico casos. uuid4(), basado en números aleatorios, es el más utilizado para generar ID únicos en aplicaciones web. Tenga en cuenta qué versión está utilizando y si se ajusta a sus necesidades.

  3. Ignorar las posibilidades de colisión: si bien los UUID están diseñados para ser únicos, existe una posibilidad muy pequeña de colisión. Para la mayoría de las aplicaciones, el riesgo es insignificante, pero si genera miles de millones de UUID o opera en entornos altamente sensibles, debe implementar la detección de colisiones.

Mejores prácticas para el uso de UUID

  1. Utilice UUID para referencias externas: al exponer los ID en URL o API, prefiera los UUID a los ID secuenciales. Esto mejora la seguridad y dificulta que los usuarios predigan los ID de los recursos.

  2. Almacenar UUID en formatos nativos: utilice el tipo de UUID nativo de la base de datos para almacenar UUID en lugar de cadenas. Esto reduce el espacio de almacenamiento y mejora el rendimiento de las consultas.

  3. Elija la versión de UUID correcta: En la mayoría de los casos, uuid4() (UUID basado en aleatorio) es la mejor opción para generar identificadores únicos en aplicaciones web. Sin embargo, si necesita UUID generados de manera determinista, puede considerar uuid3() o uuid5() (UUID basados ​​en espacios de nombres).

  4. Validar UUID: al aceptar UUID ingresados ​​por el usuario, valídelos siempre para asegurarse de que estén formateados correctamente antes de procesarlos. En Python, puedes usar objetos UUID para verificar la validez de una cadena.

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

Conclusión

Los UUID son herramientas poderosas para generar identificadores únicos en sistemas distribuidos y garantizar la seguridad en aplicaciones web. Le ayudan a evitar problemas como colisiones de datos, ataques de identificación predecibles y conflictos de identificación durante las migraciones de bases de datos. Al comprender y seguir las mejores prácticas para los UUID, puede crear sistemas backend más sólidos, escalables y seguros.

Recuerde utilizar la versión UUID adecuada, almacenarlos correctamente en sus bases de datos y tener en cuenta sus riesgos potenciales. ¡Con estos consejos, estará bien equipado para manejar UUID de manera efectiva en sus proyectos!


¡No dudes en comentar a continuación si tienes alguna pregunta o consejo adicional sobre los UUID! ¡Feliz codificación!

Declaración de liberación Este artículo se reproduce en: https://dev.to/usooldatascience/understanding-uuids-a-backend-engineers-guide-for-junior-developers-5075?1 Si hay alguna infracción, comuníquese con [email protected] para borrarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3