💡
原文中文,约12800字,阅读约需31分钟。
📝
内容提要
这篇文章讨论了APISIX中的路由器初始化和数据同步机制。它介绍了如何在APISIX的ngx_tpl.lua和apisix/init.lua文件中初始化路由器,并在apisix/router.lua文件中定义了http_init_worker函数。文章还讨论了如何在apisix/http/route.lua文件中初始化user_routes变量,并在match函数中使用radixtree_uri_with_parameter路由器进行匹配。最后,文章提到了etcd的增量更新和实时更新的问题,并提供了解决方案。
🎯
关键要点
- 文章讨论了APISIX中的路由器初始化和数据同步机制。
- 在ngx_tpl.lua中通过init_worker_by_lua_block初始化路由器。
- 在apisix/init.lua中定义http_init_worker函数以初始化路由器。
- http_init_worker函数中使用radixtree_uri作为默认路由器。
- user_routes变量在apisix/http/route.lua中初始化,并在match函数中使用。
- match函数使用radixtree_uri_with_parameter进行路由匹配。
- etcd的增量更新和实时更新问题被提及,并提供了解决方案。
- etcd的compact可能导致APISIX性能抖动和请求失败。
- 建议修改etcd的自动压缩配置以减少全量同步的概率。
- 实时更新可能导致所有请求在同一时间重建radixtree,影响性能。
- APISIX在V3版本中通过gRPC连接etcd以减少连接数。
- 增量更新的PR曾被关闭,影响了社区的活跃度。
- lua-resty-etcd是用于OpenResty的非阻塞Lua etcd驱动库。
➡️