您正在查看 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 秒,就會關閉連線。
您可以透過名為 keepalive.timeout.millis
的屬性設定保留連線逾時期限,該屬性會在 API Proxy 的 TargetEndpoint 設定中指定。舉例來說,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
可在訊息處理器元件中設定。此屬性的預設值也是 60 秒。對此屬性進行任何修改,都會影響 Apigee 與所有 API 代理程式中所有後端服務之間的保活連線行為。
反模式
在特定 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。