工程 · 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,後面接著好幾種後端。
- HTTP load balancer(第七層):看得懂 URL 和 header,所以可以依路徑分流。第四層的 load balancer 只看 IP 和 port。
- 後端可以是儲存空間,也可以是一組程式。每家雲端平台都有這兩種後端,只是名稱不同。
兩種 matching 方式
- 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 只在有規則的地方有效。或回到系列總覽。