日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

再談負(fù)載均衡,你學(xué)會了什么?

來源: 責(zé)編: 時間:2024-07-12 17:25:17 679觀看
導(dǎo)讀大家好,我是坤哥之前發(fā)的一篇負(fù)載均衡的文章有一個點不少人有疑問,所以我覺得有必要單獨(dú)寫篇文章解釋一下,先看下上篇文章展示的架構(gòu)圖。圖片這里一些朋友的疑問點是 Nginx 是否多此一舉,能否能直接從 LVS 打到站點層?即改

大家好,我是坤哥pxo28資訊網(wǎng)——每日最新資訊28at.com

之前發(fā)的一篇負(fù)載均衡的文章有一個點不少人有疑問,所以我覺得有必要單獨(dú)寫篇文章解釋一下,先看下上篇文章展示的架構(gòu)圖。pxo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片pxo28資訊網(wǎng)——每日最新資訊28at.com

這里一些朋友的疑問點是 Nginx 是否多此一舉,能否能直接從 LVS 打到站點層?即改成下面的架構(gòu)。pxo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片pxo28資訊網(wǎng)——每日最新資訊28at.com

答案是不行,為什么?其實我在上文中有提到一些點已經(jīng)暗示了,只不過不那么明顯而已,我再單獨(dú)把這些點拎出來。pxo28資訊網(wǎng)——每日最新資訊28at.com

  1. LVS 是四層負(fù)載均衡器。
  2. Nginx 是七層負(fù)載均衡器,可以根據(jù) url 來轉(zhuǎn)發(fā)流量。

首先我們需要明白為什么根據(jù) url 轉(zhuǎn)發(fā)請求這么重要,假設(shè)現(xiàn)在有「營銷」,「運(yùn)營中心」這兩個集群,使用 Nginx 的話很簡單,根據(jù) url 來決定到底將請求轉(zhuǎn)發(fā)到哪個集群即可。pxo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片pxo28資訊網(wǎng)——每日最新資訊28at.com

由于 LVS 不能根據(jù) url 轉(zhuǎn)發(fā),那么請問 LVS 收到請求后該轉(zhuǎn)給誰。pxo28資訊網(wǎng)——每日最新資訊28at.com

那么 LVS 為什么不能根據(jù) url 來轉(zhuǎn)發(fā)呢,因為它是四層負(fù)載均衡器,什么是四層和七層,這里就要簡單復(fù)習(xí)下 ISO 七層參考模型了。pxo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片pxo28資訊網(wǎng)——每日最新資訊28at.com

由此可知,七層對應(yīng)著應(yīng)用層,四層對應(yīng)著傳輸層,如果從應(yīng)用層發(fā)起一個請求會在「傳輸層」,「網(wǎng)絡(luò)層」,「數(shù)據(jù)鏈路層」分別加上各自層的包頭,比如現(xiàn)在 A 電腦要發(fā)一個「I'm Deepon」數(shù)據(jù)給 B 電腦,則在各層的轉(zhuǎn)化流程如下圖所示:pxo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片pxo28資訊網(wǎng)——每日最新資訊28at.com

但最終在互聯(lián)網(wǎng)上要傳輸?shù)陌〝?shù)據(jù)鏈路層傳輸?shù)陌械潱y(tǒng)稱為包)是有大小限制的,如下圖所示:pxo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片pxo28資訊網(wǎng)——每日最新資訊28at.com

在互聯(lián)網(wǎng)上傳輸?shù)陌荒艹^ 14 + 20 + 20 + 1460 + 4 = 1518 byte,其中包含的應(yīng)用層(即 payload)數(shù)據(jù)一次性不能超過 1460 個 byte,也就是說如果一個 HTTP 請求有 2000 byte,那么它必須分成兩個包發(fā)送才能在網(wǎng)絡(luò)上傳輸,再來看看 HTTP 的格式pxo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片pxo28資訊網(wǎng)——每日最新資訊28at.com

如果一個 HTTP POST 請求很大,超過了 1460 byte(一個包 payload 的最大值),那么它必須分成兩個包才能傳輸,也就意味著一個包可能包含 URI,另一個包不包含 URI,既然包都不包含 URI,那么請問 LVS 如何根據(jù) URL 來轉(zhuǎn)發(fā)給相應(yīng)的集群呢,所以理解了 TCP/IP 的工作機(jī)制相信你不難理解開頭的問題:LVS 是四層負(fù)載均衡器,無法根據(jù) URL 來轉(zhuǎn)發(fā)請求。pxo28資訊網(wǎng)——每日最新資訊28at.com

其實最關(guān)鍵的原因是四層以下其實只負(fù)責(zé)包的轉(zhuǎn)發(fā),只要拿出包頭查看一下 ip 地址就可知道該轉(zhuǎn)發(fā)哪里,很高效,如果你還要根據(jù) url 來匹配那么需要拿到應(yīng)用層數(shù)據(jù)根據(jù)正則等做匹配,顯然會消耗更多的性能,所以專業(yè)的人做專業(yè)的事,應(yīng)該由 LVS 來負(fù)責(zé)承載所有流量,Nginx 負(fù)責(zé)根據(jù) url 來轉(zhuǎn)發(fā)給對應(yīng)的集群,因為它是七層負(fù)載均衡器,與上下游各建立了一個 TCP 鏈接pxo28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片pxo28資訊網(wǎng)——每日最新資訊28at.com

所以如果有多個分包,由于 Nginx 與 client 建立了 TCP 連接,可以在 Nginx 先拿到 client 發(fā)出的所有的分包再組裝成完整的報文, 然后根據(jù) url 選擇其中一臺 server 與之建立 TCP 連接后將數(shù)據(jù)分批完整地傳給上游 serverpxo28資訊網(wǎng)——每日最新資訊28at.com

另外需要注意的是現(xiàn)在在大廠中如果只將 Nginx 作為轉(zhuǎn)發(fā)之用是不夠的,一般用的 OpenResty ,什么是 OpenResty 呢pxo28資訊網(wǎng)——每日最新資訊28at.com

“OpenResty? 是一個基于 Nginx 與 Lua 的高性能 Web 平臺,其內(nèi)部集成了大量精良的 Lua 庫、第三方模塊以及大多數(shù)的依賴項。用于方便地搭建能夠處理超高并發(fā)、擴(kuò)展性極高的動態(tài) Web 應(yīng)用、Web 服務(wù)和動態(tài)網(wǎng)關(guān)。pxo28資訊網(wǎng)——每日最新資訊28at.com

OpenResty? 的目標(biāo)是讓你的 Web 服務(wù)直接跑在 Nginx 服務(wù)內(nèi)部,充分利用 Nginx 的非阻塞 I/O 模型,不僅僅對 HTTP 客戶端請求,甚至于對遠(yuǎn)程后端諸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都進(jìn)行一致的高性能響應(yīng)。”pxo28資訊網(wǎng)——每日最新資訊28at.com

注意上面一句「提供了與 MySQL ,Redis 等的交互能力」這一點非常關(guān)鍵,我們之前不是說 Nginx 可以根據(jù) url 來決定打向哪個集群嗎,假設(shè)現(xiàn)在有一個這樣的場景:所有包含 operation 的請求都轉(zhuǎn)發(fā)到運(yùn)營中心的集群,則需要寫死類似如下的配置pxo28資訊網(wǎng)——每日最新資訊28at.com

upstream backend {  server 192.168.1.10:8080  server 192.168.1.11:8080}server {  location /operation {    proxy_pass http://backed  }}

在我司中類似這樣的規(guī)則非常多,難道要像上面這樣把所有的規(guī)則都一個個寫死在 Nginx 的配置文件里嗎?顯然不合理,更合理的方式是把這些規(guī)則(哪個 url 對應(yīng)哪些集群)保存在 MySQL 中,然后 Nginx 在啟動的時候?qū)⑦@些規(guī)則從 MySQL 中取出并保存在 Redis 及本地緩存中,然后 Nginx 要根據(jù) url 匹配的時候從本地緩存(如果沒有從 redis 拿,redis 過期從 MySQL 拿)里拿這些規(guī)則再根據(jù)匹配項轉(zhuǎn)發(fā)到相應(yīng)的集群,Nginx 沒有這樣的能力,而 OpenResty 由于集成了 Lua,引入了與 MySQL, Redis 等交互的第三方模塊,所以用它是可行的,所以最終架構(gòu)如下(將 Nginx 換成 OpenResty)pxo28資訊網(wǎng)——每日最新資訊28at.com

圖片 圖片 pxo28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-100728-0.html再談負(fù)載均衡,你學(xué)會了什么?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 前端怎么這么多新輪子啊???

下一篇: 使用Declare(strict_Types=1)來獲得更健壯的PHP代碼

標(biāo)簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 驻马店市| 云阳县| 雅江县| 浏阳市| 资源县| 普宁市| 丹棱县| 睢宁县| 衡山县| 安吉县| 成都市| 鹿邑县| 桃源县| 台北县| 苍溪县| 花莲市| 那曲县| 赣州市| 乌兰县| 汉寿县| 丰镇市| 湘潭县| 甘泉县| 德阳市| 西吉县| 河间市| 长丰县| 太仓市| 东乡族自治县| 沈丘县| 福建省| 宝坻区| 东山县| 孝昌县| 连州市| 四平市| 淳安县| 仁寿县| 贵阳市| 方山县| 普格县|