http认证插件和webhook插件的远程调用并发需要修改什么配置才能提升

EMQX 版本

EMQX 4.4.9

EMQX 安装部署方式

腾讯云容器部署,镜像版本4.4.9

EMQX 集群情况

2个节点集群

服务器(运行 EMQX 的机器)硬件配置

服务器操作系统和平台

服务端参数优化情况

压力机硬件配置

压力机使用的测试工具

压力机参数优化情况

在 EMQX 中启用的功能

启用了 HTTP 认证和 WebHook

测试场景

200/s 的速率发起 MQTT over TCP 连接,并且订阅主题。

具体问题

EMQX提示HTTP认证和Web Hook 回调超时。
被调用的服务器实际上正常,没有超时的情况
是EMQX HTTP 认证和 WebHook远程调用的并发限制?

[Auth http] Request auth path: /mqtt/auth, error: timeout
action: discard, file: emqx_cm.erl, line: 352, mfa: {emqx_cm,request_stepdown,3}, msg: session_stepdown_request_timeout, pid: <0.18426.813>, stale_channel: [{status,waiting},{message_queue_len,3},{current_stacktrace,[{gen,do_call,4,[{file,“gen.erl”},{line,233}]},{gen_server,call,3,[{file,“gen_server.erl”},{line,243}]},{ehttpc,request,5,[{file,“ehttpc.erl”},{line,112}]},{emqx_auth_http_cli,request,6,[{file,“emqx_auth_http_cli.erl”},{line,41}]},{emqx_acl_http,check_acl,5,[{file,“emqx_acl_http.erl”},{line,44}]},{emqx_hooks,safe_execute,2,[{file,“emqx_hooks.erl”},{line,207}]},{emqx_hooks,do_run_fold,3,[{file,“emqx_hooks.erl”},{line,186}]},{emqx_access_control,do_check_acl,3,[{file,“emqx_access_control.erl”},{line,76}]},{emqx_access_control,check_acl_cache,3,[{file,“emqx_access_control.erl”},{line,64}]},{emqx_access_control,check_acl,3,[{file,“emqx_access_control.erl”},{line,51}]},{emqx_channel,check_sub_acl,2,[{file,“emqx_channel.erl”},{line,1539}]},{emqx_channel,check_sub_acls,3,[{file,“emqx_channel.erl”},{line,1528}]},{emqx_channel,handle_in,2,[{file,“emqx_channel.erl”},{line,439}]},{emqx_connection,with_channel,3,[{file,“emqx_connection.erl”},{line,694}]},{emqx_connection,process_msg,2,[{file,“emqx_connection.erl”},{line,394}]},{emqx_connection,process_msg,2,[{file,“emqx_connection.erl”},{line,400}]}]}]

[WebHook] HTTP request error: timeout

auth_http 和 webhook 调用超时是偶发的还是所有的都会这样。
可以进入容器试一下直接用 curl 调用 http 接口。看一下是不是网络的问题。

偶发的,服务器是可用的,抓包可以看到调用成功。
但是日志会有超时日志,Dashboard上看到连接数量是不正确的
图片

还有几个指标需要了解一下

  1. 机器配置怎么样。
  2. 每个客户端的订阅速率怎么样,订阅多少主题,有没有 + # 的通配符订阅
  3. webhook 挂了哪些钩子

目前这些日志看起来都是请求发出去了,但是没有收到 http response
也可以调查一下你部署的 http auth 和 webhook 有没有什么异常日志

容器环境资源分配的是8核16G,还需要什么配置吗?
主题订阅是比较单一,就一个主题订阅,不包含通配符
目前http认证服务和webhook服务没什么异常表现,cpu占用最高也不会超过20%
http认证插件和web hook认证插件配置如下
图片

pool_size = 4096 是后来改的?这个默认 32 一般是够用的。
我们测试过 16c32g 的机器能跑到 5000 的连接速率没有任何问题。

http 认证和 webhook 服务所在机器的的 cpu 占用低不能够说明完全没问题,有可能是里面某个地方卡住了导致 timeout
有一个简单的验证方法是给 auth http 加一个 path,不带内部逻辑,所有认证都通过,再看一下有没有 timeout。

或者用其他 mock server 也可以,让所有的 auth 请求都直接返回认证通过。