Load Balancer 設計原理

網路上看到一天圖文精美的 Load Balancer 原理介紹。包含各種設計哲學,由淺入深,覺得相當的有趣。

從最簡單的 Load Balancer 模式開始。不管後面有幾台機器,都一視同仁,一個一個發。這招又叫 Round Robin ,遵循一人一票票票等值的公平原則。雖簡單但缺點是,如果每個 server 處理時間不同,請求量一大,某些比較慢的機器就會開始掉球。就像打桌球的人類一樣,一個人沒辦法一秒打回五球 (應該吧)。

Requests Queue

我們可以加 request queue 在每台後端機器上來避免掉球,但這並沒有根本性的解決問題。請求量一大,雖然不會掉球,但比較慢的機器就會開始堆積請求在 queue 上。

Weighted Round Robin ,可以針對比較快的機器多發一點請求過去,但如果決定哪幾台比較快? 一個方法是統計平均請求花費的時間。比較貪心但簡單的方法是選擇目前最少連線的後端。因為 Load Balancer 一定隨時知道,每個後端有多少連線數正在跟 Load Balancer 進行中。

Latency

掉球很重要嗎? 如果一個請求在 queue 裡面等很久,有比較好嗎? 如果考慮到要有最佳的反應時間,該怎麼做呢?

作者提到一個 peak exponentially weighted moving average (PEWMA) 當方案。有點類似 weighted round robin ,但會隨著統計的花費時間,給予指數級的懲罰。也就是說,很慢的機器會被分配更少的請求速率。


Posted

in

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *