các kubernetes / elb time out cho các yêu cầu http là gì?


9

Tôi có API java (chấp nhận HTTPS request_ được đóng gói thành hình ảnh docker, và sau đó nó được triển khai bằng cụm k8s trên đầu EC2. EC2 chính có ELB ở phía trước.

Tôi có thể thực hiện curl các yêu cầu POST cho ELB để đạt được API java đó.

Đôi khi yêu cầu curl của tôi ngồi chờ phản hồi mãi mãi mặc dù khi tôi thấy bản ghi kube đã xử lý thành công.

Điều này xảy ra đối với các yêu cầu lớn hơn khoảng 40 phút, yêu cầu 25 phút sẽ nhận được phản hồi ok.

Bạn nghĩ thời gian chờ có thể ở đâu? bất kỳ thông số cấu hình cụ thể nào tôi nên xem xét?

client (curl) -> ELB -> k8s -> pod chạy hình ảnh api java

Tôi nghĩ rằng điều này có liên quan (tôi không đặt IdleTimeout) cho ELB nhưng các tài liệu nói mặc định là 60 giây, mặc dù tôi có thể nhận được phản hồi cho 20 phút yêu cầu "ConnectionSinstall": {"IdleTimeout"}


"Yêu cầu lớn hơn khoảng 40 phút" ý của bạn là gì?
Arghya Sadhu

tức là tải lên tệp lớn, api mất 40 phút để 'nhập' nó với quy trình ETL sau đó có nghĩa là gửi phản hồi lại
tooptoop4

Tôi tự hỏi tại sao bạn lại có LB trước máy chủ (ý bạn là máy chủ api?) Và làm thế nào bạn có thể tiếp cận API của mình khi đánh LB đó.
suren

Câu trả lời:


1

Giống như Pampy đã đề cập trong câu trả lời của mình, thời gian chờ ELB chỉ tính thời gian nhàn rỗi. Điều này có thể nằm trong khoảng từ 1 đến 4000 giây và được đặt thành 60 giây theo mặc định. Bạn có thể thay đổi thời gian chờ bằng CLI hoặc bảng điều khiển.

Sau đây là một ví dụ về việc sử dụng CLI để thay đổi nó thành 5 phút:

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

Nguồn: tài liệu

Khi bạn đang tải lên các tệp lớn mất 20 - 40 phút, tôi vẫn sẽ đề xuất các đề xuất khác về việc sử dụng một nhà môi giới tin nhắn như RabbitM hoặc Kafka để xử lý việc tải lên và xử lý không đồng bộ.


0

Thời gian chờ ELB chỉ được tính cho thời gian "nhàn rỗi" . Điều đó có nghĩa là miễn là tải lên của bạn vẫn chạy, nó không nhàn rỗi. Khi tệp đến máy chủ của bạn, bạn cần đo thời gian cho đến khi máy chủ của bạn phản hồi.

Khi nhận được điều đó một cách chính xác, máy chủ sẽ xử lý yêu cầu và trả lời phản hồi cho khách hàng sau đó. Với thời gian chờ mặc định là 60 giây, máy chủ của bạn có 60 giây này để xử lý tệp đã tải lên và trả lời câu trả lời.

Có thể máy chủ của bạn cần ít hơn 60 giây để xử lý tải lên 25 phút của bạn, nhưng nhiều hơn để xử lý 40 phút tải lên?


60 giây đến từ đâu? Tôi không sử dụng IdleTimeout mặc định trên ELB
tooptoop4

60 giây là thời gian chờ nhàn rỗi mặc định của ELB. Bạn không thể "không sử dụng" nó. Bạn có thể sửa đổi nó trong khoảng từ 1 giây đến 60 phút, nhưng không có cách nào để nói với ELB không chấm dứt kết nối.
Pampy

0

Tại sao bạn không tải tệp lên và đẩy một sự kiện đến người môi giới tin nhắn như rabbitMQ. Thực hiện ETL trên các tệp bằng cách sử dụng đối tượng Job / CronJob không đồng bộ và thông báo cho khách hàng.

Bằng cách này, bạn không phải chặn yêu cầu đến trong thời gian dài hơn. đăng tải bài viết sau khi sự kiện được công bố gửi tin nhắn cho khách hàng rằng yêu cầu đang được xử lý.


tôi vẫn muốn tìm thời gian chờ
tooptoop4

0

25 phút là khá dài cho một yêu cầu HTTP. Tôi hoàn toàn đồng ý với P Ekambaram.

Tôi nghĩ có thể tốt hơn để tạo điểm cuối không đồng bộ và trả lời ngay khi tệp được tải lên (nên nhanh hơn), đồng thời, sử dụng nhắn tin phần mềm trung gian (RabbitMQ, Kafka hoặc NATS) hoặc Websocket, đẩy sự kiện một lần tập tin được nhập và xử lý thành công.


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

sử dụng điều này trong cLI để thay đổi thời gian chờ thành 5 phút

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.