我们使用Bot框架开发了一个机器人,它部署在Azure上并在Azure Bot服务上运行。目前有两个渠道:Slack 和 MS Teams。 该机器人是使用瀑布模型构建的,我们有一个预定义的步骤结构。
所用技术:
在开发环境中,python 代码在 P1v2 层(1CPU:1Core,3.50 GB RAM)上使用gunicorn和2个worker运行。
问题: 当我们仅使用 2 个用户(或更多)同时(来自 Slack 或 Teams)测试我们的机器人时,一段时间后 Azure 开始抛出以下错误:
Failed to forward request to application. Encountered a System.Net.Http.HttpRequestException exception after 1085.488ms with message: An error occurred while sending the request.. Check application logs to verify the application is properly handling HTTP traffic.
另请参阅随附的应用程序日志屏幕截图。
我们也研究了它的流量管理器功能并尝试实现它。但其中可用的方法,似乎不适合这种情况。
上面提到的错误是Azure抛出的,请求没有到达我们的代码。此外,在这个错误之后,如果我们再次发送消息,它会到达我们的代码,响应也从代码成功发送,但它永远不会到达 Slack 或 Teams 的用户。
我们的期望是至少 2 个用户应该能够在 1 个 CPU 上同时与机器人对话,这也很低。
我们已经研究这个问题数周,但尚未找到任何可行的解决方案。
如有任何帮助,我们将不胜感激。
我解决了这个问题的一个变体。我的解决方案涉及以下内容,因为我花了超过 48 小时的体力劳动来研究这个问题,我想我会将其留在这里以添加到知识体系中。对于上下文,我的设置涉及使用 Uvicorn 为我的 FastAPI 后端提供服务的 Azure Web App 服务,我通过 Docker 将其部署为容器化实例:""" 看来我最终解决了这个问题。在我的 Gunicorn.conf.py 文件中,我需要指定超时 = 值 >30(默认值)。我的 API 预计在某些请求上花费 >1 分钟,我必须指出这一点。
此外,我需要将 Dockerfile 中的行设置为以下内容才能强制执行此参数。
CMD [“gunicorn”,“-c”,“gunicorn.conf.py”,“main:app”]