您目前查看的是 Apigee 和 Apigee Hybrid 說明文件。
查看
Apigee Edge 說明文件。
API Proxy 是用戶端應用程式用來連線至後端服務的介面。Apigee 提供多種方式,透過 API Proxy 連線至後端服務:
- TargetEndpoint 可連線至任何 HTTP/HTTPs、NodeJS 或代管目標服務。
- ServiceCallout 政策,可在叫用目標伺服器之前或之後,在 TargetEndpoint 中叫用任何外部服務。
- 新增至 JavaScript 政策或 JavaCallout 政策的自訂程式碼,用於連線至後端服務。
永久連線
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。