秒懂負載均衡與反向代理
前言
作為一名主要從事移動前端開發的碼農,對後端的技術也是比較感興趣。以前總是聽說負債均衡與反向代理,但是一直搞不清楚這兩個東西,就是感覺好厲害的樣子,調查一番後決定記錄如下,以便將來查閱。
概述
首先負載均衡與反向代理都是C/S 或者B/S系統後端架構方面的知識。那麼什麼是負載均衡,什麼又是反向代理呢?二者有什麼異同,他們用來解決什麼問題?具體如何搭建?(本文不會涉及,因為我目前沒有實際的搭建經驗,希望以後可以學習相關技術)
負載均衡( Load Balancing)
那負載均衡是幹什麼用的呢?這個涉及到了分散式系統的設計。例如我們現在有兩臺伺服器(Server1和Server2)為使用者提供服務,如果沒有負載均衡就有可能出現95%的使用者都去訪問Server1,而只有5%的使用者訪問Server2。那樣不就出現Server1快被壓死了,而Server2工作負荷完全不滿的情況嗎。我們當然希望將使用者的訪問均衡的分配到這兩天伺服器上,那樣對我們的系統是最有利的,這就是負載均衡最大的意義。
負載均衡:將客戶端的請求按照一定的規則分配到一群伺服器上,並將處理結果返回給相應的客戶端。
所以如果我們現在訪問百度伺服器,請求首先是發到了是其負載均衡上面,Ip地址也是負載均衡的,我們對其後臺的伺服器叢集一無所知。
負載均衡實現方式
- 單獨的專門做負載均衡的硬體裝置。
- 軟體方式,不需要特定的裝置。
負載均衡的作用
- 負責排程客戶端請求,使其按照最優方式分配到不同的伺服器上執行,避免其中某臺伺服器過載。
- 消除單點失敗,這個比較好理解,因為我們有多臺伺服器,如果其中某一臺發生了錯誤,可以由其他伺服器完成請求。
- 通過減少錯誤返回結果提升使用者體驗,因為負載均衡可以檢查某一臺伺服器是否存在問題,如果發現存在問題,它就會將請求安排到其他執行良好的伺服器上執行,所以使用者很少會接到返回失敗的錯誤。
- session持久化( session persistence),這個名詞的意思就是在一個
session
有效期內,將某一個客戶端的所有請求都交給同一個伺服器執行。這有什麼意義呢?假設我們在淘寶上購物,好不容易花了兩小時選了兩件心儀的寶貝放到了購物車裡面,發現新增第三件的時候前兩件不見了,那你是不是想問候一下阿里程式設計師老媽?為什麼會這樣,因為Http
是無狀態的,我們使用session
維護狀態,那假設前兩件商品的操作是在Server1上完成的,而第三件商品是在Server2上完成的,那麼這種糟糕的情況就出現了,因為Server2第一次接到這個session
。
反向代理(Reverse Proxy)
首先應該明白什麼是代理和正向代理,代理應該不用多解釋了,理解成中間人就可以了。什麼是正向代理,正向代理是內網通過代理訪問外網,這個代理就是正向代理。而反向代理是指,外網通過代理訪問內網,那這個代理就是反向代理。
假設把你公司的網看成是內網,那麼你從公司裡面的一臺電腦上訪問你家裡的電腦上的服務,那就的通過正向代理,而你從你家電腦訪問公司的這臺電腦,就要通過反向代理。
反向代理與負載均衡一樣,也是位於客戶端與伺服器之間,客戶端向伺服器發起的請求都是先經過反向代理,然後分發到伺服器上,然後伺服器將返回結果交給反向代理,反向代理在交給客戶端。
反向代理的作用
- 增強了安全性。首先,你背後的伺服器是在反向代理後面的,其不會暴露任何資訊到網路上,所以可以防止惡意攻擊。第二可以防止DDoS( distributed denial-of-service)攻擊,例如通過限制某一IP訪問,限制每個客戶端的訪問次數等。
- 增強了可伸縮性與靈活性。因為客戶端只能看到反向代理的Ip地址,所以我們就可以靈活的改變其後面伺服器的配置。
- 加速Web訪問速度。第一:將返回結果壓縮後交給客戶端,這樣就會節省網路頻寬,從而加快速度。第二:將請求的加密解密操作放在反向代理伺服器上行執行。第三:在反向代理伺服器上做快取。
二者區別
最大的區別就是負載均衡只有在伺服器大於2臺的時候才有意義,其主要側重於將負載均衡到各個伺服器上。
相關文章
- 代理與反向代理、負載均衡和快取負載快取
- 誰說前端不需要懂-Nginx反向代理與負載均衡前端Nginx負載
- 介紹下Nginx 反向代理與負載均衡Nginx負載
- nginx詳解反向代理負載均衡Nginx負載
- nginx面試題-nginx負載均衡與正反向代理Nginx面試題負載
- Nginx負載均衡反向代理伺服器Nginx負載伺服器
- [原創]Nginx反向代理及負載均衡Nginx負載
- 【Nginx】Nginx反向代理和負載均衡部署Nginx負載
- Nginx伺服器的使用與反向代理負載均衡Nginx伺服器負載
- nginx反向代理負載均衡與動靜頁面分離Nginx負載
- Nginx入門(2)反向代理和負載均衡Nginx負載
- Nginx反向代理負載均衡的容器化部署Nginx負載
- docker下nginx反向代理和負載均衡配置DockerNginx負載
- nginx+tomcat反向代理負載均衡配置NginxTomcat負載
- nginx配置web服務|反向代理|負載均衡NginxWeb負載
- nginx反向代理和負載均衡策略實戰案例Nginx負載
- nginx+tomcat實現反向代理+負載均衡NginxTomcat負載
- 圖解Nginx,系統架構演變 + Nginx反向代理與負載均衡圖解Nginx架構負載
- centos7下配置nginx反向代理負載均衡叢集CentOSNginx負載
- Nginx反向代理+負載均衡簡單實現(https方式)Nginx負載HTTP
- Nginx代理功能與負載均衡詳解Nginx負載
- Nginx搭建反向代理負載均衡和web快取伺服器Nginx負載Web快取伺服器
- Apache配置反向代理、負載均衡和叢集(mod_proxy方式)Apache負載
- 【SpringCloud】(十五):Zuul的基本應用,反向代理和負載均衡SpringGCCloudZuul負載
- 代理和負載均衡概述負載
- 如何使用 Weave 以及 Docker 搭建 Nginx 反向代理/負載均衡伺服器DockerNginx負載伺服器
- 一文讀懂“負載均衡”負載
- Nginx 全模組安裝及匹配方式、反向代理和負載均衡配置Nginx負載
- nginx反向大理和負載均衡以及高可用Nginx負載
- nginx反向代理負載均衡帶你突破單臺伺服器的瓶頸Nginx負載伺服器
- 在windows環境下 nginx + .net core 3.1 實現反向代理和負載均衡WindowsNginx負載
- 在Linux中,nginx反向代理和負載均衡實現原理是什麼?LinuxNginx負載
- k8s給多個外部靜態IP作負載均衡、反向代理K8S負載
- 一文秒懂分散式、叢集、負載均衡之間的區別分散式負載
- 循序漸進nginx(二):反向代理、負載均衡、快取服務、靜態資源訪問Nginx負載快取
- nginx之 nginx-1.9.7 + tomcat-8.5.15 反向代理+應用負載均衡 安裝配置NginxTomcat負載
- 負載均衡簡介與搭建負載
- 負載均衡負載