http请求的kubernetes / elb超时时间是多少?


9

我有一个Java API(接受打包到docker映像中的HTTPS request_,然后在EC2之上使用k8s集群进行部署。主EC2在前面有一个ELB。

我可以向ELB发出curl POST请求,以命中该Java API。

有时,即使我看到kube日志,处理也成功了,但我的curl请求却永远等待着响应。

对于40分钟左右的较大请求,会发生这种情况,而25分钟的请求可以正常响应。

您认为超时可能在哪里?我应该看任何特定的配置参数?

客户端(curl)-> ELB-> k8s->运行Java api映像的pod

我认为这与ELB相关(我未设置IdleTimeout),但是文档说默认值为60s,尽管我可以在20min请求中获得响应“ ConnectionSettings”:{“ IdleTimeout”}


“较大的请求大约40分钟”是什么意思?
Arghya Sadhu

即上传大文件,api需要40分钟才能通过ETL流程“摄取”该文件,然后将其发送回去
tooptoop4

我想知道为什么您在主服务器前面有一个LB(您的意思是api服务器?),以及如何达到达到该LB的API。
确定

Answers:


1

就像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之类的消息代理来异步处理上传和处理。


0

ELB超时仅计为“空闲”时间。这意味着只要您的上传仍在运行,它就不会空闲。文件到达服务器后,您需要测量直到服务器响应为止的时间。

如果正确理解,服务器将处理该请求,然后将响应返回给客户端。默认超时为60秒,您的服务器有60秒的时间来处理上传的文件并返回答案。

也许您的服务器需要不到60秒来处理25分钟的上载,但是需要更多的时间来处理40分钟的上载?


60秒从哪里来?我未在ELB上使用默认的IdleTimeout
tooptoop4

60秒是ELB的默认空闲超时。您不能“不使用”它。您可以将其修改为介于1秒和60分钟之间,但是根本无法告诉ELB不要终止连接。
Pampy

0

为什么不上传文件,然后将事件推送到RabbitMQ这样的消息代理。使用kubernetes Job / CronJob对象异步对文件执行ETL,并相应地通知客户端。

这样,您不必长时间阻止传入的请求。事件发布后发布上传消息,向客户端发送一条消息,请求正在处理中。


我仍然想找到超时时间
tooptoop4

0

HTTP请求需要25分钟。我非常同意P Ekambaram。

我认为最好是使端点异步并在文件上传后尽快回复(应该更快),同时使用中间件消息传递(RabbitMQ,Kafka或NATS)或Websocket,在事件发送后推送事件文件已成功导入和处理。


0
 aws elb modify-load-balancer-attributes --load-balancer-name my-loadbalancer --load-balancer-attributes "{\"ConnectionSettings\":{\"IdleTimeout\":300}}"

在cLI中使用此选项将超时更改为5分钟

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.