什么是負(fù)載均衡—萬(wàn)年小白的翻身之作
什么是負(fù)載均衡呢?筆者在接觸這個(gè)技術(shù)詞語(yǔ)的時(shí)候,從字面上很好理解,就是讓負(fù)載平衡,均勻。但是,隨著學(xué)習(xí)了解,卻越發(fā)對(duì)這個(gè)概念模糊起來(lái),到底有什么應(yīng)用,到底如何實(shí)現(xiàn)呢?對(duì)于像筆者這種“萬(wàn)年小白",想要搞清楚什么是負(fù)載均衡,還真不是一句兩句能說(shuō)清楚的。那么,在學(xué)習(xí)的過(guò)程中,筆者發(fā)現(xiàn)一篇文章,很基礎(chǔ),文章也很直白。那么,在此,推薦給大家,希望能讓像我這樣的初學(xué)者掌握其中的基礎(chǔ)概念。
負(fù)載均衡的作用:把不同的客戶端的請(qǐng)求通過(guò)負(fù)載均衡策略分配到不同的服務(wù)器上去。
負(fù)載均衡的基本工作方式:通過(guò)更改請(qǐng)求的目的地址對(duì)請(qǐng)求進(jìn)行轉(zhuǎn)發(fā),在服務(wù)器返回?cái)?shù)據(jù)包的時(shí)候更改返回?cái)?shù)據(jù)包的源地址保證客戶端請(qǐng)求的目的和返回包是同一個(gè)地址。
現(xiàn)在大家基本上已經(jīng)知道了什么是負(fù)載均衡,以及對(duì)它的作用和工作方式都有了一個(gè)了解。下面我們?cè)賮?lái)細(xì)化一下它的內(nèi)容。
負(fù)載均衡設(shè)計(jì)的三個(gè)要素:分發(fā)策略、會(huì)話保持和服務(wù)器健康檢查。
分發(fā)策略:即負(fù)載均衡設(shè)備根據(jù)什么樣的策略把請(qǐng)求分發(fā)到不同的后臺(tái)服務(wù)器上。最簡(jiǎn)單的算法就是輪詢,把用戶的請(qǐng)求依次分配到服務(wù)器上。
會(huì)話保持:在大部分的應(yīng)用中都會(huì)涉及到服務(wù)器Session控制。而且這些Session通常不會(huì)在服務(wù)器之間進(jìn)行復(fù)制的。也就是說(shuō)一個(gè)用戶在登錄的時(shí)候,如果分配到了某一臺(tái)服務(wù)器上,則最基本的要求就是這個(gè)用戶后續(xù)的請(qǐng)求都分配到這臺(tái)服務(wù)器上。如果分配到其他的服務(wù)器上則可能不認(rèn)識(shí)這個(gè)用戶的請(qǐng)求,而造成請(qǐng)求失敗。最簡(jiǎn)單的會(huì)話保持策略是源地址會(huì)話保持,也就是負(fù)載均衡設(shè)備認(rèn)為同一個(gè)源地址過(guò)來(lái)的所有請(qǐng)求都是發(fā)自于同一個(gè)客戶端。在源地址會(huì)話保持的情況下,一個(gè)客戶端的第一個(gè)請(qǐng)求會(huì)按照負(fù)載均衡策略進(jìn)行分配,一旦分配了一臺(tái)服務(wù)器之后,后續(xù)的請(qǐng)求都會(huì)發(fā)到這臺(tái)服務(wù)器。當(dāng)然,對(duì)于一些應(yīng)用如新聞、圖片等靜態(tài)的內(nèi)容就不需要會(huì)話保持了。
健康檢查:負(fù)載均衡設(shè)備必須檢測(cè)后臺(tái)服務(wù)器是否在正常工作,如果發(fā)現(xiàn)某一臺(tái)服務(wù)器出現(xiàn)了故障,則需要把這臺(tái)服務(wù)器從負(fù)載均衡組里面摘掉。當(dāng)故障服務(wù)器恢復(fù)服務(wù)的時(shí)候,再把服務(wù)器重新加入到負(fù)載均衡組里面進(jìn)行處理。
四層負(fù)載均衡:就是以TCP的一個(gè)連接為最小單位,也就是以一個(gè)Socket連接的最小單位來(lái)進(jìn)行轉(zhuǎn)發(fā),在一個(gè)Socket里面跑了多少個(gè)交易和負(fù)載均衡無(wú)關(guān)。
七層負(fù)載均衡:負(fù)載均衡設(shè)備可以按照協(xié)議識(shí)別每一筆交易,并以每個(gè)交易為最小單位進(jìn)行轉(zhuǎn)發(fā)。比如在一個(gè)HTTP 1.1的連接中可以包含多個(gè)Request/Response,四層負(fù)載均衡一旦在確定第一個(gè)連接的分配后,就不能對(duì)后續(xù)的request /response進(jìn)行后續(xù)處理了。而七層負(fù)載均衡處理能把每一個(gè)http request/response分別進(jìn)行處理。
到此,相信大家對(duì)什么是負(fù)載均衡有了更深一步的了解了,但是,一個(gè)技術(shù)的應(yīng)用不會(huì)只局限在一兩個(gè)地方,現(xiàn)在就來(lái)為大家詳細(xì)說(shuō)一下負(fù)載均衡的方式。
負(fù)載均衡實(shí)際上有多種方式:
1、DNS負(fù)載均衡,通過(guò)DNS協(xié)議實(shí)現(xiàn),對(duì)于同一個(gè)域名,DNS可以同時(shí)提供多個(gè)IP地址對(duì)應(yīng),瀏覽器會(huì)選擇第一個(gè)地址發(fā)出請(qǐng)求,而多個(gè)DNS地址在 Local DNS返回給客戶端的時(shí)候會(huì)輪詢返回,所以不同的用戶得到的第一個(gè)地址是不一樣的。因此,對(duì)一個(gè)域名提供多個(gè)地址可以實(shí)現(xiàn)負(fù)載均衡的效果。另外一種DNS 負(fù)載均衡的方式是DNS服務(wù)器判斷客戶端local DNS的源地址,根據(jù)不同的源地址返回不同的IP地址和域名對(duì)應(yīng)。比如來(lái)源是網(wǎng)通,就返回網(wǎng)通的服務(wù)器地址,來(lái)源是電信,就返回電信的服務(wù)器地址。這樣也能實(shí)現(xiàn)負(fù)載均衡的效果。
2、NAT負(fù)載均衡,在前面一貼已經(jīng)講過(guò)了,就不多說(shuō)了。
3、重定向負(fù)載均衡,一些協(xié)議比如HTTP是可以支持重定向的,負(fù)載均衡設(shè)備通過(guò)算法決定用戶的請(qǐng)求應(yīng)該去某臺(tái)服務(wù)器的時(shí)候,就返回一個(gè)302重定向指令使用戶重新發(fā)送一個(gè)請(qǐng)求到目的服務(wù)器。這樣實(shí)現(xiàn)負(fù)載均衡。
好了,對(duì)于什么是負(fù)載均衡,我們就先介紹到這里了,由于筆者也是初學(xué),可能知識(shí)只是基礎(chǔ)概括,歡迎廣大的讀者,愛(ài)好者指點(diǎn)迷津。