負載均衡是分布式系統不可或缺的技術,從字面上來說,就是不可能所有事都給一台電腦做,電腦的CPU和記憶體是有上限的,所以需要一台機器作為指揮官把任務loading平均分散給其他電腦做
例如有三台機器,機器不管做小數或大數加法的性能是差不多的,假設都是1秒,有一個任務是計算1+2+3+4+5+6,那麼指揮官就可以把1+2,3+4,5+6分別給這三台機器算,最後再把這三個加起來,總共只要3秒,速度提升了兩倍也均衡了任務分配
負載均衡通常會實作在API層,API層就是指揮官負責分散任務loading,再Lab中,我們會利用API層拆解Object成components後,用隨機演算法分散他們讓不同的data server去消費數據,但是本篇會介紹其他負載均衡的演算法,如果有興趣的讀者歡迎自己實作替換原本的隨機演算法
DNS負載均衡
這主要是多個入口的負載均衡技術,可以理解為多個API層之間怎麼做負載均衡,我們知道我們對一個網址做request,假如google好了,你並不會馬上得到google的內容,而是會去DNS server詢問這個google.com對應的ip是什麼,然後得到ip,把google.com換成對應的ip,才能拿到網頁資料,當然這些瀏覽器都幫你封裝好了,我們可以對DNS server做附載均衡,隨機的return四個不同的ip
Scheduling
Scheduling,也就是輪詢很簡單,假如有四台server供你使用,一有request過來,則照順序的一個個分配,到底了再從頭過來就好
Hash
可以對request的ID做hash,假如有四台機器,則對hash後的數字%4,讓對應的server去處理它,這個演算法的好處是我們可以把相關類似的資料集中放在某台機器,加快處理時間,壞處是如果遇到惡意client,容易被DDOS
加權演算法
這就需要對系統的客戶有細緻的了解,我們可以對每個request歸類,並分權重,一個connection就是一個權重分數,有點類似背包問題或貪心法,request過來了就給目前負載分數最小的那個server