我有一个Go应用程序,它部署到Kubernetes上的两个8核Pods实例。从中,我收到一个ID列表,而不是稍后通过将每个ID发送到POST端点来从另一个服务检索一些数据的ID。我正在使用有界并发模式来向此外部服务提供最大数量的模拟goroutines(以及请求)。我将并发限制设置为:sem := make(chan struct{}, MAX_GO_ROUTINES)通过这种设置,我开始通过增加MAX_GO_ROUTINES数字来玩弄它。我通常收到大约20000个id进行检查。因此,我通过设置100到20000之间的任何地方的MAX_GO_ROUTINES来玩。我注意到的一件事是,随着我越来越高,一些请求开始失败,并显示以下消息:从此外部服务重置连接。所以我的问题是:在这种情况下,阻碍因素是什么?具有 8 个核心和 4GB RAM 的服务器可以发送的并发 HTTP POST 请求的限制是多少?这是内存限制吗?或文件描述符限制?我收到的错误是来自我的服务器还是来自外部服务器?
1 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
在这种情况下,阻碍因素是什么?
正如评论中提到的:HTTP“连接重置”通常意味着:
对等方意外关闭了连接。在发回响应之前,服务器似乎已断开了毫无戒心的 HTTP 客户端上的连接。这很可能是由于高负载。
大多数Web服务器(如nginx)都有一个队列,它们在等待服务时暂存连接。当队列超过某些限制时,连接可能会被丢弃并“重置”。因此,这很可能是您的上游服务饱和了(即您的应用程序发送的请求多于它可以服务的请求并使其队列过载)
具有 8 个核心和 4GB RAM 的服务器可以发送的并发 HTTP POST 请求的限制是多少?这是内存限制吗?或文件描述符限制?
全部:)在某些时候,您的特定工作负载将过载逻辑限制(如文件描述符)或“物理”限制(如内存)。不幸的是,真正了解哪些资源将被耗尽(以及您遇到哪些约束)的唯一方法是运行测试,分析并基准测试您的工作负载:(
我收到的错误是来自我的服务器还是来自外部服务器?
HTTP连接重置很可能是外部的,它表示连接对等体(上游服务)重置连接。
- 1 回答
- 0 关注
- 127 浏览
添加回答
举报
0/150
提交
取消