早期的互聯(lián)網(wǎng),只需要一臺(tái)高可配的服務(wù)器躬厌,就可以滿足需求。但是這種會(huì)帶來一個(gè)問題竞帽,如果同時(shí)有很多用戶試圖訪問服務(wù)器扛施,超過了其能處理的極限,就會(huì)出現(xiàn)加載速度特別緩慢或根本無法連接的情況屹篓「碓或者服務(wù)器宕機(jī)的話,所有的用戶都沒辦法訪問服務(wù)器堆巧。
因此就引入了負(fù)載均衡概念妄荔。當(dāng)一臺(tái)機(jī)子宕機(jī)或者不健康的時(shí)候,會(huì)轉(zhuǎn)發(fā)當(dāng)前的請(qǐng)求到其他服務(wù)器上谍肤。保證服務(wù)是可以正常訪問啦租。
常見的負(fù)載均衡有三種實(shí)現(xiàn)
- 基于DNS實(shí)現(xiàn)
- 基于硬件實(shí)現(xiàn)
- 基于軟件實(shí)現(xiàn)
基于DNS實(shí)現(xiàn)負(fù)載均衡
針對(duì)某個(gè)域名做多個(gè)IP的映射。當(dāng)用戶訪問域名的時(shí)候谣沸,首先會(huì)通過dns的解析刷钢,隨機(jī)給用戶分配一個(gè)ip地址。DNS是最簡(jiǎn)單的乳附,無需要做額外的開發(fā)内地。但是有dns的緩存策略,會(huì)導(dǎo)致修改DNS配置的時(shí)候赋除,導(dǎo)致的IP變更不及時(shí)阱缓。
硬件的負(fù)載均衡
有一臺(tái)性能特別高的交換機(jī),可以處理百萬級(jí)請(qǐng)求举农。它可以支持不同的復(fù)雜均衡算法荆针,配置。這種一般成本比較高颁糟,常用于政府航背,銀行等機(jī)構(gòu)。F5設(shè)備棱貌。
軟件負(fù)載均衡
目前大部分的互聯(lián)網(wǎng)企業(yè)使用的方法玖媚。免費(fèi)而且都是開源,可以支持二次開發(fā)婚脱,不同企業(yè)對(duì)負(fù)載均衡的需求都不一樣今魔,可以根據(jù)需求勺像,來開發(fā)配置負(fù)載均衡的特性。常見入 Nginx错森,LVS 妹卿,HAProxy疙挺。
負(fù)載均衡算法
負(fù)載均衡算法決定了后端的哪些健康服務(wù)器會(huì)被選中绕德。幾個(gè)常用的算法:
- Round Robin(輪詢):為第一個(gè)請(qǐng)求選擇列表中的第一個(gè)服務(wù)器翔冀,然后按順序向下移動(dòng)列表直到結(jié)尾,然后循環(huán)激挪。
- Least Connections(最小連接):優(yōu)先選擇連接數(shù)最少的服務(wù)器辰狡,在普遍會(huì)話較長(zhǎng)的情況下推薦使用锋叨。
- Source:根據(jù)請(qǐng)求源的 IP 的散列(hash)來選擇要轉(zhuǎn)發(fā)的服務(wù)器垄分。這種方式可以一定程度上保證特定用戶能連接到相同的服務(wù)器。