您正在查看 Apigee 和 Apigee Hybrid 說明文件。
查看
Apigee Edge 說明文件。
TargetEndpoint 設定會定義 Apigee 連線至後端服務或 API 的方式。它會傳送要求,並接收來自/傳送至後端服務的回應。後端服務可以是 HTTP/HTTPS 或 NodeJS 伺服器。
您可以透過下列任一方式叫用 TargetEndpoint 中的後端服務:
- 直接網址至 HTTP 或 HTTPS 伺服器
- TargetServer 設定
同樣地,ServiceCallout 政策可用於透過 API Proxy 流程呼叫任何外部服務。這項政策支援在政策本身中直接定義 HTTP/HTTPS 目標網址,或使用 TargetServer 設定。
TargetServer 設定
TargetServer 設定會將具體端點網址與 TargetEndpoint 設定或服務 Callout 政策分開。系統會使用名稱參照 TargetServer,而不是 TargetEndpoint 中的網址。TargetServer 設定會包含後端服務的主機名稱、通訊埠號碼和其他詳細資料。
以下是 TargetServer 設定範例:
<TargetServer name="target1"> <Host>www.mybackendservice.com</Host> <Port>80</Port> <IsEnabled>true</IsEnabled> </TargetServer>
您可以使用 TargetServer 為各個環境設定不同的設定。您可以使用 LoadBalancer 搭配一或多個命名的 TargetServer,設定 TargetEndpoint/Service Callout 政策。內建的負載平衡功能可提升 API 的可用性,並在已設定的後端伺服器執行個體之間進行容錯移轉。
以下是使用 TargetServers 的 TargetEndpoint 設定範例:
<TargetEndpoint name="default"> <HTTPTargetConnection>> <LoadBalancer> <Server name="target1"/> <Server name="target2"/> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
MaxFailures
MaxFailures
設定會指定對目標伺服器的最大要求失敗次數,超過這個數量後,系統會將目標伺服器標示為關閉,並從所有後續要求的輪替中移除。
指定 MaxFailures
的設定範例:
<TargetEndpoint name="default"> <HTTPTargetConnection> <LoadBalancer> <Server name="target1"/> <Server name="target2"/> <MaxFailures>5</MaxFailures> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
在上述範例中,如果「target1」連續五次要求失敗,系統就會將「target1」從輪替中移除,所有後續要求都只會傳送至「target2」。
反模式
我們不建議在 TargetEndpoint 或服務快訊政策的 LoadBalancer
設定中,將 MaxFailures
設為非零值,因為這可能會造成不良影響。
請參考以下範例設定,其中包含名為「target1」的單一 TargetServer,且 MaxFailures
設為 5 (非零值):
<TargetEndpoint name="default"> <HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="target1" /> <MaxFailures>5</MaxFailures> </LoadBalancer> </HTTPTargetConnection>
如果對 TargetServer「target1」的要求失敗五次 (MaxFailures
中指定的次數),TargetServer 就會從輪替中移除。由於沒有其他可備援的 TargetServer,因此所有後續對此設定的 API Proxy 要求都會失敗,並顯示 503 Service Unavailable
錯誤。
即使 TargetServer「target1」已恢復正常狀態,且能夠傳送成功的回應,對 API Proxy 提出的要求仍會繼續傳回 503 錯誤。這是因為即使目標已重新啟動,Apigee 也不會自動將 TargetServer 重新納入輪替。如要解決這個問題,請重新部署 API Proxy,讓 Apigee 將 TargetServer 重新納入輪替。
如果在服務快訊政策中使用相同的設定,則在對 TargetServer「target1」提出要求失敗 5 次後,API 要求會收到 500 錯誤。
影響
在 TargetEndpoint 或服務快訊政策的 LoadBalancer
設定中使用單一 TargetServer,並將 MaxFailures
設為非零值,會導致:
- API 要求會持續失敗,並顯示 503/500 錯誤 (要求失敗次數達到 MaxFailures 後),直到重新部署 API Proxy 為止。
- 停機時間較長,因為這項問題較為棘手,且需要較長時間才能診斷問題原因 (如果沒有事先瞭解這個反模式)。
最佳做法
LoadBalancer
設定中應包含多個 TargetServer,以提高可用性。當
MaxFailures
設為非零值時,一律定義健康監控器。當失敗次數達到MaxFailures
中指定的次數時,系統就會從輪替中移除目標伺服器。有了 HealthMonitor,系統就能確保在目標伺服器重新上線後,TargetServer 會立即重新加入輪替,也就是說,您不需要重新部署 Proxy。為確保健康狀態檢查會在 Apigee 用於連線至目標伺服器的相同通訊埠上執行,Apigee 建議您省略
<TCPMonitor>
底下的<Port>
子元素,除非該元素與 TargetServer 通訊埠不同。根據預設,<Port>
與 TargetServer 通訊埠相同。HealthMonitor 設定範例:
<TargetEndpoint name="default"> <HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="target1" /> <Server name="target2" /> <MaxFailures>5</MaxFailures> </LoadBalancer> <Path>/test</Path> <HealthMonitor> <IsEnabled>true</IsEnabled> <IntervalInSec>5</IntervalInSec> <TCPMonitor> <ConnectTimeoutInSec>10</ConnectTimeoutInSec> </TCPMonitor> </HealthMonitor> </HTTPTargetConnection> </TargetEndpoint>
如果有某些限制,例如只有一個 TargetServer,且未使用 HealthMonitor,請勿在
LoadBalancer
設定中指定MaxFailures
。MaxFailures 的預設值為 0。這表示 Apigee 會一律嘗試連線至每個要求的目標,且絕不會從輪替中移除目標伺服器。