Pular para conteúdo

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

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.