Background In the early days, APISIX prided itself on its high performance, but as the project grew, we would add more features to the main process, which caused APISIX's performance to degrade. This is an irreversible process. Now it's time to refocus the perspective on improving performance. I would like to introduce a new approach for guiding current and future performance optimization measures.
Vision Implementing a complete AI Plane allows APISIX to dynamically determine the best configuration switch based on user configuration (routing, plug-ins, etc.), monitoring, and other data, and intelligently enable or disable some features to find the best balance between functionality, performance, and security. Make every line of the main process code real and meaningful, and reject every bit of waste. On the premise of not compromising security and functionality, we further improve APISIX execution efficiency, thus enhancing APISIX node throughput and system stability, and bringing users a more ultimate experience. In the future, AI Plane will be more intelligent to help users better manage their existing APIs and further enhance APISIX's experience of managing user APIs. Goals For now let's talk about short-term goals, in the short term (before APISIX 3.0 is released), we need to achieve 1. improve APISIX performance relative to 3.0.0-beta version in both single-route and multiple-route scenarios; 2. optimized for many routes pressure testing scenarios (5000 routes, no binding of any plugins, only one upstream), QPS performance should exceed 3.0.0-beta version by 30%. Detailed Design 1. when the route matching conditions are simple, such as only URI, and host, enable caching to speed up route matching, the cache key can be set dynamically; 2. remove ctxdump from the Lua code and implement it at the C level; 3. if there are no plugins bound to the route that works in the header_filter and body_filter phases, and if there are no special settings in these two phases, skip them directly; 4. when there is only one upstream node in the upstream and no other configuration items are enabled, set upstream in a minimalist way. *ZhengSong Tu* My GitHub: https://github.com/tzssangglass Apache APISIX: https://github.com/apache/apisix