membphis opened a new pull request, #13073:
URL: https://github.com/apache/apisix/pull/13073

   ## Description
   
   When routes change frequently (e.g., 20-50 changes/sec with 5000+ total 
routes), the data plane rebuilds the radixtree router on **every single 
change**, causing significant CPU spikes (up to 80%) and temporary TPS drops.
   
   This PR adds a configurable `router_rebuild_min_interval` option that sets a 
minimum time interval (in seconds) between HTTP router rebuilds. When the 
interval has not elapsed since the last rebuild, subsequent route changes are 
acknowledged but the router rebuild is deferred, dramatically reducing CPU 
usage during bulk route updates.
   
   ### Configuration
   
   ```yaml
   apisix:
     router:
       http: radixtree_host_uri
       ssl: radixtree_sni
       router_rebuild_min_interval: 0  # default: 0 (rebuild immediately, 
current behavior)
   ```
   
   ### Expected Impact
   
   | Scenario (30s duration) | min_interval: 0 | min_interval: 1 | 
min_interval: 5 |
   |---|---|---|---|
   | 20 changes/sec | 600 rebuilds | ~31 rebuilds | ~7 rebuilds |
   | 50 changes/sec | 1500 rebuilds | ~31 rebuilds | ~7 rebuilds |
   | 1 change/3sec | 10 rebuilds | 10 rebuilds | 10 rebuilds |
   
   ### Changes
   
   - **`conf/config.yaml.example`**: Added `router_rebuild_min_interval` config 
option
   - **`apisix/cli/config.lua`**: Default value `0`
   - **`apisix/router.lua`**: Reads config and passes to HTTP router modules 
(+3 lines)
   - **`apisix/http/router/radixtree_uri.lua`**: Min interval check before 
rebuild
   - **`apisix/http/router/radixtree_host_uri.lua`**: Min interval check before 
rebuild
   - **`apisix/http/router/radixtree_uri_with_parameter.lua`**: Min interval 
check before rebuild
   - **`t/router/router-rebuild-min-interval.t`**: Test cases covering default 
behavior, skip behavior, and deferred rebuild
   
   ### Backward Compatibility
   
   Default value is `0`, preserving the existing behavior of rebuilding 
immediately on every route change. No existing configurations are affected.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to