Skip to content
所有文章 ‹ Part 03 of 18 · Cache 不是方塊,是一條鏈
工程 · 3 min read

Load balancer:一個入口,依規則分給很多後端

Load balancer 是 origin 的單一入口。比較 longest prefix match 和 priority order 兩種 matching,以及藏在 load balancer 裡的 cache。

Load balancer 是 origin 的單一入口。它讀 host、path 和 header,再選一個後端。

我以前以為 origin 就是「一台 server」。後來才知道,origin 常常是一個 load balancer,後面接著好幾種後端。

shop.example.com(HTTP load balancer)讀 host / path / header /images/*儲存空間(只回傳圖片檔案) /api/*應用程式(可以改寫內容) 其他預設後端
一個 load balancer 讀每個 request,再依規則送到不同的後端。
  • HTTP load balancer(第七層):看得懂 URL 和 header,所以可以依路徑分流。第四層的 load balancer 只看 IP 和 port。
  • 後端可以是儲存空間,也可以是一組程式。每家雲端平台都有這兩種後端,只是名稱不同。

兩種 matching 方式

Longest prefix match:較長的 prefix 勝出,順序不重要 /images/*圖片儲存空間 /images/icons/*圖示儲存空間 GET /images/icons/cart.png圖示(兩條怎麼排都一樣) Priority order(first match):從第 1 條開始比,第一個符合就停 1header beta: 1測試版服務 2/images/*圖片儲存空間 GET /images/a.png + beta: 1測試版服務(第 1 條先符合) 1 和 2 對調 → 同一個 request 改去圖片儲存空間
Longest prefix 不管順序,priority order 只要對調規則,同一個 request 就會改去別的後端。
  • nginx 的 location 前綴屬於第一種。規則要讀 header 時,通常只能用第二種,順序就變得重要。
  • 我們的平台規定,一組 matching 只能用一種方式。我們有一條規則要讀 header,所以全部規則都要排序。順序排錯,某些路徑就到不了該去的後端(Load balancer 怎麼選後端)。

Cache 可能就在 load balancer 裡

  • 有些平台把 cache 做成 load balancer 每個後端上的開關,各自有 cache 規則。
  • 這時同一個 load balancer 下,有的後端有 cache,有的沒有,規則也不一樣(Bypass header 只在有規則的地方有效)。

Load balancer 不只分流。它也可能是你沒注意到的另一層 cache。

參考來源:nginx: location

延伸閱讀:一個 request 走過的路、Load balancer 怎麼選後端、Bypass header 只在有規則的地方有效。或回到系列總覽。

↑↓ 移動 ↵ 開啟 esc 關閉