我们在我们的代码库中使用 HTTPoison 来发布和获取请求,同时使用 hackney 池。在这里发帖只是因为我想从所有专家那里得到一些意见。
我们正在使用很多摄像头,我们从每个摄像头获取图像,然后将所有这些图像保存到seaweedFS服务器。
我们在每秒范围内发出近千个请求。在 seaweedFS 端,我们以 10 秒的超时时间启动了服务器。在我们的代码库方面,为了上传图片,我们使用了这个 hackney 配置。
:hackney_pool.child_spec(:seaweedfs_upload_pool, [timeout: 5000, max_connections: 1000]),
:hackney_pool.child_spec(:seaweedfs_download_pool, [timeout: 5000, max_connections: 1000]),
在过去的几天里,我们在这方面遇到了问题。起初,我们这边的 timeout 和 max_connections 是 10 秒和 5K。我们开始收到这些 HTTPoison 错误
{%HTTPoison.Error{id: nil, reason: :closed}}
错误计数如此之高,几乎达到 12K 等等,所以暂时,在 Elixir Slack 频道讨论它之后,我将超时和 max_connections 更改为上述设置。在此之后,错误从 12K 减少到 3K,但仅持续了 2 或 3 天,之后错误计数再次变为 12K,依此类推。
开发 SeaweedFS 的人指出,我们用来发送 HTTP 请求的库没有关闭连接,而在我们的 seaweedFS 服务器端(我们的代码库向其发送读写请求的服务器)这个命令的结果是
root@Ubuntu-1404-trusty-64-minimal ~ # netstat | grep http | wc -l
5086
谁能给我一些建议?这个错误的原因可能是什么?
我对 Elixir Slack Channel 和我所知道的关于 hackney 池的讨论很少为此请求发出的将保持打开状态另外 2 秒(完成 5 秒),以便其他 http post 请求可以使用仍然打开的连接?也许我在这个理论中是错误的。
但是,如果有人能指出我使用 hackney 池的一些更好的解决方案,那就太好了。
我们使用的是 HTTPoison 0.11.1,最终使用的是 hackney 1.7.1。