Saltar a contenido

jit-uuid: Biblioteca de UUID rápida y sin dependencias para LuaJIT/nginx-module-lua

Instalación

Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.

CentOS/RHEL 7 o Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-jit-uuid

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-jit-uuid

Para usar esta biblioteca Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.

Este documento describe lua-resty-jit-uuid v0.0.7 lanzado el 16 de diciembre de 2017.


[![Module Version][badge-version-image]][luarocks-resty-jit-uuid] [![Coverage Status][badge-coveralls-image]][badge-coveralls-url]

Una biblioteca de UUID pura de LuaJIT (sin dependencias) ajustada para rendimiento.

Motivación

Este módulo está diseñado para ser una biblioteca de UUID completa, sin dependencias y de alto rendimiento para LuaJIT y ngx_lua.

A diferencia de los enlaces FFI y C, no depende de que libuuid esté disponible en tu sistema. Además, ofrece un rendimiento mejor que la mayoría (¿todas?) de los generadores contra los que se realizó la comparación, incluidos los enlaces FFI.

Finalmente, proporciona características adicionales como generación de UUID v3/v4/v5 y validación de UUID.

Consulta la sección de Benchmarks para comparaciones entre otras bibliotecas de UUID para Lua/LuaJIT.

Uso

LuaJIT:

local uuid = require 'resty.jit-uuid'

uuid.seed()        ---> siembra automática con os.time(), LuaSocket o ngx.time()

uuid()             ---> UUID v4 (aleatorio)
uuid.generate_v4() ---> UUID v4

uuid.generate_v3() ---> UUID v3 (basado en nombre con MD5)
uuid.generate_v5() ---> UUID v5 (basado en nombre con SHA-1)

uuid.is_valid()    ---> true/false (patrones automáticos de JIT PCRE o Lua)

OpenResty:

http {
    init_worker_by_lua_block {
        local uuid = require 'resty.jit-uuid'
        uuid.seed() -- ¡muy importante!
    }

    server {
        location / {
            content_by_lua_block {
                local uuid = require 'resty.jit-uuid'
                ngx.say(uuid())
            }
        }
    }
}

Nota: al generar UUIDs v4 (aleatorios) en ngx_lua, es muy importante que siembres este módulo en la fase init_worker. Si no lo haces, tus trabajadores generarán secuencias de UUID idénticas, lo que podría llevar a problemas serios en tu aplicación. El requisito de siembra también se aplica en usos fuera de ngx_lua, aunque la siembra es menos delicada en tales casos. Además, debes tener cuidado con el uso de la directiva lua_code_cache: si la caché de código Lua está deshabilitada, todas las secuencias de UUID generadas durante solicitudes posteriores serán idénticas, a menos que este módulo se siembre para cada solicitud. Al igual que deshabilitar la caché de código Lua, tal comportamiento se consideraría un anti-patrón de ngx_lua y deberías evitarlo.

Documentación

La documentación está disponible en línea en http://thibaultcha.github.io/lua-resty-jit-uuid/.

Benchmarks

Este módulo ha sido cuidadosamente evaluado en cada paso de su implementación para asegurar el mejor rendimiento para OpenResty y LuaJIT puro. Por ejemplo, la validación de UUID utilizará JIT PCRE sobre patrones de Lua cuando sea posible.

El archivo bench.lua proporciona benchmarks de generación de UUID para varias bibliotecas populares de UUID.

Ejecuta make bench para ejecutarlos:

LuaJIT 2.1.0-beta1 con 1e+06 UUIDs
Generación de UUID v4 (aleatorio)
1. resty-jit-uuid   tomó:   0.064228s    0%
2. Enlace FFI       tomó:   0.093374s   +45%
3. Enlace C        tomó:   0.220542s   +243%
4. Lua pura        tomó:   2.051905s   +3094%

Generación de UUID v3 (basado en nombre y MD5) si es compatible
1. resty-jit-uuid   tomó:   1.306127s

Generación de UUID v5 (basado en nombre y SHA-1) si es compatible
1. resty-jit-uuid   tomó:   4.834929s

Validación de UUID si es compatible (conjunto de 70% válido, 30% inválido)
1. resty-jit-uuid (JIT PCRE habilitado)    tomó:   0.223060s
2. Enlace FFI                          tomó:   0.256580s
3. resty-jit-uuid (patrones de Lua)        tomó:   0.444174s

Nota: El rendimiento de validación de UUID en ngx_lua (JIT PCRE) puede mejorarse significativamente habilitando lua-resty-core.

Contribuciones

Se aprecian especialmente las sugerencias que mejoren el rendimiento de este módulo o de los benchmarks (de cualquier biblioteca evaluada).

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-jit-uuid.