反模式:停用 HTTP 永久 (可重複使用的保持運作) 連線

您目前查看的是 ApigeeApigee Hybrid 說明文件。
查看 Apigee Edge 說明文件。

API Proxy 是用戶端應用程式用來連線至後端服務的介面。Apigee 提供多種方式,透過 API Proxy 連線至後端服務:

永久連線

HTTP 永久連線 (也稱為 HTTP 保持運作或 HTTP 連線重複使用) 的概念是允許單一 TCP 連線傳送及接收多個 HTTP 要求/回應,而不是為每個要求/回應配對開啟新連線。

Apigee 會使用持續性連線與後端服務通訊。根據預設,連線會維持 60 秒。也就是說,如果連線在連線集區中閒置超過 60 秒,就會關閉。

您可以在 API Proxy 的 TargetEndpoint 設定中,指定名為 keepalive.timeout.millis 的屬性,設定連線存留逾時期間。舉例來說,您可以為 TargetEndpoint 中的特定後端服務,將連線存留時間設為 30 秒。

在下方範例中,TargetEndpoint 設定中的 keepalive.timeout.millis 設為 30 秒:

<!-- /antipatterns/examples/disable-persistent-connections-1.xml -->
<TargetEndpoint name="default">
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <Properties>
      <Property name="keepalive.timeout.millis">30000</Property>
    </Properties>
  </HTTPTargetConnection>Disable HTTP persistent (Reusable keep-alive) connections
</TargetEndpoint>

在上述範例中,keepalive.timeout.millis 會控管 API Proxy 中特定後端服務的連線存留行為。此外,還有一個屬性可控制所有 Proxy 中所有後端服務的保持連線行為。HTTPTransport.keepalive.timeout.millis 可在 Message Processor 元件中設定。這項屬性的預設值也是 60 秒。修改這項屬性會影響 Apigee 與所有 API Proxy 中所有後端服務之間的連線存留行為。

反模式

不建議在特定 API Proxy 的 TargetEndpoint 設定中將 keepalive.timeout.millis 屬性設為 0,或在訊息處理器上將 HTTPTransport.keepalive.timeout.millis 設為 0,藉此停用持續性 (保持運作) 連線,因為這會影響效能。

在下列範例中,TargetEndpoint 設定會將 keepalive.timeout.millis 設為 0,針對特定後端服務停用持續性 (保持連線) 連線:

<!-- /antipatterns/examples/disable-persistent-connections-2.xml -->
<TargetEndpoint name="default">
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <Properties>
      <Property name="keepalive.timeout.millis">0</Property>
     </Properties>
  </HTTPTargetConnection>
</TargetEndpoint>

如果一或多個後端服務停用保持連線,Apigee 必須為每個傳送至目標後端服務的新要求開啟新連線。如果後端是 HTTPS,Apigee 也會為每個新要求執行 SSL 握手,進而增加 API 要求的整體延遲時間。

影響

  • 由於 Apigee 必須為每個新要求開啟新連線並執行 SSL 交握,因此會增加 API 要求的整體回應時間。
  • 在高流量情況下,連線可能會耗盡,因為將連線釋放回系統需要一些時間。

最佳做法

  • 後端服務應根據 HTTP 1.1 標準,遵守及處理 HTTP 持續性連線。
  • 如果後端服務可以處理持續性 (保持連線) 連線,就應回應 Connection:keep-alive 標頭。
  • 如果後端服務無法處理持續性連線,應以 Connection:close 標頭回應。

實作這個模式可確保 Apigee 能自動處理與後端服務的持續性或非持續性連線,不必變更 API Proxy。

延伸閱讀