来自 Pod 的最大 http 请求数的阻止程序

我有一个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来玩。

我注意到的一件事是,随着我越来越高,一些请求开始失败,并显示以下消息:从此外部服务重置连接

所以我的问题是:

  1. 在这种情况下,阻碍因素是什么?

  2. 具有 8 个核心和 4GB RAM 的服务器可以发送的并发 HTTP POST 请求的限制是多少?这是内存限制吗?或文件描述符限制?

  3. 我收到的错误是来自我的服务器还是来自外部服务器?


弑天下
浏览 129回答 1
1回答

神不在的星期二

在这种情况下,阻碍因素是什么?正如评论中提到的:HTTP“连接重置”通常意味着:对等方意外关闭了连接。在发回响应之前,服务器似乎已断开了毫无戒心的 HTTP 客户端上的连接。这很可能是由于高负载。大多数Web服务器(如nginx)都有一个队列,它们在等待服务时暂存连接。当队列超过某些限制时,连接可能会被丢弃并“重置”。因此,这很可能是您的上游服务饱和了(即您的应用程序发送的请求多于它可以服务的请求并使其队列过载)具有 8 个核心和 4GB RAM 的服务器可以发送的并发 HTTP POST 请求的限制是多少?这是内存限制吗?或文件描述符限制?全部:)在某些时候,您的特定工作负载将过载逻辑限制(如文件描述符)或“物理”限制(如内存)。不幸的是,真正了解哪些资源将被耗尽(以及您遇到哪些约束)的唯一方法是运行测试,分析并基准测试您的工作负载:(我收到的错误是来自我的服务器还是来自外部服务器?HTTP连接重置很可能是外部的,它表示连接对等体(上游服务)重置连接。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go