Aller au contenu

jit-uuid: Bibliothèque UUID rapide et sans dépendances pour LuaJIT/nginx-module-lua

Installation

Si vous n'avez pas configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.

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

Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.

Ce document décrit lua-resty-jit-uuid v0.0.7 publié le 16 décembre 2017.


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

Une bibliothèque UUID pure LuaJIT (sans dépendances) optimisée pour la performance.

Motivation

Ce module vise à être une bibliothèque UUID performante et complète, sans dépendances, pour LuaJIT et ngx_lua.

Contrairement aux liaisons FFI et C, il ne dépend pas de la disponibilité de libuuid sur votre système. De plus, il fonctionne mieux que la plupart (tous ?) des générateurs contre lesquels il a été évalué, y compris les liaisons FFI.

Enfin, il offre des fonctionnalités supplémentaires telles que la génération de UUID v3/v4/v5 et la validation de UUID.

Consultez la section Benchmarks pour des comparaisons entre d'autres bibliothèques UUID pour Lua/LuaJIT.

Utilisation

LuaJIT:

local uuid = require 'resty.jit-uuid'

uuid.seed()        ---> initialisation automatique avec os.time(), LuaSocket, ou ngx.time()

uuid()             ---> UUID v4 (aléatoire)
uuid.generate_v4() ---> UUID v4

uuid.generate_v3() ---> UUID v3 (basé sur le nom avec MD5)
uuid.generate_v5() ---> UUID v5 (basé sur le nom avec SHA-1)

uuid.is_valid()    ---> vrai/faux (JIT PCRE automatique ou motifs Lua)

OpenResty:

http {
    init_worker_by_lua_block {
        local uuid = require 'resty.jit-uuid'
        uuid.seed() -- très important !
    }

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

Remarque : lors de la génération de UUID v4 (aléatoires) dans ngx_lua, il est très important d'initialiser ce module dans la phase init_worker. Si vous ne le faites pas, vos workers généreront des séquences UUID identiques, ce qui pourrait entraîner de graves problèmes dans votre application. L'exigence d'initialisation s'applique également dans des utilisations en dehors de ngx_lua, bien que l'initialisation soit moins délicate dans de tels cas. De plus, vous devez faire attention à l'utilisation de la directive lua_code_cache : si le cache de code Lua est désactivé, toutes les séquences de UUID générées lors des requêtes suivantes seront identiques, à moins que ce module ne soit initialisé pour chaque requête. Tout comme la désactivation du cache de code Lua, un tel comportement serait considéré comme un anti-pattern ngx_lua et vous devriez l'éviter.

Documentation

La documentation est disponible en ligne à http://thibaultcha.github.io/lua-resty-jit-uuid/.

Benchmarks

Ce module a été soigneusement évalué à chaque étape de son implémentation pour garantir la meilleure performance pour OpenResty et LuaJIT pur. Par exemple, la validation de UUID utilisera JIT PCRE plutôt que des motifs Lua lorsque cela est possible.

Le fichier bench.lua fournit des benchmarks de génération de UUID pour plusieurs bibliothèques UUID populaires.

Exécutez make bench pour les exécuter :

LuaJIT 2.1.0-beta1 avec 1e+06 UUIDs
Génération de UUID v4 (aléatoire)
1. resty-jit-uuid   a pris :   0.064228s    0%
2. Liaison FFI      a pris :   0.093374s   +45%
3. Liaison C        a pris :   0.220542s   +243%
4. Lua pur          a pris :   2.051905s   +3094%

Génération de UUID v3 (basé sur le nom et MD5) si supporté
1. resty-jit-uuid   a pris :   1.306127s

Génération de UUID v5 (basé sur le nom et SHA-1) si supporté
1. resty-jit-uuid   a pris :   4.834929s

Validation de UUID si supportée (ensemble de 70% valides, 30% invalides)
1. resty-jit-uuid (JIT PCRE activé)    a pris :   0.223060s
2. Liaison FFI                          a pris :   0.256580s
3. resty-jit-uuid (motifs Lua)        a pris :   0.444174s

Remarque : La performance de validation de UUID dans ngx_lua (JIT PCRE) peut être considérablement améliorée en activant lua-resty-core.

Contributions

Les suggestions pour améliorer la performance de ce module ou des benchmarks (de toute bibliothèque évaluée) sont particulièrement appréciées.

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-jit-uuid.