那么如何實(shí)現(xiàn)負(fù)載均衡呢?回答這個(gè)問題之前劫乱,我們首先復(fù)習(xí)一下一次HTTP請(qǐng)求的過程
- 對(duì)域名進(jìn)行DNS解析织中,得到IP地址
- 對(duì)這個(gè)IP發(fā)起TCP連接請(qǐng)求锥涕,三次握手
- 連接成功,發(fā)起HTTP請(qǐng)求
這三部中的每一步狭吼,都可以作為負(fù)載均衡的基礎(chǔ)层坠。也就是說,我們可以設(shè)計(jì)出三種負(fù)載均衡的策略刁笙。
- 域名解析階段的負(fù)載均衡:利用客戶端解析域名的時(shí)候破花,DNS服務(wù)器自動(dòng)分配集群中的某臺(tái)機(jī)器的IP給該用戶。這樣一來用戶就被均勻地分配到了集群中的各臺(tái)機(jī)器上疲吸。這種方法沒有額外開銷座每,因?yàn)樨?fù)載均衡實(shí)際上在任何網(wǎng)絡(luò)通信開始前就已經(jīng)完成了。但不足之處是摘悴,每個(gè)用戶實(shí)際的工況不一樣峭梳。DNS負(fù)載均衡的粒度過于粗糙
- 傳輸層的負(fù)載均衡:在這類負(fù)載均衡中,DNS解析實(shí)際指向一個(gè)路由器蹂喻。域名解析完成后葱椭,所有客戶端的TCP請(qǐng)求發(fā)送到這個(gè)路由器上,再經(jīng)路由器分配給集群中的各臺(tái)機(jī)器口四。
- 應(yīng)用層的負(fù)載均衡:這是粒度最細(xì)的一種負(fù)載均衡孵运,同時(shí)對(duì)于路由器的計(jì)算能力要求也最高。此時(shí)路由器會(huì)檢查數(shù)據(jù)包的內(nèi)容蔓彩,根據(jù)內(nèi)容分發(fā)給不同的服務(wù)器治笨。
當(dāng)負(fù)載均衡都不能滿足更大的客戶端需求的時(shí)候,系統(tǒng)需要適時(shí)向集群中添加額外的機(jī)器粪小。另一方面大磺,當(dāng)系統(tǒng)中可能出現(xiàn)資源過剩時(shí),系統(tǒng)需要把多余的計(jì)算資源放回到云中探膊,以供潛在的其他用戶使用杠愧。這便叫做彈性伸縮。