秒懂負載均衡與反向代理

ShuSheng007發表於2018-08-22

前言

作為一名主要從事移動前端開發的碼農,對後端的技術也是比較感興趣。以前總是聽說負債均衡與反向代理,但是一直搞不清楚這兩個東西,就是感覺好厲害的樣子,調查一番後決定記錄如下,以便將來查閱。

概述

首先負載均衡反向代理都是C/S 或者B/S系統後端架構方面的知識。那麼什麼是負載均衡,什麼又是反向代理呢?二者有什麼異同,他們用來解決什麼問題?具體如何搭建?(本文不會涉及,因為我目前沒有實際的搭建經驗,希望以後可以學習相關技術)

負載均衡( Load Balancing)

那負載均衡是幹什麼用的呢?這個涉及到了分散式系統的設計。例如我們現在有兩臺伺服器(Server1和Server2)為使用者提供服務,如果沒有負載均衡就有可能出現95%的使用者都去訪問Server1,而只有5%的使用者訪問Server2。那樣不就出現Server1快被壓死了,而Server2工作負荷完全不滿的情況嗎。我們當然希望將使用者的訪問均衡的分配到這兩天伺服器上,那樣對我們的系統是最有利的,這就是負載均衡最大的意義。

負載均衡:將客戶端的請求按照一定的規則分配到一群伺服器上,並將處理結果返回給相應的客戶端。

所以如果我們現在訪問百度伺服器,請求首先是發到了是其負載均衡上面,Ip地址也是負載均衡的,我們對其後臺的伺服器叢集一無所知。

負載均衡實現方式

  1. 單獨的專門做負載均衡的硬體裝置。
  2. 軟體方式,不需要特定的裝置。

負載均衡的作用

  1. 負責排程客戶端請求,使其按照最優方式分配到不同的伺服器上執行,避免其中某臺伺服器過載。
  2. 消除單點失敗,這個比較好理解,因為我們有多臺伺服器,如果其中某一臺發生了錯誤,可以由其他伺服器完成請求。
  3. 通過減少錯誤返回結果提升使用者體驗,因為負載均衡可以檢查某一臺伺服器是否存在問題,如果發現存在問題,它就會將請求安排到其他執行良好的伺服器上執行,所以使用者很少會接到返回失敗的錯誤。
  4. session持久化( session persistence),這個名詞的意思就是在一個session有效期內,將某一個客戶端的所有請求都交給同一個伺服器執行。這有什麼意義呢?假設我們在淘寶上購物,好不容易花了兩小時選了兩件心儀的寶貝放到了購物車裡面,發現新增第三件的時候前兩件不見了,那你是不是想問候一下阿里程式設計師老媽?為什麼會這樣,因為Http是無狀態的,我們使用session維護狀態,那假設前兩件商品的操作是在Server1上完成的,而第三件商品是在Server2上完成的,那麼這種糟糕的情況就出現了,因為Server2第一次接到這個session

反向代理(Reverse Proxy)

首先應該明白什麼是代理和正向代理,代理應該不用多解釋了,理解成中間人就可以了。什麼是正向代理,正向代理是內網通過代理訪問外網,這個代理就是正向代理。而反向代理是指,外網通過代理訪問內網,那這個代理就是反向代理。
假設把你公司的網看成是內網,那麼你從公司裡面的一臺電腦上訪問你家裡的電腦上的服務,那就的通過正向代理,而你從你家電腦訪問公司的這臺電腦,就要通過反向代理

反向代理與負載均衡一樣,也是位於客戶端與伺服器之間,客戶端向伺服器發起的請求都是先經過反向代理,然後分發到伺服器上,然後伺服器將返回結果交給反向代理,反向代理在交給客戶端。

反向代理的作用

  1. 增強了安全性。首先,你背後的伺服器是在反向代理後面的,其不會暴露任何資訊到網路上,所以可以防止惡意攻擊。第二可以防止DDoS( distributed denial-of-service)攻擊,例如通過限制某一IP訪問,限制每個客戶端的訪問次數等。
  2. 增強了可伸縮性與靈活性。因為客戶端只能看到反向代理的Ip地址,所以我們就可以靈活的改變其後面伺服器的配置。
  3. 加速Web訪問速度。第一:將返回結果壓縮後交給客戶端,這樣就會節省網路頻寬,從而加快速度。第二:將請求的加密解密操作放在反向代理伺服器上行執行。第三:在反向代理伺服器上做快取。

二者區別

最大的區別就是負載均衡只有在伺服器大於2臺的時候才有意義,其主要側重於將負載均衡到各個伺服器上。

相關文章