help request: Using the radixtree.new() method in a similar way has a performance difference of ten times
Description
I added a custom logic to the _M.match method in radixtree_host_uri.lua in APISIX to simulate how long it takes to build a radix tree with 1000 routes. At the same time, I used Python to call the Admin API of APISIX and added 1000 routes. When I executed curl -X GET http://localhost:9080/foo, I was surprised to find that with the same number of routes, when using a similar method to call radixtree.new to build a radixtree, the performance difference between the two was as much as ten times. Why is this?
-
Use python to call the Admin API of APISIX and added routes.
-
Added custom logic of
radixtree_host_uri.match() -
Test
Environment
- APISIX version (run
apisix version): 3.9.1 - Operating system (run
uname -a): Linux localhost.localdomain 5.14.0-427.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Feb 23 04:45:07 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux - OpenResty / Nginx version (run
openresty -Vornginx -V): nginx version: openresty/1.25.3.2 - etcd version, if relevant (run
curl http://127.0.0.1:9090/v1/server_info): {"etcd_version":"3.4.0","boot_time":1723460812,"hostname":"","id":"ba56a241-98c4-433a-b1c9-ddcead159944","version":"3.9.1"} - APISIX Dashboard version, if relevant: No
- Plugin runner version, for issues related to plugin runners: Not used
- LuaRocks version, for installation issues (run
luarocks --version): /usr/bin/luarocks 3.9.2
Hi @dayongi
There is a similar closed issue that might be relevant to your problem: radixtree.new cost nearly 120s when uri_routes num is 10w. This issue discusses performance concerns related to the radixtree.new method when handling a large number of routes [1].
Hi @zhoujiexiong
but,there was no follow-up result for this issue ...
Duplicate of https://github.com/api7/lua-resty-radixtree/issues/149