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

285 天前
 doggg

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

特性

基准测试

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

925 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1004316

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX