網關路由模式

Azure 應用程式閘道

使用單一端點將要求路由傳送至多個服務或多個服務實例。 當您要:

  • 在單一端點上公開多個服務,並根據要求路由傳送至適當的服務
  • 針對負載平衡或可用性目的,在單一端點上公開相同服務的多個實例
  • 在單一端點上公開相同服務的不同版本,並跨不同版本路由傳送流量

內容和問題

當用戶端需要取用多個服務、多個服務實例或兩者的組合時,必須在新增或移除服務時更新用戶端。 請考慮下列情況。

  • 多個不同的服務 - 電子商務應用程式可能會提供服務,例如搜尋、評論、購物車、結帳和訂單歷程記錄。 每個服務都有客戶端必須與其互動的不同 API,客戶端必須知道每個端點才能連線到服務。 如果 API 變更,也必須更新用戶端。 如果您將服務重構為兩個或多個不同的服務,程式代碼必須同時變更服務與用戶端。
  • 相同服務的 多個實例 - 系統可能需要在相同或不同區域中執行相同服務的多個實例。 您可以針對負載平衡目的或符合可用性需求,執行多個實例。 每次實例向上或向下啟動以符合需求時,都必須更新用戶端。
  • 相同服務的 多個版本 - 作為部署策略的一部分,新版的服務可以與現有版本一起部署。 這稱為藍色綠色部署。 在這些案例中,每次路由傳送至新版本和現有端點的流量百分比變更時,都必須更新用戶端。

解決方案

將閘道放在一組應用程式、服務或部署前面。 使用應用層 7 路由將要求路由傳送至適當的實例。

使用此模式時,用戶端應用程式只需要知道單一端點,並與單一端點通訊。 下列說明閘道路由模式如何解決內容和問題一節中所述的三個案例。

多個不同的服務

位於搜尋服務、結帳服務、訂單歷程記錄服務、購物車服務和評論服務的網關圖表。

在此案例中,用戶端取用多個服務時,網關路由模式很有用。 如果服務已合併、分解或取代,用戶端不一定需要更新。 它可以繼續對網關提出要求,而且只會變更路由。

網關也可讓您從用戶端擷取後端服務,讓您在啟用閘道後方的後端服務變更時,讓用戶端呼叫保持簡單。 用戶端呼叫可以路由傳送至任何服務或服務來處理預期的客戶端行為,讓您在閘道後方新增、分割及重新組織服務,而不需要變更用戶端。

相同服務的多個實例

位於區域 1 中搜尋服務前方的閘道圖表,以及區域 2 中的搜尋服務。

彈性是雲端運算的關鍵。 服務可以加速,以滿足不斷增長的需求,或在需求不足以節省資金時減少。 註冊和取消註冊服務實例的複雜性會封裝在閘道中。 用戶端不知道服務數目增加或減少。

服務實例可以部署在單一或多個區域中。 Geode 模式詳細說明多區域主動-主動部署如何改善延遲並增加服務的可用性。

相同服務的多個版本

位於搜尋服務第 1 版和搜尋服務 1.1 版前方的閘道圖表。

此模式可用於部署,方法是讓您管理如何向使用者推出更新。 部署新版服務時,可以與現有版本平行部署。 路由可讓您控制向用戶端呈現的服務版本,讓您彈性地使用各種發行策略,無論是累加式、平行或完整的更新推出。 在部署新服務之後發現的任何問題,都可以在閘道進行設定變更來快速還原,而不會影響用戶端。

問題和考慮

  • 閘道服務可能會造成單一失敗點。 請確定其設計正確,以符合您的可用性需求。 請考慮實作中的復原能力和容錯功能。
  • 閘道服務可能會造成瓶頸。 請確定閘道有足夠的效能來處理負載,並可以輕鬆地根據您的成長預期進行調整。
  • 對閘道執行負載測試,以確保您不會為服務帶來串聯失敗。
  • 網關路由為層級 7。 它可以根據IP、埠、標頭或URL。
  • 閘道服務可以是全域或區域服務。 Azure Front Door 是全域閘道,Azure 應用程式閘道 是區域性閘道。 如果您的解決方案需要多區域部署服務,請使用全域閘道。 如果您有需要細微控制流量平衡方式的區域工作負載,請考慮使用 應用程式閘道。 例如,您想要平衡虛擬機之間的流量。
  • 閘道服務是其位於前面之服務的公用端點。 請考慮限制對後端服務的公用網路存取,方法是讓服務只能透過閘道或透過專用虛擬網路存取。

使用此模式的時機

當下列情況時,請使用此模式:

  • 用戶端需要取用多個可在閘道後方存取的服務。
  • 您想要使用單一端點來簡化用戶端應用程式。
  • 您必須將來自外部可尋址端點的要求路由傳送至內部虛擬端點,例如將 VM 上的埠公開至叢集虛擬 IP 位址。
  • 客戶端必須取用在多個區域中執行的服務,以取得延遲或可用性優點。
  • 用戶端需要取用一個可變數目的服務實例。
  • 您想要實作部署策略,讓客戶端同時存取多個版本的服務。

當您有只使用一或兩個服務的簡單應用程式時,此模式可能不適合。

工作負載設計

架構設計人員應該評估閘道路由模式在工作負載的設計中如何使用,以解決 Azure 架構良好架構支柱涵蓋的目標和原則。 例如:

要素 此模式如何支援支柱目標
可靠性設計決策可協助工作負載復原到故障,並確保它會在發生失敗后復原到完全正常運作的狀態。 網關路由可讓您將流量路由至系統中只有狀況良好的節點。

- RE:05 備援
- RE:10 健康情況監視
營運卓越可透過標準化的流程和小組凝聚力,協助提供工作負載品質 網關路由可讓您將要求與後端分離,進而讓您的後端支援進階部署模型、平台轉換,以及傳輸中域名解析和加密的單一管理點。

- OE:04 工具和程式
- OE:11 保管庫 部署做法
效能效率 可透過調整、數據、程式代碼的優化,有效率地協助您的工作負載 符合需求 網關路由可讓您將流量分散到系統中的節點,以平衡負載。

- PE:05 調整和分割

如同任何設計決策,請考慮對其他可能以此模式導入之目標的任何取捨。

範例

使用 Nginx 作為路由器,以下是伺服器簡單的範例組態檔,會將位於不同虛擬目錄的應用程式要求路由傳送至後端的不同機器。

server {
    listen 80;
    server_name domain.com;

    location /app1 {
        proxy_pass http://10.0.3.10:80;
    }

    location /app2 {
        proxy_pass http://10.0.3.20:80;
    }

    location /app3 {
        proxy_pass http://10.0.3.30:80;
    }
}

下列 Azure 服務可用來實作閘道路由模式: