內部應用程式負載平衡器的流量管理總覽

區域內部應用程式負載平衡器和跨區域內部應用程式負載平衡器支援下列進階流量管理功能:
  • 流量導向。根據 HTTP(S) 參數 (例如主機、路徑、標頭和其他要求參數),智慧地將流量轉送至適當位置。
  • 流量動作。執行以要求和回應為基礎的動作 (例如重新導向和標頭轉換)。
  • 流量政策。微調負載平衡行為 (例如進階負載平衡演算法)。

您可以使用網址對應和後端服務來設定這些功能。如需詳細資訊,請參閱下列主題:

應用實例範例

流量管理可解決許多用途。本節提供一些高層級範例。

流量導引:以標頭為依據的轉送

流量導引可根據 HTTP 參數 (例如要求標頭),將流量導向服務執行個體。舉例來說,如果使用者的裝置是行動裝置,且要求標頭中含有 user-agent:Mobile,流量導向功能就會將該流量傳送至指定用於處理行動流量的服務例項,並將沒有 user-agent:Mobile 的流量傳送至指定用於處理其他裝置流量的例項。

Cloud Load Balancing 流量導引。
圖 1. Cloud Load Balancing 流量導引 (按一下可放大)。

流量操作:以權重為準的流量拆分

部署現有正式版服務的新版本通常會帶來一些風險。即使測試在測試環境中通過,您可能也不想讓 100% 的使用者立即使用新版本。您可以使用流量管理功能,在多個後端服務中定義以百分比為準的流量拆分。

舉例來說,您可以將 95% 的流量傳送至舊版服務,並將 5% 的流量傳送至新版服務。確認新版正式版運作正常後,您可以逐漸調整百分比,直到 100% 的流量都轉送至新版服務。流量拆分通常用於部署新版本、A/B 測試、服務遷移和類似程序。

Cloud Load Balancing 流量拆分。
圖 2. Cloud Load Balancing 流量拆分 (按一下可放大)。

流量政策:要求鏡像

貴機構可能有特定法規遵循要求,規定所有流量都必須鏡像至其他服務,例如,可將要求詳細資料記錄在資料庫中,以便日後重播。

使用 Service Extensions 擴充功能擴充應用程式

整合 Service Extensions 後,您就能在支援的應用程式負載平衡器的負載平衡資料路徑中插入自訂邏輯。

詳情請參閱「服務擴充功能總覽」。

流量管理元件

從高層面來說,負載平衡器會利用地區網址對應地區後端服務資源,提供流量管理功能。

對於跨區域內部應用程式負載平衡器,流量管理會使用全域網址對應全域後端服務資源。

您可以使用網址對應設定流量轉送和流量動作。與網址對應相關聯的Google Cloud 資源包括:

  • 轉送規則
  • 規則比對
  • 規則動作

您可以使用後端服務設定流量政策。Google Cloud 與後端服務相關聯的資源包括:

  • 斷路器
  • 地區負載平衡器政策
  • 一致性雜湊負載平衡器設定
  • 離群值偵測

下圖顯示用於實作各項功能的資源。

Cloud Load Balancing 資料模型。
圖 3. Cloud Load Balancing 資料模型 (點選即可放大)。

將要求轉送至後端

在區域內部應用程式負載平衡器中,系統會使用兩階段方法決定流量的後端:

  • 負載平衡器會選取具有後端的後端服務。後端可以是未管理執行個體群組中的 Compute Engine 虛擬機器 (VM) 執行個體、代管執行個體群組 (MIG) 中的 Compute Engine VM,或是透過網路端點群組 (NEG) 中的 Google Kubernetes Engine (GKE) 節點建立的容器。負載平衡器會根據地區網址對應中定義的規則,選擇後端服務。
  • 後端服務會根據區域後端服務中定義的政策,選取後端執行個體。

設定路由時,您可以選擇下列模式:

  • 簡易型主機與路徑規則
  • 進階主機、路徑和轉送規則

這兩種模式互斥。每個網址對應只能包含其中一種模式。

簡易型主機與路徑規則

在簡易型主機和路徑規則中,網址對應的運作方式如網址對應總覽所述。

下圖顯示簡易主機和路徑規則的邏輯流程。

包含簡易主機和路徑規則的網址對應流程。
圖 4. 包含簡易主機和路徑規則的網址對應流程 (點選即可放大)。

系統一開始會使用主機規則評估要求。主機是要求指定的網域。如果要求 hosthosts 欄位中的其中一個項目相符,系統就會使用相關聯的路徑比對器。

接著,系統會評估路徑比對器。路徑規則會依據「優先比對最長路徑」原則來進行評估,而這類規則可採任意順序指定。找到最具體的相符項目後,系統會將要求轉送至對應的後端服務。如果要求不相符,系統會使用預設的後端服務。

一般簡易主機與路徑規則可能如下所示,其中影片流量會導向 video-backend-service,所有其他流量則會導向 web-backend-service

gcloud compute url-maps describe lb-map
defaultService: regions/us-west1/backendServices/web-backend-service
hostRules:
- hosts:
  - '*'
  pathMatcher: pathmap
name: lb-map
pathMatchers:
- defaultService: regions/us-west1/backendServices/web-backend-service
  name: pathmap
  pathRules:
  - paths:
    - /video
    - /video/*
    service: regions/us-west1/backendServices/video-backend-service
region: regions/us-west1

進階主機、路徑和轉送規則

進階主機、路徑和轉送規則提供比簡易主機和路徑規則更多的設定選項。這些選項可啟用更進階的流量管理模式,並修改部分語義。舉例來說,轉送規則具有相關聯的優先順序值,且會依優先順序解讀 (而非使用最長路徑比對先的語義)。

如同前述簡易型主機與路徑規則範例,您可以使用網址對應設定進階流量管理。舉例來說,下列網址對應會設定轉送路徑,其中 95% 的流量會轉送至一個後端服務,而 5% 的流量會轉送至另一個後端服務。

gcloud compute url-maps describe lb-map
defaultService: regions/us-west1/backendServices/service-a
hostRules:
- hosts:
  - '*'
  pathMatcher: matcher1
name: lb-map
pathMatchers:
- defaultService: regions/us-west1/backendServices/service-a
  name: matcher1
  routeRules:
  - matchRules:
    - prefixMatch: ''
    routeAction:
      weightedBackendServices:
      - backendService: regions/us-west1/backendServices/service-a
        weight: 95
      - backendService: regions/us-west1/backendServices/service-b
        weight: 5
region: regions/us-west1

主機規則

當要求到達負載平衡器時,系統會根據網址對應中定義的 hostRules 評估要求的 host 欄位。每個主機規則都包含一或多個主機清單和單一路徑比對器 (pathMatcher)。如果未定義 hostRules,要求會轉送至 defaultService

詳情請參閱 區域網址對應 API 說明文件中的 hostRules[]defaultService

路徑比對器

要求與主機規則相符後,負載平衡器會評估與主機相對應的路徑比對器。

路徑比對器由下列項目組成:

  • 一或多個路徑規則 (pathRules) 轉送規則 (routeRules)。
  • 預設服務 (defaultService),這是在沒有其他相符的後端服務時使用的預設後端服務。
如需更多資訊,請參閱地區網址對應 API 說明文件中的 pathMatchers[]pathMatchers[].pathRules[]pathMatchers[].routeRules[]

路徑規則

路徑規則 (pathRules) 會指定一或多個網址路徑,例如 //video。路徑規則通常適用於前述的簡易主機和路徑型導向。

詳情請參閱區域網址對應 API 說明文件中的 pathRules[]

轉送規則

轉送規則 (routeRules) 會比對傳入要求中的資訊,並根據比對結果做出轉送決策。

轉送規則可包含各種不同的比對規則 (matchRules) 和各種不同的轉送動作 (routeAction)。

比對規則會根據 HTTP(S) 要求的路徑、標頭和查詢參數,評估傳入的要求。比對規則支援各種比對類型 (例如前置字串比對) 和修飾符 (例如大小寫不敏感)。舉例來說,您可以根據自訂定義的 HTTP 標頭,將 HTTP(S) 要求傳送至一組後端。

注意:比對選項和語義會因您比對的要求部分而有所不同。詳情請參閱區域網址對應 API 說明文件中的 matchRules[]

如果您有多個轉送規則,負載平衡器會依優先順序 (根據 priority 欄位) 執行這些規則,讓您指定用於比對、轉送和其他動作的自訂邏輯。

在特定轉送規則中,找到第一個相符項目時,負載平衡器就會停止評估比對規則,並忽略所有剩餘比對規則。

Google Cloud 會執行下列動作:

  1. 尋找與要求相符的第一個比對規則。
  2. 停止查看任何其他比對規則。
  3. 套用對應路徑動作中的動作。

轉送規則包含多個元件,詳情請參閱下表。

路由規則元件 (API field name) 說明
優先順序 (priority) 從 0 到 2,147,483,647 (即 (2^31)-1) 的數字,會指派給特定路徑比對器中的轉送規則。

優先順序會決定轉送規則的評估順序。規則的優先順序會隨著編號增加而降低,因此優先順序為 4 的規則會在優先順序為 25 的規則前評估。系統會套用符合要求的第一個規則。

優先順序號碼之間可以有空格。您無法建立多個優先順序相同的規則。
說明 (description) 選用說明,最多 1,024 個半形字元。
服務 (service) 如果系統比對到這個規則,則會將流量導向的後端服務資源的完整或部分網址。
比對規則 (matchRules) 系統會根據要求評估一或多項規則。這些 matchRules 可比對所有要求的 HTTP 屬性或屬性子集,例如路徑、HTTP 標頭和查詢 (GET) 參數。

matchRule 中,必須符合所有比對條件,routeRulerouteActions 才會生效。如果 routeRule 有多個 matchRules,則當要求與 routeRule 的任一 matchRules 相符時,routeRulerouteActions 就會生效。
路由動作 (routeAction) 可讓您指定符合比對規則條件時要採取的動作。這些動作包括流量拆分、網址重寫、重試和鏡射、錯誤植入和 CORS 政策。
重新導向動作 (urlRedirect) 您可以設定動作,在符合比對規則條件時以 HTTP 重新導向回應。這個欄位無法與路徑動作搭配使用。
標頭動作 (headerAction) 您可以設定符合 matchRules 中條件時要求和回應標頭的轉換規則。
詳情請參閱地區網址對應 API 說明文件中的下列欄位:
  • routeRules[]
  • routeRules[].priority
  • routeRules[].description
  • routeRules[].service
  • routeRules[].matchRules[]
  • routeRules[].routeAction
  • routeRules[].urlRedirect
  • routeRules[].headerAction

比對規則

比對規則 (matchRules) 會比對要求的一或多項屬性,並採取轉送規則中指定的動作。以下清單列出可使用比對規則比對的要求屬性範例:

  • 主機:主機名稱是網址的網域名稱部分;例如,網址 http://example.net/video/hd 的主機名稱部分為 example.net。在要求中,主機名稱則以 Host 標頭表示,如下列 curl 指令範例所示,其中 10.1.2.9 是負載平衡 IP 位址:

    curl -v http://10.1.2.9/video/hd --header 'Host: example.com'
    
  • 主機名稱後面即為路徑;例如 /images。此規則可以指定要比對整個路徑,還是僅比對路徑的前置部分。

  • 可進行 Cookie 比對以及根據查詢參數 (GET 變數) 進行比對的 HTTP 標頭等其他 HTTP 要求參數。

如需支援的對照規則完整清單,請參閱 區域網址對照 API 說明文件中的 pathMatchers[].routeRules[].matchRules[]

路徑動作

轉送動作是指轉送規則與要求屬性相符時,要採取的特定動作。

路由動作 (API field name) 說明
重新導向 (urlRedirect) 傳回可設定的 3xx 回應碼。此外,它也會使用適當的 URI 來設定 Location 回應標頭,以取代重新導向動作中所指定的主機和路徑。
網址重寫 (urlRewrite) 在傳送要求至所選後端服務之前,重新編寫網址的主機名稱部分、網址的路徑部分或兩者均重新編寫。
標頭轉換 (headerAction) 在傳送要求至後端服務之前,新增或移除要求標頭。從後端服務收到回應後,這項設定也可以新增或刪除回應標頭。
流量鏡像 (requestMirrorPolicy)

除了將要求轉送到所選的後端服務外,也會以射後不理的模式將完全相同的要求傳送至設定的鏡射後端服務。負載平衡器不會等待從後端傳送鏡像要求的回應。

鏡像非常適合用來測試新版本的後端服務。您也可以使用這項功能,針對後端服務的偵錯版本 (而不是正式版本) 偵錯實際工作環境的錯誤。

使用流量鏡像時,請注意下列限制:

  • 如果兩個後端服務都具有代管執行個體群組、區域性 NEG 或混合型 NEG 後端,就支援流量鏡射功能。不支援網際網路 NEG、無伺服器 NEG 和 Private Service Connect 後端。
  • 對鏡像後端服務的請求不會為 Cloud Logging 和 Cloud Monitoring 產生任何記錄或指標。
加權流量拆分 (weightedBackendServices) 可將相符規則的流量分配給多個後端服務,並與指派給個別後端服務的使用者定義權重成正比。

這項功能對於設定分階段部署或 A/B 測試非常實用。舉例來說,轉送動作可以設定為將 99% 的流量傳送到執行穩定版應用程式的服務,而將 1% 的流量傳送到執行較新版應用程式的不同服務。
重試 (retryPolicy)

設定負載平衡器重試失敗要求的條件、負載平衡器在重試前等待的時間,以及允許的重試次數上限。

逾時 (timeout) 指定所選路徑的逾時時間。系統會從要求完成處理的時間開始計算逾時時間,直到回應完成處理為止。逾時時間包括所有重試時間。
錯誤植入 (faultInjectionPolicy) 處理模擬故障的要求時,會引入高延遲、服務超載、服務故障和網路分區等錯誤。這項功能可用於測試服務對模擬故障的彈性。
延遲注入 (faultInjectionPolicy) 在將要求傳送至所選後端服務之前,針對使用者定義的部分要求引入延遲。
中止插入 (faultInjectionPolicy) 直接使用使用者定義的 HTTP 狀態碼回應部分要求,而不是將這些要求轉送至後端服務。
安全性政策 (corsPolicy) 跨源資源共享 (CORS) 政策會處理用於強制執行 CORS 要求的設定。

您可以指定下列其中一個路徑動作:

  • 將流量轉送至單一服務 (service)。
  • 將流量拆分至多項服務 (weightedBackendServices weight:x,其中 x 必須介於 0 到 1000 之間)。
  • 重新導向網址 (urlRedirect)。

此外,您可以將上述路徑動作與下列一或多個路徑動作結合:

  • 鏡像流量 (requestMirrorPolicy)。
  • 重寫網址主機和路徑 (urlRewrite)。
  • 重試失敗的要求 (retryPolicy)。
  • 設定逾時時間 (timeout)。
  • 對流量的百分比導入錯誤 (faultInjectionPolicy)。
  • 新增 CORS 政策 (corsPolicy)。
  • 操控要求或回應標頭 (headerAction)。
如要進一步瞭解路徑動作的設定和語意,請參閱 區域網址對應 API 說明文件中的以下內容:
  • urlRedirect
  • urlRewrite
  • headerAction
  • requestMirrorPolicy
  • weightedBackendServices
  • retryPolicy
  • timeout
  • faultInjectionPolicy
  • corsPolicy

HTTP 至 HTTPS 的重新導向

如果您需要將 HTTP 流量重新導向至 HTTPS,可以建立兩個包含共用 IP 位址的轉送規則。

如果兩個轉送規則要共用一個內部 IP 位址,您必須保留 IP 位址並加入 --purpose=SHARED_LOADBALANCER_VIP 標記:

gcloud compute addresses create NAME \
    --region=us-west1 \
    --subnet=backend-subnet \
    --purpose=SHARED_LOADBALANCER_VIP

如需完整範例,請參閱「為內部應用程式負載平衡器設定 HTTP 至 HTTPS 的重新導向」一文。

流量政策

您可以使用後端服務資源設定流量政策,在執行個體群組或網路端點群組 (NEG) 中微調負載平衡。只有在使用網址對應 (如前所述) 選取後端服務後,這些政策才會生效。

您可以使用流量政策執行下列操作:

  • 控制後端服務內執行個體之間的負載平衡演算法。
  • 控制上游服務的連線量。
  • 控管是否將健康狀態不良的主機從後端服務中移除。
下列流量政策功能是在區域後端服務中設定。
流量政策 (API field name) 說明
負載平衡地區政策 (LocalityLbPolicy)

對於後端服務,流量分配會根據「負載平衡模式」和「負載平衡地區政策」進行。

平衡模式會決定應將流量的權重/分數傳送至每個後端 (執行個體群組或 GCE_VM_IP_PORT NEG)。負載平衡政策 (LocalityLbPolicy) 會決定群組內或區域內的後端負載平衡方式。後端服務收到流量時,會根據後端的平衡模式,將流量導向後端 (執行個體群組或 GCE_VM_IP_PORT NEG)。選取後端後,系統會根據區域政策,將流量分配至各區域內的執行個體或端點。對於地區代管執行個體群組,本機政策會套用至每個構成區域。

如要瞭解支援的平衡模式,請參閱「平衡模式」。

如要瞭解支援的負載平衡政策演算法,請參閱地區後端服務 API 說明文件中的 localityLbPolicy

工作階段相依性 (consistentHash)

包括 HTTP Cookie 型相依性、HTTP 標頭型相依性、用戶端 IP 位址相依性、有狀態 Cookie 型工作階段相依性,以及產生的 Cookie 相依性。只要後端的健康狀態良好且具有容量,工作階段相依性就會盡力將來自特定用戶端的要求傳送至同一個後端。

如要進一步瞭解工作階段親和性,請參閱區域後端服務 API 說明文件中的 consistentHash

離群值偵測 (outlierDetection)

一組政策,可用來指定移除 NEG 中健康狀態不良的後端 VM 或端點的條件,也會定義條件,決定後端或端點何時會被視為健康狀態良好到足以再次接收流量。

如要進一步瞭解異常值偵測,請參閱 區域後端服務 API 說明文件中的 outlierDetection

斷路機制 (circuitBreakers)

設定後端服務連線量以及每個後端服務連線的要求數量上限。

如要進一步瞭解電路中斷,請參閱區域後端服務 API 說明文件中的 circuitBreakers

後續步驟