App Mesh 最佳實務 - AWS 應用程式網格

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

App Mesh 最佳實務

重要

支援終止通知:2026 年 9 月 30 日, AWS 將停止對 的支援 AWS App Mesh。2026 年 9 月 30 日後,您將無法再存取 AWS App Mesh 主控台或 AWS App Mesh 資源。如需詳細資訊,請造訪此部落格文章,從 遷移 AWS App Mesh 至 Amazon ECS Service Connect

為了在計劃部署期間和意外遺失某些主機期間實現零失敗請求的目標,本主題中的最佳實務會實作下列策略:

若要大幅減少或消除故障,建議您在下列所有實務中實作建議。

使用重試來測試所有路由

將所有虛擬服務設定為使用虛擬路由器,並為所有路由設定預設重試政策。這將透過重新選取主機並傳送新請求來緩解失敗的請求。對於重試政策,我們建議 的值至少為 2maxRetries,並為每個支援重試事件類型的路由類型中的每種重試事件類型指定下列選項:

  • TCPconnection-error

  • HTTP 和 HTTP/2stream-errorgateway-error

  • gRPCcancelledunavailable

由於其他重試事件可能不安全,因此需要 case-by-case考慮這些重試事件,例如,如果請求不理想。您將需要考慮和測試 maxRetries和 的值perRetryTimeout,以適當權衡請求 (maxRetries * perRetryTimeout) 的最大延遲與更多重試增加的成功率。此外,當 Envoy 嘗試連線到不再存在的端點時,您應該預期該請求會消耗完整的 perRetryTimeout。若要設定重試政策,請參閱 建立路由,然後選擇您要路由的通訊協定。

注意

如果您在 2020 年 7 月 29 日或之後實作路由,且未指定重試政策,則 App Mesh 可能已針對您在 2020 年 7 月 29 日或之後建立的每個路由,自動建立與先前政策類似的預設重試政策。如需詳細資訊,請參閱預設路由重試政策

調整部署速度

使用滾動部署時,請降低整體部署速度。根據預設,Amazon 會ECS設定至少 100% 運作狀態良好的任務和 200% 總任務的部署策略。在部署時,這會導致兩點高偏離:

  • 在準備完成請求之前,Envoys 可能會看到新任務的 100% 機群大小 (請參閱 實作容器運作狀態檢查 了解緩解措施)。

  • 在任務終止時,Envoys 可能會看到舊任務的 100% 機群大小。

設定這些部署限制時,容器協調程式可能會進入一個狀態,在此狀態中,容器協調程式會同時隱藏所有舊目的地,並顯示所有新目的地。由於您的 Envoy 資料平面最終一致,這可能會導致資料平面中可見的一組目的地與協調者的觀點分歧。若要緩解這種情況,我們建議維持至少 100% 運作狀態良好的任務,但將任務總數降低到 125%。這將減少分歧並改善重試的可靠性。對於不同的容器執行期,我們建議執行下列設定:

Amazon ECS

如果您的服務具有所需的 2 或 3 個計數,請將 maximumPercent設為 150%。否則,將 maximumPercent設為 125%。

Kubernetes

將部署的 設定為 maxUnavailable 0% update strategymaxSurge 25%。如需部署的詳細資訊,請參閱 Kubernetes 部署文件。

在縮減之前橫向擴展

橫向擴展和橫向擴展都可能導致重試中失敗請求的一些可能性。雖然有些任務建議可以減少橫向擴展,但橫向擴展的唯一建議是將任務中的橫向擴展百分比降至最低。我們建議您在擴展舊ECS任務或部署之前,使用擴展新 Amazon 任務或 Kubernetes 部署的部署策略。此擴展策略可降低任務或部署中的擴展百分比,同時維持相同的速度。此做法同時適用於 Amazon ECS任務和 Kubernetes 部署。

實作容器運作狀態檢查

在擴展案例中,Amazon ECS任務中的容器可能會失序出現,並且最初可能沒有回應。對於不同的容器執行期,我們建議下列建議:

Amazon ECS

為了緩解這種情況,我們建議您使用容器運作狀態檢查和容器相依性排序,以確保 Envoy 在需要開始傳出網路連線的任何容器之前執行正常。若要在任務定義中正確設定應用程式容器和 Envoy 容器,請參閱容器相依性

Kubernetes

無,因為在 Kubernetes 的 App Mesh 控制器中註冊和取消註冊 AWS Cloud Map 執行個體時,不會考慮 Kubernetes 的真實性和整備性探查。 https://github.com/aws/aws-app-mesh-controller-for-k8s如需詳細資訊,請參閱 第 132 GitHub 期。

最佳化DNS解析度

如果您使用 DNS 進行服務探索,則必須選擇適當的 IP 通訊協定,以在設定網格時最佳化DNS解析度。App Mesh 同時支援 IPv4IPv6,您的選擇可能會影響服務的效能和相容性。如果您的基礎設施不支援 IPv6,我們建議您指定與基礎設施相符的 IP 設定,而不是依賴預設IPv6_PREFERRED行為。預設IPv6_PREFERRED行為可能會降低服務效能。

  • IPv6_PREFERRED – 這是預設設定。Envoy 會先執行IPv6地址DNS查詢,IPv4如果找不到IPv6地址,則會回到 。如果您的基礎設施主要支援 IPv6,但需要IPv4相容性,這會很有幫助。

  • IPv4_PREFERRED – 如果沒有可用的IPv4地址IPv6,Envoy 會先查詢IPv4地址,然後回到 。如果您的基礎設施主要支援 IPv4,但有一些IPv6相容性,請使用此設定。

  • IPv6_ONLY – 如果您的服務僅支援IPv6流量,請選擇此選項。Envoy 只會執行IPv6地址DNS查詢,確保所有流量都透過 路由IPv6

  • IPv4_ONLY – 如果您的服務僅支援IPv4流量,請選擇此設定。Envoy 只會執行IPv4地址DNS查詢,確保所有流量都透過 路由IPv4

您可以在網格層級和虛擬節點層級設定 IP 版本偏好設定,其中虛擬節點設定會覆寫網格層級的 IP 版本偏好設定。

如需詳細資訊,請參閱 Service MeshesVirtual Nodes。