【发布时间】:2021-01-14 14:09:07
【问题描述】:
我有一个 Go 应用程序,它部署到 Kubernetes 上的两个 8 核 Pod 实例。 从中,我收到一个 id 列表,然后我通过将每个 id 发送到 POST 端点来从另一个服务检索一些数据。 我正在使用有界并发模式来为该外部服务提供最大数量的同时 goroutines(以及因此的请求)。
我将并发限制设置为:
sem := make(chan struct{}, MAX_GO_ROUTINES)
通过这个设置,我开始通过增加 MAX_GO_ROUTINES 数字来玩弄它。我通常会收到大约 20000 个 ID 来检查。所以我通过将 MAX_GO_ROUTINES 设置为 100 到 20000 之间的任何值来玩弄。
我注意到的一件事是,随着我越来越高,一些请求开始失败,并显示以下消息:connection reset from this external service。
所以我的问题是:
- 本例中的拦截器是什么?
- 8 核和 4GB 内存的服务器可以发送的并发 HTTP POST 请求限制是多少?是内存限制吗?还是文件描述符限制?
- 我收到的错误是来自我的服务器还是来自外部服务器?
【问题讨论】:
-
错误来自您的服务器(您的应用程序)。当其中一个对等方关闭连接时,会发送连接重置。 20k 请求对您的 pod 来说应该不是问题。
标签: go concurrency