V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
doggg
V2EX  ›  程序员

2023 年的末尾,请签收这份 repo -- Lua-Radix-Router Lua 性能最快的 API Router 🚀

  •  1
     
  •   doggg ·
    vm-001 · 334 天前 · 954 次点击
    这是一个创建于 334 天前的主题,其中的信息可能已经有所发展或是发生改变。

    API Router 的应用场景非常广泛,比如从最简单的黑白名单路径列表匹配,到 Web 框架底层的路由,再到 API Gateway 。上层应用的性能上限很大程度取决于 Router 的性能上限。

    虽然一个 O(N) 复杂度的 Router 在极少数量的 Routes 下可以保持很快的匹配速度,但是随着 Routes 数量的增加,O(N) Router 的性能也开始捉襟见肘。

    Lua-Radix-Router 是一个基于动态压缩树(Radix Tree)实现的轻量高性能 Router ,用纯 Lua 编写。时间复杂度是 O(log n)。即使在一百万 Routes 场景,匹配时间依然可以保持纳秒级别。

    https://github.com/vm-001/lua-radix-router

    特性

    • 变量路径:语法 {varname}。

      • /users/{id}/profile-{year}.{format}:允许在一个路径段中有多个变量
    • 前缀匹配:语法 {*varname}

      • /api/authn/{*path}
    • 变量绑定:路由器在匹配过程中会自动帮你注入绑定结果。

    • 最佳性能:Lua/LuaJIT 中最快的路由器

    • OpenAPI 友好:完全支持 OpenAPI 。

    基准测试

    TEST CASE Router number nanoseconds / op QPS
    static path 100000 0.0120372 83,075,798
    simple variable 100000 0.0823292 12,146,358
    simple prefix 100000 0.0726753 13,759,833
    complex variable 100000 0.922157 1,084,414
    simple variable binding 100000 0.2183163 4,580,510
    github 609 0.384233 2,602,587

    结尾

    当初在写这个库的时候,仅仅只是为了解决 OpenAPI Spec 的 API 匹配,但是在做完基准测试后发现性能非常之快,比同类的一个用 FFI 调 C 模块 Radix 的路由还快 3 倍,在我使用 GitHub 开放的 609 的 APIs (模拟真实应用场景)测试的时候,发现性能比它快接近 70 倍。

    希望在 2023 年的最后一个工作日能给 V2EX 的(Lua/API Gateway)朋友带来一个称手的工具,或是一些技术性的启发/灵感。我会在明年(2024)写关于底层实现技术文章,以及更多 Lua-Radix-Router 在更多场景的应用。

    欢迎大家 star 保持关注. https://github.com/vm-001/lua-radix-router

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3184 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:07 · PVG 21:07 · LAX 05:07 · JFK 08:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.