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
- Liaison FFI : https://github.com/bungle/lua-resty-uuid
- Liaison C : https://github.com/Mashape/lua-uuid
- Lua pur : https://github.com/Tieske/uuid
- resty-jit-uuid : ce module (référence de base pour la comparaison % de génération)
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.