Skip to content

outdoorsafetylab/rudy-balancer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

3a6ee90 · Aug 1, 2024
Feb 18, 2023
Feb 18, 2023
Aug 1, 2024
Feb 18, 2023
Aug 9, 2022
Aug 4, 2022
Sep 3, 2022
Aug 4, 2022
Aug 29, 2022
Feb 18, 2023
Aug 13, 2022
Aug 13, 2022
Sep 3, 2022
Feb 18, 2023
Jul 23, 2022
Oct 28, 2022
Sep 3, 2022
Sep 3, 2022
Sep 3, 2022
Aug 1, 2024
Jul 23, 2022
Sep 3, 2022
Sep 3, 2022

Repository files navigation

Rudy Balancer

魯地圖分流器

  1. 魯地圖說明網頁
  2. App 更新主頁
    1. OruxMaps 傳送門
    2. 綠野遊蹤傳送門
    3. Cartograph Pro 2 傳送門
  3. 監控主頁

運作方式

魯地圖說明網頁

  1. 使用反向代理 (Reverse Proxy) 方式提供主頁 HTML 及素材等,亦即流量會經過分流器端點。
  2. 當收到 HTTP 請求時會即時對所有 mirror 站台同步進行 HTTP HEAD 測試,並以最快回應的伺服器作為來源進行反向代理。
  3. 若 HTTP 請求為正面表列的圖資檔,則會改以 HTTP 302 重新導向,流量不會經過分流器端點。
  4. 若所有 mirror 都無法在3秒內回應,則會回覆 HTTP 504 Gateway Timeout 錯誤。

圖資定時測試

  1. 每30分鐘對各 mirror 站台進行 HTTP HEAD 測試, 超過5秒沒有回應則為逾時。
    1. 會對所有正面表列的圖資檔進行測試。
    2. 所有連結都有回應時則判定為 Operational
    3. 部份連結沒有回應時則判定為 Partial outage
    4. 所有連結都無回應時則判定為 Major outage
    5. 每次成功的測試都會紀錄 Latency,並與已儲存的 Latency 值平均後再存回資料庫。
    6. 使用 Statuspage API 來更新狀態。
  2. 由 Operational 轉為其它狀態時會自動建立 Incident,例如:Rex is not operational
  3. 由其它狀態回覆為 Operational 後即會自動 Resolve Incident。
  4. 定期測試的端點部署於 Google Cloud Platform asia-east1 (彰化)

TODO

  1. 檢查 Last-Modifed,若日期太過老舊則視為 Degraded performance 或 Partial outage。
  2. 老舊可依各別檔案定義,例如 Daily Build 可設定為 1 天, Weekly Build 可設定為 7 天,DEM 檔可設定為 1 年。

圖資分流方式

  1. 分流前會排除定期測試後失敗的連結。
  2. 分流前會使用設定檔內定義的站台權重。
  3. 最後會以亂數選擇要使用的連結,權重較高的連結獲選率也較高。
  4. 選定連結後會以 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

自動部署 (Continuous Deployment)

當 git 有以下變動時會觸發自動部署: