您目前查看的是 Apigee 和 Apigee Hybrid 說明文件。
查看
Apigee Edge 說明文件。
TargetEndpoint 設定會定義 Apigee 連線至後端服務或 API 的方式。並傳送要求及接收後端服務的回應。後端服務可以是 HTTP/HTTPS 或 NodeJS 伺服器。
您可以使用下列任一方式,在 TargetEndpoint 中叫用後端服務:
- HTTP 或 HTTPS 伺服器的直接網址
- TargetServer 設定
同樣地,ServiceCallout 政策可用於從 API Proxy 流程呼叫任何外部服務。這項政策支援直接在政策中定義 HTTP/HTTPS 目標網址,或使用 TargetServer 設定。
TargetServer 設定
TargetServer 設定會將具體端點網址從 TargetEndpoint 設定或 Service 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 的可用性,並在已設定的後端伺服器執行個體之間進行容錯移轉。
以下是使用 TargetServer 的 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 設定中,將單一 TargetServer 的 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 建議您省略
<Port>底下的<TCPMonitor>子元素,除非該子元素與 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 一律會嘗試連線至每個要求的目標,且絕不會從輪替中移除目標伺服器。