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
- Enlace FFI: https://github.com/bungle/lua-resty-uuid
- Enlace C: https://github.com/Mashape/lua-uuid
- Lua pura: https://github.com/Tieske/uuid
- resty-jit-uuid: este módulo (referencia base para comparación de % de generación)
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.