http 请求的 kubernetes/elb 超时是多少?
Posted
技术标签:
【中文标题】http 请求的 kubernetes/elb 超时是多少?【英文标题】:what are the kubernetes/elb time outs for http requests? 【发布时间】:2020-04-28 09:04:05 【问题描述】:我有一个java API(接受HTTPS请求_打包成一个docker镜像,然后使用k8s集群部署在EC2s之上。主EC2前面有一个ELB。
我可以向 ELB 发出 curl POST 请求以访问该 java API。
有时我的 curl 请求会一直等待响应,即使当我看到 kube 日志处理成功时也是如此。
对于 40 分钟左右的较大请求会发生这种情况,25 分钟的请求会得到响应。
您认为超时可能在哪里?我应该查看任何特定的配置参数吗?
client (curl) --> ELB --> k8s --> pod 运行 java api 镜像
我认为这与 ELB 相关(我没有设置 IdleTimeout),但文档说默认值为 60 秒,尽管我可以获得 20 分钟请求的响应 “连接设置”: “空闲超时”
【问题讨论】:
“更大的请求大约 40 分钟”你的意思是什么? 即上传大文件,api 需要 40 分钟通过 ETL 过程“摄取”它,然后返回响应 我想知道为什么你的主服务器前面有一个 LB(你的意思是 api-server?),以及你如何访问你的 API 来访问那个 LB。 【参考方案1】: aws elb modify-load-balancer-attributes --load-balancer-name my-loadbalancer --load-balancer-attributes "\"ConnectionSettings\":\"IdleTimeout\":300"
在 cLI 中使用它来将超时更改为 5 分钟
【讨论】:
【参考方案2】:正如 Pampy 在他的回答中提到的,ELB 超时只计算空闲时间。这可以在 1 到 4000 秒之间,默认设置为 60 秒。您可以使用 CLI 或控制台更改超时。
以下是使用 CLI 将其更改为 5 分钟的示例:
aws elb modify-load-balancer-attributes --load-balancer-name my-loadbalancer --load-balancer-attributes "\"ConnectionSettings\":\"IdleTimeout\":300"
来源:docs
由于您上传大文件需要 20-40 分钟,我仍然会推荐其他有关使用 RabbitM 或 Kafka 等消息代理来异步处理上传和处理的建议。
【讨论】:
【参考方案3】:25 分钟对于 HTTP 请求来说是相当长的。我非常同意 P Ekambaram 的观点。
我认为最好使端点异步并在文件上传后立即回复(应该更快),同时使用中间件消息传递(RabbitMQ、Kafka 或 NATS)或 Websocket 来推送文件成功导入和处理后的事件。
【讨论】:
【参考方案4】:为什么不上传文件并将事件推送到消息代理,如rabbitMQ。使用 kubernetes Job/CronJob 对象异步对文件进行 ETL 并通知客户端。
这样,您不必长时间阻止传入的请求。发布事件后上传后向客户端发送一条消息,表明正在处理请求。
【讨论】:
我还是想知道超时在哪里【参考方案5】:ELB 超时仅适用于 "idle" time。 这意味着只要您的上传仍在运行,它就不会空闲。 当文件到达您的服务器时,您需要测量服务器响应的时间。
当得到正确的,服务器将处理请求并在之后向客户端返回响应。 默认超时时间为 60 秒,您的服务器有这 60 秒的时间来处理上传的文件并返回答案。
也许您的服务器需要不到 60 秒的时间来处理 25 分钟的上传,但处理 40 分钟的上传需要更多时间?
【讨论】:
60 秒从何而来?我没有在 ELB 上使用默认的 IdleTimeout 60秒是ELB默认的空闲超时时间。你不能“不使用”它。您可以将其修改为 1 秒到 60 分钟之间,但没有办法告诉 ELB 根本不要终止连接。以上是关于http 请求的 kubernetes/elb 超时是多少?的主要内容,如果未能解决你的问题,请参考以下文章