首頁 > 軟體

分散式架構中關於正向代理反向代理面試提問

2022-03-10 16:00:27

引言

面完了RPC相關的一系列問題,面試官確定我對分散式架構的理論知識和服務間通訊框架(RPC) 確實瞭解了。

接下來又開始問我網路相關的知識,但不是直接問HTTP三次握手,TCP,UPD這些,因為這些基礎已經在一面問完了,這一面只圍繞分散式系統相關的網路概念,從最基本的代理開始。

1、面試官:完看你簡歷提到使用過Nginx做代理,你是如何理解“正向代理”,“反向代理”的?

問題分析: 即使作為業務開發人員也會經常遇到需要設定Nginx或其他負載均衡的問題,比如你做了一個檔案上傳服務,上線後發現檔案被攔截了,看看報錯資訊一看是被Nginx 代理攔截了,Nginx限制了檔案大小,這個時候代理的概念是啥怎麼看明白這個問題呢?

答:

正向代理: 代理使用者端請求伺服器端,相對於伺服器使用者端是匿名的,比如單位內網使用了正向代理軟體,所有員工都存取百度,但是百度看到的只有一個IP地址,百度也不知道到底是哪個員工存取的。

反向代理: 代理伺服器端提供服務,相對於使用者伺服器端是匿名的,同樣是存取www.baidu.com,所有使用者輸入的都是一個網站或者一個IP,但是百度背後有成千上萬的伺服器,你也不知道你存取的是哪一個。

2、面試官:那伺服器端為什麼要使用代理?有啥好處?

問題分析: 面試官點點頭,對我理解的代理表示認可,隨後問我使用代理有什麼用,考察代理技術的原理。

答:比如用 Nginx 做代理,這樣就可以開buffer,Nginx 可以把 Request 請求和 Response 在讀取完整之前 buffer 住,好比飯店服務員,所有顧客要什麼菜和一個服務員說一下就行了,不會直接找廚師,一個服務員接待10個顧客,最後把點的20道菜分發給5個廚子做就行了,廚子好比伺服器,這樣廚子就可以專心做菜了,接待這種事就有Nginx代理做,同時,還可以根據顧客數量多增加或者減少廚師數量,把任務均勻分給每個廚師,這就是負載均衡的作用,Nginx 就可以有效分發流量。

總的來說:

  • 讓IO和伺服器分離,突破IO效能,提高伺服器吞吐能力。
  • 控制流量分發,管理服務叢集,起到負載均衡作用。
  • 安全性和匿名性:通過攔截前端伺服器的請求,反向代理伺服器可以保護其身份,並可以抵禦安全攻擊。它還確保可以從單個記錄定位器或URL存取多個伺服器,而不管伺服器端網路的結構如何。

3、面試官:那你知道哪些負載均衡演演算法?

問題分析: 聊到了負載面試官要繼續深挖演演算法了。

答:

輪詢演演算法:簡單的理解就好比性感荷官線上發牌,從左到右依次發牌,最後每個人獲得的紙牌張數一樣,輪詢演演算法就是將多個使用者請求按順序依次分發到1-10號機器上,目的就是讓每臺機器承受相同的壓力,100W次查詢理論上每臺機器分攤了10W次查詢。

加權輪詢演演算法:輪詢演演算法和加權輪詢演演算法有什麼區別?想象一下,如果10臺伺服器的設定不相同,8臺機器是8核32G,剩下兩臺是4核16G,如果按照演演算法1輪詢,每臺機器分擔10W次請求,那兩臺低配的伺服器說我扛不住呀,你們設定比我好,這不公平,我要宕機休息一下,加權輪詢演演算法就是為了應對這種情況,設定不同機器的權重不同,10臺同設定機器分別均攤10%的流量,如果機器效能不同,那讓兩臺低配的權重降低,只承擔5%的流量,這樣就公平了,能者多勞。每臺機器都不閒著發揮自己最大的效能。

隨機演演算法:隨機演演算法和輪詢演演算法類似,讓所有請求隨機分配到不同的機器上,請求越多最後分散在每臺機器上的請求數約接近相等。

加權隨機演演算法:和加權輪詢演演算法道理相似,這裡不多說了。

最小連線數演演算法:最小連結數就是請求分發以前,先看當前10臺機器誰最清閒,誰當前處理的連結數最少那就把活分給誰,最後的分工也相對公平。

Hash 演演算法:前5種演演算法有一個問題,就是同一個使用者的請求多次,可能每次都會被分配到不同機器上,這樣有什麼不好?如果伺服器快取了使用者 Session,那每次請求不同伺服器都需要儲存使用者的 Session,最壞的結果就是使用者請求10次,10臺伺服器都快取了同一個使用者的 Session,這顯然是浪費伺服器資源。這個時候 Hash 演演算法就出現了,如果讀者還不知道 Hash,建議先 Google 下 Hash,hash(client:ip) % N,N就是伺服器的數量,只要使用者的 IP不變,最後 Hash 取餘的結果就不會變,這樣就能保證同一個使用者每次請求都會在同一臺機器上,這裡的IP還可以是使用者的其他唯一ID。

一致性Hash:hash(client:ip) % N 上面的公式中如果N變了怎麼辦?比如一臺伺服器斷電了,那最後 Hash 取餘的結果就全變了,所有使用者會被分配到哪臺機器需要全部重新計算,這對有 Session 狀態的服務就是一場災難,一致性Hash 就是為了解決這個問題。

深入分析

負載均衡幾乎是各大網際網路公司搭建系統必用的技術了,也會有初學者學習分散式系統時會問我,什麼是負載均衡,為什麼要使用負載均衡,多加一層負載均衡會讓服務呼叫變慢嗎?帶著這些問題學習一下這一章。

先看下沒有負載均衡的網站架構

 不知道你有沒有發現,如果伺服器端是單臺伺服器,直接通過網路就可以連結。為什麼說負載均衡幾乎是各大網際網路公司搭建系統必用的技術,除了個人網站,比如我的部落格還是單體伺服器以外,相信沒有哪家網際網路公司的服務敢這樣,一臺機器如果宕機怎麼辦?讓使用者等一會兒嗎?那估計這家公司離倒閉就不遠了。

那怎麼解決單機故障的問題,再看下面的圖。

 可以看出,多臺伺服器的情況,增加了一層負載均衡。

什麼是負載均衡

 負載平衡(Load balancing)是一種計算機技術,用來在多個計算機(計算機叢集、網路連線、CPU、磁碟驅動器或其他資源中分配負載,以達到最佳化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。 使用帶有負載平衡的多個伺服器元件,取代單一的元件,可以通過冗餘提高可靠性。負載平衡服務通常是由專用軟體和硬體來完成。 主要作用是將大量作業合理地分攤到多個操作單元上進行執行,用於解決網際網路架構中的高並行和高可用的問題。

​ ——— 維基百科

 簡單地理解負載均衡的作用就是流量分發,將大量使用者請求分發到不同伺服器上分擔壓力,如果有機器宕機,負載均衡伺服器會負責把故障機器自動摘除。

常用的負載均衡框架

NginxNGINX | High Performance Load Balancer, Web Server, & Reverse Proxy ,來自俄羅斯的軟體,不光可以用作負載均衡,反向代理,還是出色的web伺服器,使用廣泛,所以也是面試常問的知識點。如果英文不錯可以參考。

LVSThe Linux Virtual Server Project - Linux Server Cluster for Load Balancing ,Linux Virtual Server的縮寫,一個Linux下的開源伺服器叢集系統,章⽂文嵩博⼠士於1998年5月創立。

HAProxy:http://www.haproxy.org/ ,一款高可用http/TCP負載均衡。

F5F5 | Multi-Cloud Security and Application Delivery 硬體負載均衡。

上述都是常見負載均衡,在企業裡具體使用哪種框架並不是絕對的,主要取決於系統的需求和工程師對每個框架的瞭解程度。

一個框架能存活下來一定是具有自己的優點,沒有最好,適合自己的就是最好的。

比如F5,效能出色價格昂貴而出名,從十幾萬到上百萬不等,有強大的售後和技術支援,我工作多年只有工作第一年參加國家電網專案上使用過F5,當時還給了我們一臺測試用的機器,後來辭職後面試別的公司,面試官問我以前的專案組是使用的什麼負載均衡,我說F5,面試官感嘆國家隊果然財大氣粗,我那個時候不瞭解還有什麼其他解決方案,表示F5很奇怪嗎?面試完回家才慢慢了解,原來有很多解決方案,阿里使用LVS,也使用Nginx,美團最初使用Nginx + LVS,以及後來獨立研發的MGW。

有人會問,怎麼一個負載均衡就這麼多種演演算法,心好累,企業開發裡能用這麼多演演算法嗎?真正到企業開發中,一般都只用一種,如果負責的伺服器沒有帶狀態的 Session,也不存在機器設定不相同的情況,那就可以用輪詢或隨機演演算法,工程師根據實際情況選擇最合適自己的演演算法。

正向代理&反向代理

正向代理

生活中的正向代理,打個比方,你想去俄羅斯旅行,需要去使館辦理簽證,手續麻煩,你完全不知道從何下手,這個時候你想到找旅行社,有專門的導遊可你幫你代辦,你只需提供資料就在家等著拿簽證就可以了,你是使用者端,俄羅斯使館是伺服器端,導遊就是代理端。

正向代理就是代理使用者端,伺服器端不知道使用者端是誰。

反向代理 

 網際網路不夠發達的時候,我們都打過10086,有事兒就找客服,全國31個省都有自己的客服中心,每個客服中心都有上百個客服小哥小姐姐,我們不關心給你分配的是誰,只需要接通10086後會自動給你分配客服給你,這就是反向代理。

反向代理就是代理伺服器端,使用者端不知道伺服器端是誰。

 反向代理伺服器可以充當“交通警察”,如上圖,位於後端伺服器(baidu)前面,並以最大化速度和容量利用率的方式在一組伺服器上分發使用者端請求,同時確保沒有一個伺服器過載,可以降低效能。如果伺服器出現故障,負載均衡器會將流量重定向到其它正常的伺服器上。

總結

這一節主要講了負載均衡在網站後臺建設中的應用和代理的概念,負載均衡演演算法和正/反向代理的概念也是面試中容易碰到的基礎問題,是初學者必須掌握的概念。

以上就是分散式架構中關於正向代理反向代理面試提問的詳細內容,更多關於分散式架構正向代理反向代理面試的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com