负载均衡实现的几种方式
? ? ? ? 負(fù)載均衡,英文名Load Balance,作用是將操作分?jǐn)偟蕉鄠€(gè)執(zhí)行單元上執(zhí)行。隨著如今網(wǎng)絡(luò)流量的不斷增大,服務(wù)的負(fù)載均衡是必須的,這里就來(lái)講一講負(fù)載均衡的結(jié)構(gòu)。
???????說(shuō)到負(fù)載均衡,同學(xué)最容易想到的可能就是nginx了,但是nginx只是其中的一層,而負(fù)載均衡從我們發(fā)送一個(gè)請(qǐng)求時(shí)可能就開(kāi)始了,下面是一個(gè)負(fù)載均衡流程:
? ? ? ?
? ? ? ? 從用戶發(fā)起一個(gè)請(qǐng)求,從DNS分流,到中間的反向代理,再到應(yīng)用服務(wù)的分流等,經(jīng)歷了一層有一層,達(dá)到了服務(wù)水平拓展的目的,以應(yīng)對(duì)目前龐大的數(shù)據(jù)流量。
1.DNS分流
???????DNS功能即指域名系統(tǒng),在萬(wàn)維網(wǎng)中,我們?cè)L問(wèn)他人服務(wù),即是訪問(wèn)他人ip,但是ip不便于記憶,此時(shí)域名系統(tǒng)就出現(xiàn)了。通過(guò)域名與ip的相互映射,我們可以不用記憶ip,而是通過(guò)域名去訪問(wèn)目標(biāo)服務(wù),而DNS系統(tǒng)即是一個(gè)域名與ip地址相互映射的分布式數(shù)據(jù)庫(kù),我們?cè)L問(wèn)域名是,經(jīng)歷了以下步驟:
域名與ip之間有映射關(guān)系,但是大多數(shù)情況下卻不是一一對(duì)應(yīng)的,我們可以將多個(gè)ip映射到同一個(gè)域名,因?yàn)橛脩羰峭ㄟ^(guò)域名去進(jìn)行訪問(wèn)的,具體訪問(wèn)哪個(gè)地址,則有DNS服務(wù)器的映射記錄和一定的負(fù)載均衡算法來(lái)決定,用戶拿到具體ip后再去訪問(wèn),而這個(gè)過(guò)程對(duì)用戶來(lái)說(shuō)完全是透明的,通過(guò)DNS分流完成了第一步的負(fù)載均衡:
2.硬件分流
???????通過(guò)硬件設(shè)備,在網(wǎng)絡(luò)流量進(jìn)入服務(wù)之前進(jìn)行流量的分流,通過(guò)各種策略,分散到不同的服務(wù)器。常見(jiàn)的如F5負(fù)載均衡器。
3.四層負(fù)載
???????四層負(fù)載主要是指OSI七層模型中,工作在第四次tcp層的負(fù)載均衡,主要是通過(guò)修改報(bào)文中的目標(biāo)地址和端口,再加上一定的負(fù)載均衡策略,選擇最終處理的服務(wù)器,如lvs。由此可以想到,其實(shí)還有二層負(fù)載和三層負(fù)載,通過(guò)虛擬mac地址或者虛擬ip地址來(lái)接收請(qǐng)求然后再分流到真實(shí)的mac地址或者ip地址。這幾種負(fù)載方式都是不關(guān)心具體的上層協(xié)議,只負(fù)責(zé)修改數(shù)據(jù)的流向。
4.七層負(fù)載
???????七層負(fù)載也稱(chēng)“內(nèi)容負(fù)載”,是根據(jù)具體的應(yīng)用層內(nèi)容,更加智能的選擇具體內(nèi)部服務(wù)。如更具請(qǐng)求的url信息等,選擇具體的應(yīng)用服務(wù)器來(lái)進(jìn)行相應(yīng)處理,如nginx。
5.客戶端分流
???????前面的負(fù)載均衡除了DNS以外,都有一個(gè)點(diǎn)來(lái)分發(fā)具體的流量,我們稱(chēng)為服務(wù)器分流。當(dāng)用戶請(qǐng)求到達(dá)了真正的應(yīng)用服務(wù)器以后,請(qǐng)求還會(huì)細(xì)分,而同一類(lèi)的請(qǐng)求的服務(wù)可能還是集群,例如如今的微服務(wù)架構(gòu)。這時(shí)可以使用應(yīng)用框架來(lái)完成服務(wù)請(qǐng)求的分流,如dubbo以及springCloud的Ribbon組件等,這些由服務(wù)自己決定的分流方式稱(chēng)為客戶端分流。
6.數(shù)據(jù)層分流
???????在應(yīng)用服務(wù)器的背后,是數(shù)據(jù)層,各種緩存以及持久化數(shù)據(jù)庫(kù)等。對(duì)于到達(dá)數(shù)據(jù)層的請(qǐng)求,我們也可以進(jìn)行相應(yīng)的負(fù)載均衡處理,如redis的主從讀寫(xiě)分
離集群、分片集群等,mysql的主從讀寫(xiě)、分區(qū)分表分庫(kù)等。
【End】
推薦閱讀:
Java 最常見(jiàn)的 200+ 面試題
關(guān)注下方二維碼,訂閱更多精彩內(nèi)容。
轉(zhuǎn)發(fā)朋友圈,是對(duì)我最大的支持。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的负载均衡实现的几种方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 常见面试题翻车合集
- 下一篇: 面试官不讲武德,竟然问了我18个JVM问