Zum Inhalt

jit-uuid: Schnelle und abhängigkeitfreie UUID-Bibliothek für LuaJIT/nginx-module-lua

Installation

Wenn Sie noch kein RPM-Repository-Abonnement eingerichtet haben, melden Sie sich an. Dann können Sie mit den folgenden Schritten fortfahren.

CentOS/RHEL 7 oder 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

Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.

Dieses Dokument beschreibt lua-resty-jit-uuid v0.0.7, das am 16. Dezember 2017 veröffentlicht wurde.


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

Eine reine LuaJIT (keine Abhängigkeiten) UUID-Bibliothek, die für Leistung optimiert ist.

Motivation

Dieses Modul zielt darauf ab, eine abhängigkeitfreie, leistungsstarke und vollständige UUID-Bibliothek für LuaJIT und ngx_lua zu sein.

Im Gegensatz zu FFI und C-Bindings ist es nicht darauf angewiesen, dass libuuid auf Ihrem System verfügbar ist. Darüber hinaus bietet es bessere Leistungen als die meisten (alle?) Generatoren, mit denen es benchmarked wurde, einschließlich FFI-Bindings.

Schließlich bietet es zusätzliche Funktionen wie die Generierung von UUID v3/v4/v5 und die Validierung von UUIDs.

Siehe den Abschnitt Benchmarks für Vergleiche zwischen anderen UUID-Bibliotheken für Lua/LuaJIT.

Verwendung

LuaJIT:

local uuid = require 'resty.jit-uuid'

uuid.seed()        ---> automatische Initialisierung mit os.time(), LuaSocket oder ngx.time()

uuid()             ---> v4 UUID (zufällig)
uuid.generate_v4() ---> v4 UUID

uuid.generate_v3() ---> v3 UUID (namenbasiert mit MD5)
uuid.generate_v5() ---> v5 UUID (namenbasiert mit SHA-1)

uuid.is_valid()    ---> true/false (automatische JIT PCRE oder Lua-Muster)

OpenResty:

http {
    init_worker_by_lua_block {
        local uuid = require 'resty.jit-uuid'
        uuid.seed() -- sehr wichtig!
    }

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

Hinweis: Beim Generieren von v4 (zufälligen) UUIDs in ngx_lua ist es sehr wichtig, dass Sie dieses Modul in der init_worker-Phase initialisieren. Wenn Sie dies nicht tun, generieren Ihre Worker identische UUID-Sequenzen, was zu ernsthaften Problemen in Ihrer Anwendung führen kann. Die Anforderung zur Initialisierung gilt auch für Verwendungen außerhalb von ngx_lua, obwohl die Initialisierung in solchen Fällen weniger heikel ist. Darüber hinaus sollten Sie vorsichtig mit der Verwendung der lua_code_cache-Direktive sein: Wenn der Lua-Code-Cache deaktiviert ist, werden alle Sequenzen von UUIDs, die während nachfolgender Anfragen generiert werden, identisch sein, es sei denn, dieses Modul wird für jede Anfrage initialisiert. Genau wie das Deaktivieren des Lua-Code-Caches würde ein solches Verhalten als ngx_lua-Anti-Pattern betrachtet werden, und Sie sollten es vermeiden.

Dokumentation

Die Dokumentation ist online verfügbar unter http://thibaultcha.github.io/lua-resty-jit-uuid/.

Benchmarks

Dieses Modul wurde sorgfältig in jedem Schritt seiner Implementierung benchmarked, um die beste Leistung für OpenResty und reines LuaJIT zu gewährleisten. Beispielsweise wird die UUID-Validierung, wenn möglich, JIT PCRE über Lua-Muster verwenden.

Die Datei bench.lua bietet Benchmarks zur UUID-Generierung für mehrere beliebte UUID-Bibliotheken.

Führen Sie make bench aus, um sie auszuführen:

LuaJIT 2.1.0-beta1 mit 1e+06 UUIDs
UUID v4 (zufällig) Generierung
1. resty-jit-uuid   dauerte:   0.064228s    0%
2. FFI-Bindung      dauerte:   0.093374s   +45%
3. C-Bindung        dauerte:   0.220542s   +243%
4. Reines Lua       dauerte:   2.051905s   +3094%

UUID v3 (namenbasiert und MD5) Generierung, falls unterstützt
1. resty-jit-uuid   dauerte:   1.306127s

UUID v5 (namenbasiert und SHA-1) Generierung, falls unterstützt
1. resty-jit-uuid   dauerte:   4.834929s

UUID-Validierung, falls unterstützt (Set von 70% gültig, 30% ungültig)
1. resty-jit-uuid (JIT PCRE aktiviert)    dauerte:   0.223060s
2. FFI-Bindung                          dauerte:   0.256580s
3. resty-jit-uuid (Lua-Muster)        dauerte:   0.444174s

Hinweis: Die Leistung der UUID-Validierung in ngx_lua (JIT PCRE) kann erheblich verbessert werden, indem lua-resty-core aktiviert wird.

Beiträge

Vorschläge zur Verbesserung der Leistung dieses Moduls oder der Benchmarks (irgendeiner benchmarked Bibliothek) werden besonders geschätzt.

GitHub

Sie finden zusätzliche Konfigurationstipps und Dokumentation für dieses Modul im GitHub-Repository für nginx-module-jit-uuid.