魯地圖分流器
- 站台設定檔: mirrors.yaml
- 使用反向代理 (Reverse Proxy) 方式提供主頁 HTML 及素材等,亦即流量會經過分流器端點。
- 當收到 HTTP 請求時會即時對所有 mirror 站台同步進行 HTTP HEAD 測試,並以最快回應的伺服器作為來源進行反向代理。
- 若 HTTP 請求為正面表列的圖資檔,則會改以 HTTP 302 重新導向,流量不會經過分流器端點。
- 若所有 mirror 都無法在3秒內回應,則會回覆 HTTP 504 Gateway Timeout 錯誤。
- 每30分鐘對各 mirror 站台進行 HTTP HEAD 測試, 超過5秒沒有回應則為逾時。
- 會對所有正面表列的圖資檔進行測試。
- 所有連結都有回應時則判定為 Operational
- 部份連結沒有回應時則判定為 Partial outage
- 所有連結都無回應時則判定為 Major outage
- 每次成功的測試都會紀錄 Latency,並與已儲存的 Latency 值平均後再存回資料庫。
- 使用 Statuspage API 來更新狀態。
- 由 Operational 轉為其它狀態時會自動建立 Incident,例如:Rex is not operational
- 由其它狀態回覆為 Operational 後即會自動 Resolve Incident。
- 定期測試的端點部署於 Google Cloud Platform
asia-east1
(彰化)
TODO
- 檢查 Last-Modifed,若日期太過老舊則視為 Degraded performance 或 Partial outage。
- 老舊可依各別檔案定義,例如 Daily Build 可設定為 1 天, Weekly Build 可設定為 7 天,DEM 檔可設定為 1 年。
- 分流前會排除定期測試後失敗的連結。
- 分流前會使用設定檔內定義的站台權重。
- 最後會以亂數選擇要使用的連結,權重較高的連結獲選率也較高。
- 選定連結後會以 HTTP 302 重新導向,流量不會經過分流器端點。
測試方式:
$ curl -I https://rudymap.tw/v1/MOI_OSM_Taiwan_TOPO_Rudy.zip
HTTP/2 302
content-type: text/html; charset=utf-8
location: https://moi.kcwu.csie.org/MOI_OSM_Taiwan_TOPO_Rudy.zip
x-cloud-trace-context: 70b67fd60f7f9fe2c9ed2b726465de28
date: Sun, 24 Jul 2022 09:38:23 GMT
server: Google Frontend
$ curl -I https://rudymap.tw/v1/MOI_OSM_Taiwan_TOPO_Rudy.zip
HTTP/2 302
content-type: text/html; charset=utf-8
location: https://map.happyman.idv.tw/rudy/MOI_OSM_Taiwan_TOPO_Rudy.zip
x-cloud-trace-context: 450ca45fdabf0ab2b5872b8a6fedb49d
date: Sun, 24 Jul 2022 09:38:25 GMT
server: Google Frontend
當 git 有以下變動時會觸發自動部署:
master
分支: 部署至 https://ruby-balancer-alpha-mgl7xqygta-de.a.run.app/- 背後服務: Google Cloud Run
- 部署地區:
asia-east1
(彰化)
- 建立 tag 時: 部署至 https://rudymap.tw/
- 背後服務: Google Cloud Run
- 部署地區:
asia-east1
(彰化)