如何設定逾時?
Envoy 支援各種逾時設定,這些設定可能需要根據部署情況進行配置。此頁面總結了各種情況下使用的最重要逾時設定。
注意
這並非 Envoy 支援的所有可設定逾時的完整清單。根據部署情況,可能需要額外組態。
HTTP/gRPC
連線逾時
連線逾時適用於整個 HTTP 連線以及該連線所承載的所有串流。
HTTP 協定 idle_timeout 定義在 HTTP 連線管理器和上游叢集 HTTP 連線使用的通用訊息中。閒置逾時是指在沒有活動串流的情況下,下游或上游連線將被終止的時間。如果未另行指定,則預設的閒置逾時為1 小時。若要修改下游連線的閒置逾時,請使用 HTTP 連線管理器組態中的 common_http_protocol_options 欄位。若要修改上游連線的閒置逾時,請使用叢集 extension_protocol_options 中的 common_http_protocol_options 欄位,並以 HttpProtocolOptions 作為鍵值。
HTTP 協定 max_connection_duration 定義在 HTTP 連線管理器和上游叢集 HTTP 連線使用的通用訊息中。最大連線持續時間是指下游或上游連線從首次建立開始,被排空和/或關閉的時間。如果沒有活動串流,連線將會被關閉。如果有任何活動串流,則會啟動排空程序,並且在排空期間過後,連線將會被強制關閉。最大連線持續時間的預設值為 0 或無限,這表示連線永遠不會因為老化而關閉。當您執行一組 Envoy 邊緣代理並希望在一段時間後關閉下游連線以防止黏性時,這可能會很有幫助。這也有助於更好地在這一組之間進行整體流量的負載平衡,尤其是在這一組的大小動態變化的情況下。最後,當使用其解析位址可能會變更的 DNS 名稱時,即使上游保持健康,這也可能對上游連線有所幫助。在這種情況下,強制執行最大上游存留時間可防止在連線原本可能無法被偵測到之後,仍持有健康的連線。若要修改下游連線的最大連線持續時間,請使用 HTTP 連線管理器組態中的 common_http_protocol_options 欄位。若要修改上游連線的最大連線持續時間,請使用叢集組態中的 common_http_protocol_options 欄位。
請參閱下文以下以瞭解其他連線逾時。
串流逾時
串流逾時適用於 HTTP 連線所承載的個別串流。請注意,串流是 HTTP/2 和 HTTP/3 的概念,但是 Envoy 內部會將 HTTP/1 請求對應到串流,因此在此情境下,請求/串流可以互換使用。
HTTP 連線管理器 request_timeout 是連線管理器允許從用戶端接收整個請求串流的時間長度。
注意
此逾時預設不會強制執行,因為它與串流請求(永不結束的請求)不相容。請參閱後面的串流閒置逾時。但是,如果使用 緩衝篩選器,則建議設定此逾時。
HTTP 連線管理器 request_headers_timeout 會決定用戶端在請求串流上傳送僅標頭的時間長度,超過此時間長度則會取消該串流。這可以用來防止用戶端透過建立大量主要閒置的串流等待標頭來消耗過多記憶體。預設會停用請求標頭逾時。
HTTP 連線管理器 stream_idle_timeout 是連線管理器允許串流在沒有上游或下游活動的情況下存在的時間長度。預設的串流閒置逾時為5 分鐘。強烈建議所有請求(而不僅僅是串流請求/回應)都使用此逾時,因為它還可以防禦在整個回應緩衝以傳送到下游用戶端之後,未開啟串流視窗的對等端。
HTTP 協定 max_stream_duration 定義在 HTTP 連線管理器使用的通用訊息中。最大串流持續時間是串流存留時間跨度的最大時間。當您想要定期重設 HTTP 請求/回應串流時,可以使用此功能。您無法在這種情況下使用 request_timeout,因為如果在請求/回應串流上收到回應標頭,則會解除此計時器。此逾時可適用於上游和下游連線。
路由逾時
Envoy 支援路由層級的其他串流逾時,以及覆寫上面已介紹的一些串流逾時。
路由 timeout 是 Envoy 等待上游回應完整回應的時間長度。此逾時直到收到整個下游請求串流後才開始。
注意
此逾時預設為15 秒,但是它與串流回應(永不結束的回應)不相容,因此需要停用。對於串流 API,應使用串流閒置逾時,如此頁面其他地方所述。
路由 idle_timeout 允許覆寫 HTTP 連線管理器 stream_idle_timeout,並執行相同操作。
路由 per_try_timeout 可以在使用重試時進行設定,以便個別嘗試使用比上述整體請求逾時更短的逾時。此逾時僅適用於任何部分回應傳送到下游之前,而這通常發生在上游傳送回應標頭之後。此逾時可與串流端點搭配使用,以便在上游未在逾時時間內開始回應時進行重試。
可以設定路由 per_try_idle_timeout,以確保個別重試嘗試(包括第一次嘗試)的持續回應進度。當總上游請求時間受嘗試次數乘以每次嘗試逾時限制時,這會很有用,但同時使用者希望確保個別嘗試都在取得進展。
路由 MaxStreamDuration proto 可用於覆寫 HttpConnectionManager 的 max_stream_duration 設定,針對個別路由進行設定,並同時設定 grpc-timeout 標頭的限制和固定時間偏移。
縮放逾時
在 Envoy 處於高負載的情況下,Envoy 可以使用縮放逾時動態設定逾時。Envoy 通過 Overload Manager 支援縮放逾時,此管理器在 Envoy 啟動設定 中設定。使用 縮減逾時 過載動作,可以設定 Overload Manager 監控 資源 並相應地縮放逾時。例如,一個常見的用例可能是監控 Envoy 堆積大小,並將縮放的 TimerType 設定為 HTTP_DOWNSTREAM_CONNECTION_IDLE。一旦達到 scaling_threshold,過載管理器將縮減 閒置逾時,並且一旦達到 scaling_threshold,將逾時設定為 最小逾時。可以在過載管理器的 文件 中找到可以縮放的支援計時器完整清單。
TCP
叢集 connect_timeout 指定 Envoy 等待建立上游 TCP 連線的時間長度。如果未設定此值,將使用 5 秒的預設值。
注意
對於上游 TLS 連線,連線逾時包含 TLS 握手。對於下游連線,請參閱下方以取得設定選項。
TCP Proxy idle_timeout 是 TCP Proxy 允許連線在沒有上游或下游活動的情況下存在的時間長度。如果未另行指定,預設閒置逾時為 1 小時。
TCP 協定 idle_timeout 定義在 TcpProtocolOptions 中,供來自集區的所有 TCP 連線使用。閒置逾時是在連線未與下游連線關聯時終止上游連線的時間。預設值為 10 分鐘。若要停用閒置逾時,請明確將 idle_timeout 設定為 0。
傳輸 Socket
transport_socket_connect_timeout 指定 Envoy 等待下游用戶端完成傳輸層協商的時間長度。當在具有 TLS 或 ALTS 傳輸 Socket 的篩選器鏈上設定時,這會限制在建立 TCP 連線後完成加密握手所允許的時間。