在 GCP 上要做到依權重分流的方法很多,
如下:
1.Cloud DNS 依權重解析到不同 IP (超簡單)
2.Google App Engine 不同版本分流 (超簡單)
3.Cloud Function 不同版本分流 (超簡單)
4.Cloud Run 不同版本分流 (超簡單)
5.Nginx 設定檔 (非GCP但也很簡單)
6.HTTP(S) Load Balancer 依權重分流
偏偏 Load Balancer 是最複雜的,
明明就很單純的功能,
不知道 GCP 為什麼要搞得這麼複雜?
這裡快速分享一下步驟。
目標:依照 70%,30%的權重,分配流量到2個後端。
為了簡化,我在後端都用非代管執行個體群組,
各自接到一台 VM,hello-world-a 和 hello-world-b
Load Balancer 部分,
前端通訊協定就用 HTTP,
接2個後端,分別接到2個非代管執行個體群組。
架構圖如下:

一、上述建立主機、執行個體群組的部分省略,兩張網頁呈現如下:
vm: hello-world-a

vm: hello-world-b

二、接下來要建立負載平衡了,要注意,
前端先不要建,建立兩個後端,接到兩個執行個體群組。
完成如下:

三、接下來要打指令了,
分流的關鍵物件叫做 urm-map
先寫好一個 YAML 檔,我取名 map,
紅色部分請各位自行替換。

為了方便大家複製貼上,我就貼在這裡,語法我就不解釋了。
defaultService: https://www.googleapis.com/compute/v1/projects/dong-dong-gcp-2-bigquery/global/backendServices/bk-a
kind: compute #urlMap
name: web-map-http
hostRules:
- hosts:
- '*'
pathMatcher: matcher1
pathMatchers:
- defaultService: https://www.googleapis.com/compute/v1/projects/dong-dong-gcp-2-bigquery/global/backendServices/bk-a
name: matcher1
routeRules:
- matchRules:
- prefixMatch: /
priority: 2
routeAction:
weightedBackendServices:
- backendService: https://www.googleapis.com/compute/v1/projects/dong-dong-gcp-2-bigquery/global/backendServices/bk-a
weight: 70
- backendService: https://www.googleapis.com/compute/v1/projects/dong-dong-gcp-2-bigquery/global/backendServices/bk-b
weight: 30
四、YAML 檔準備好,用指令來建立 url-map:
gcloud beta compute url-maps import web-map-http –source map –global
五、再來建立 target-http-proxies
gcloud beta compute target-http-proxies create http-lb-proxy-adv –url-map=web-map-http
六、在建立前端之前,先保留一個靜態 IP
gcloud compute addresses create lb-ipv4 –ip-version=IPV4 –global
七、確認取得 IP
gcloud compute addresses describe lb-ipv4 –format=”get(address)” –global
八、建立 forwarding-rules
gcloud beta compute forwarding-rules create http-content-rule –load-balancing-scheme EXTERNAL_MANAGED –address=lb-ipv4-2 –global –target-http-proxy=http-lb-proxy-adv –ports=80
建立過程截圖如下:

接下來點網頁看看,
會發現很多次是 v1,有幾次是 v2。

想多打一點流量進去,使用 siege,
在 Cloud Shell 安裝 siege:
sudo apt-get install siege
開始測試,例如打個200下:
siege -c 10 -r 2- -d1 http://34.49.24.227

然後 Load Balancer 監控頁面可以看到分流的圖:

我們去 Cloud Logging 去看結果,
看到2個後端接收 Request 的次數比較,
包含我最初手動點擊網頁的次數,和 siege 200 次,
2個後端分別收到 209 次和 91次,大概是69.67%:30.30%,
如果打更多次,比例會更接近 70%:30%。

也可以從 Cloud Monitoring 看到兩個後端接收 Reuqest 的圖表:

以上分享。
來源可參考這份文件:
https://codelabs.developers.google.com/externalhttplb-adv#4
順便置入一下,關於更多 GCP 負載平衡的概念和實作教學,都在東東的 GCP 線上課程《雲端架構師養成班》,有需要可以進來看喔!