httpリクエストのkubernetes / elbタイムアウトは何ですか?


9

Java API(HTTPSリクエストを受け入れる_をdockerイメージにパッケージ化し、EC2の上にk8sクラスターを使用してデプロイしています。マスターEC2の前にELBがあります。

ELBにcurl POSTリクエストを送信して、そのJava APIにアクセスできます。

kubeのログで処理が成功したのに、カールのリクエストが応答を永遠に待つことがあります。

これは、40分程度の大きなリクエストで発生し、25分のリクエストでは応答が得られます。

タイムアウトはどこにあると思いますか?私が見なければならない特定の構成パラメータ?

クライアント(カール)-> ELB-> k8s-> Java APIイメージを実行するポッド

これはELBに関連している(私はIdleTimeoutを設定していない)と思いましたが、ドキュメントではデフォルトが60秒であると述べていますが、20分のリクエストに対して応答を取得できます "ConnectionSettings":{"IdleTimeout"}


「40分前後の大きなリクエスト」とはどういう意味ですか?
アルギアサドゥ

つまり、大きなファイルをアップロードすると、APIはETLプロセスでそれを「取り込む」のに40分かかり、応答を返送するためのもの
でした

マスターの前にLBがあるのはなぜですか(つまり、api-serverですか)、そのLBにアクセスするAPIにどのように到達できるのでしょうか。
14:43に確認

回答:


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秒があります。

サーバーが25分のアップロードを処理するのに60秒未満しか必要ないかもしれませんが、40分のアップロードを処理するにはもっと必要ですか?


60秒はどこから来るのですか?ELBでデフォルトのIdleTimeoutを使用していません
tooptoop4

ELBのデフォルトのアイドルタイムアウトは60秒です。「使用しない」ことはできません。1秒から60分の間になるように変更できますが、ELBに接続を終了しないように指示する方法はありません。
パンピー

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分に変更します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.