apisix etcd机制

apisix etcd机制

💡 原文中文,约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驱动库。

延伸问答

APISIX中的路由器是如何初始化的?

APISIX中的路由器通过在ngx_tpl.lua中调用init_worker_by_lua_block来初始化,并在apisix/init.lua中定义http_init_worker函数。

etcd的增量更新和实时更新有什么问题?

etcd的增量更新可能导致APISIX性能抖动和请求失败,而实时更新可能导致所有请求在同一时间重建radixtree,影响性能。

如何解决etcd的compact导致的性能问题?

建议修改etcd的自动压缩配置为--auto-compaction-mode=revision和--auto-compaction-retention=1000,以减少全量同步的概率。

APISIX如何处理路由匹配?

APISIX使用match函数和radixtree_uri_with_parameter进行路由匹配,确保根据最新的user_routes进行匹配。

APISIX在V3版本中对etcd的连接方式有什么变化?

在V3版本中,APISIX通过gRPC连接etcd,以减少连接数并提高性能。

lua-resty-etcd是什么?

lua-resty-etcd是用于OpenResty的非阻塞Lua etcd驱动库,支持etcd API v3。

➡️

继续阅读