jit-uuid: Biblioteca de UUID rápida e sem dependências para LuaJIT/nginx-module-lua
Instalação
Se você ainda não configurou a assinatura do repositório RPM, inscreva-se. Em seguida, você pode prosseguir com os seguintes passos.
CentOS/RHEL 7 ou 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 com o NGINX, certifique-se de que o nginx-module-lua esteja instalado.
Este documento descreve lua-resty-jit-uuid v0.0.7 lançado em 16 de dezembro de 2017.
[![Module Version][badge-version-image]][luarocks-resty-jit-uuid] [![Coverage Status][badge-coveralls-image]][badge-coveralls-url]
Uma biblioteca de UUID pura em LuaJIT (sem dependências) ajustada para desempenho.
Motivação
Este módulo tem como objetivo ser uma biblioteca de UUID completa, sem dependências e com bom desempenho para LuaJIT e ngx_lua.
Ao contrário de FFI e ligações C, ele não depende da libuuid estar disponível em seu sistema. Além disso, ele apresenta melhor desempenho do que a maioria (todas?) as geradoras contra as quais foi testado, incluindo ligações FFI.
Finalmente, ele fornece recursos adicionais, como geração de UUID v3/v4/v5 e validação de UUID.
Consulte a seção Benchmarks para comparações entre outras bibliotecas de UUID para Lua/LuaJIT.
Uso
LuaJIT:
local uuid = require 'resty.jit-uuid'
uuid.seed() ---> semeadura automática com os.time(), LuaSocket ou ngx.time()
uuid() ---> UUID v4 (aleatório)
uuid.generate_v4() ---> UUID v4
uuid.generate_v3() ---> UUID v3 (baseado em nome com MD5)
uuid.generate_v5() ---> UUID v5 (baseado em nome com SHA-1)
uuid.is_valid() ---> true/false (PCRE JIT automático ou padrões Lua)
OpenResty:
http {
init_worker_by_lua_block {
local uuid = require 'resty.jit-uuid'
uuid.seed() -- muito importante!
}
server {
location / {
content_by_lua_block {
local uuid = require 'resty.jit-uuid'
ngx.say(uuid())
}
}
}
}
Nota: ao gerar UUIDs v4 (aleatórios) em ngx_lua, é muito importante que você semeie este módulo na fase init_worker. Se você não fizer isso, seus workers gerarão sequências de UUID idênticas, o que pode levar a sérios problemas em sua aplicação. A exigência de semeadura também se aplica em usos fora do ngx_lua, embora a semeadura seja menos delicada nesses casos. Além disso, você deve ter cuidado com o uso da diretiva lua_code_cache: se o cache de código Lua estiver desativado, todas as sequências de UUIDs geradas durante solicitações subsequentes serão idênticas, a menos que este módulo seja semeado para cada solicitação. Assim como desativar o cache de código Lua, esse comportamento seria considerado um anti-padrão do ngx_lua e você deve evitá-lo.
Documentação
A documentação está disponível online em http://thibaultcha.github.io/lua-resty-jit-uuid/.
Benchmarks
Este módulo foi cuidadosamente testado em cada etapa de sua implementação para garantir o melhor desempenho para OpenResty e LuaJIT puro. Por exemplo, a validação de UUID usará JIT PCRE em vez de padrões Lua sempre que possível.
O arquivo bench.lua fornece benchmarks de geração de UUID para várias bibliotecas populares de UUID.
Execute make bench para executá-los:
LuaJIT 2.1.0-beta1 com 1e+06 UUIDs
Geração de UUID v4 (aleatório)
1. resty-jit-uuid levou: 0.064228s 0%
2. Ligação FFI levou: 0.093374s +45%
3. Ligação C levou: 0.220542s +243%
4. Lua pura levou: 2.051905s +3094%
Geração de UUID v3 (baseado em nome e MD5) se suportado
1. resty-jit-uuid levou: 1.306127s
Geração de UUID v5 (baseado em nome e SHA-1) se suportado
1. resty-jit-uuid levou: 4.834929s
Validação de UUID se suportado (conjunto de 70% válidos, 30% inválidos)
1. resty-jit-uuid (JIT PCRE habilitado) levou: 0.223060s
2. Ligação FFI levou: 0.256580s
3. resty-jit-uuid (padrões Lua) levou: 0.444174s
- Ligação FFI: https://github.com/bungle/lua-resty-uuid
- Ligação C: https://github.com/Mashape/lua-uuid
- Lua pura: https://github.com/Tieske/uuid
- resty-jit-uuid: este módulo (referência base para comparação de % de geração)
Nota: O desempenho da validação de UUID em ngx_lua (JIT PCRE) pode ser muito melhorado ao habilitar lua-resty-core.
Contribuições
Sugestões para melhorar o desempenho deste módulo ou dos benchmarks (de qualquer biblioteca testada) são particularmente apreciadas.
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-jit-uuid.