您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
API Proxy 是用戶端應用程式用來連線至後端服務的介面。Apigee Edge 提供多種透過 API Proxy 連線至後端服務的方式:
- TargetEndpoint 連線至任何 HTTP/HTTP、NodeJS 或代管目標服務。
- Service Call 政策可在 TargetEndpoint 中叫用所有外部服務,在叫用前或之後叫用目標伺服器。
- 加進 JavaScript 政策或 Java callout 政策的自訂程式碼,可連結至後端服務。
永久連線
HTTP 永久連線 (又稱為 HTTP 保持運作或重複使用 HTTP 連線) 是一種概念,可讓單一 TCP 連線傳送及接收多個 HTTP 要求/回應,而不必針對每個要求/回應組合開啟新連線。
Apigee Edge 會使用永久連線來與後端服務進行通訊。根據預設,連線的持續時間為 60 秒。也就是說,如果在連線集區中閒置超過 60 秒,連線就會關閉。
您可以透過 API Proxy 的 TargetEndpoint 設定中指定的 keepalive.timeout.millis
屬性,設定保持運作逾時期間。舉例來說,在 TargetEndpoint 中,可將特定後端服務的保持運作時間範圍設為 30 秒。
以下範例在目標端點設定中將 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 Edge 和所有 API Proxy 中所有後端服務之間的保持運作連線行為。
反模式
如要停用永久 (保持運作) 連線,您可以在特定 API Proxy 的目標端點設定中將 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>
如果已停用一或多項後端服務的保持運作連線,Edge 就必須針對傳送至目標後端服務的每個新要求開啟新連線。如果後端是 HTTPS,Edge 也會針對每項新要求執行 SSL 握手,並將 API 要求的整體延遲時間增加。
影響程度
- 提高 API 要求的整體回應時間,因為 Apigee Edge 必須開啟新連線,並為每個新要求執行 SSL 握手。
- 系統需要一些時間將連線釋放回系統,因此連線在高流量情況下可能會耗盡。
最佳做法
- 後端服務應依據 HTTP 1.1 標準支援並處理 HTTP 永久連線。
- 如果後端服務能夠處理永久 (保持運作) 連線,則應以
Connection:keep-alive
標頭回應。 - 如果後端服務無法處理永久連線,則應以
Connection:close
標頭回應。
採用這個模式可確保 Apigee Edge 會自動處理與後端服務的永久或非永久連線,而不需要變更 API Proxy。