您好,登錄后才能下訂單哦!
本篇內容主要講解“分布式架構中正向代理與反向代理的面試題有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“分布式架構中正向代理與反向代理的面試題有哪些”吧!
面完了RPC相關的一系列問題,面試官確定我對分布式架構的理論知識和服務間通訊框架(RPC) 確實了解了。
接下來又開始問我網絡相關的知識,但不是直接問HTTP三次握手,TCP,UPD這些,因為這些基礎已經在一面問完了,這一面只圍繞分布式系統相關的網絡概念,從最基本的代理開始。
問題分析: 即使作為業務開發人員也會經常遇到需要配置Nginx或其他負載均衡的問題,比如你做了一個文件上傳服務,上線后發現文件被攔截了,看看報錯信息一看是被Nginx 代理攔截了,Nginx限制了文件大小,這個時候代理的概念是啥怎么看明白這個問題呢?
答:
正向代理: 代理用戶端請求服務端,相對于服務器用戶端是匿名的,比如單位內網使用了正向代理軟件,所有員工都訪問百度,但是百度看到的只有一個IP地址,百度也不知道到底是哪個員工訪問的。
反向代理: 代理服務端提供服務,相對于用戶服務端是匿名的,同樣是訪問www.baidu.com,所有用戶輸入的都是一個網站或者一個IP,但是百度背后有成千上萬的服務器,你也不知道你訪問的是哪一個。
問題分析: 面試官點點頭,對我理解的代理表示認可,隨后問我使用代理有什么用,考察代理技術的原理。
答:比如用 Nginx 做代理,這樣就可以開buffer,Nginx 可以把 Request 請求和 Response 在讀取完整之前 buffer 住,好比飯店服務員,所有顧客要什么菜和一個服務員說一下就行了,不會直接找廚師,一個服務員接待10個顧客,最后把點的20道菜分發給5個廚子做就行了,廚子好比服務器,這樣廚子就可以專心做菜了,接待這種事就有Nginx代理做,同時,還可以根據顧客數量多增加或者減少廚師數量,把任務均勻分給每個廚師,這就是負載均衡的作用,Nginx 就可以有效分發流量。
總的來說:
讓IO和服務器分離,突破IO性能,提高服務器吞吐能力。
控制流量分發,管理服務集群,起到負載均衡作用。
安全性和匿名性:通過攔截前端服務器的請求,反向代理服務器可以保護其身份,并可以抵御安全攻擊。它還確保可以從單個記錄定位器或URL訪問多個服務器,而不管服務端網絡的結構如何。
問題分析: 聊到了負載面試官要繼續深挖算法了。
答:
輪詢算法:簡單的理解就好比性感荷官在線發牌,從左到右依次發牌,最后每個人獲得的紙牌張數一樣,輪詢算法就是將多個用戶請求按順序依次分發到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、磁碟驅動器或其他資源中分配負載,以達到最佳化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。 使用帶有負載平衡的多個伺服器組件,取代單一的組件,可以通過冗余提高可靠性。負載平衡服務通常是由專用軟件和硬件來完成。 主要作用是將大量作業合理地分攤到多個操作單元上進行執行,用于解決互聯網架構中的高并發和高可用的問題。
——— 維基百科
簡單地理解負載均衡的作用就是流量分發,將大量用戶請求分發到不同服務器上分擔壓力,如果有機器宕機,負載均衡服務器會負責把故障機器自動摘除。
Nginx
:NGINX | High Performance Load Balancer, Web Server, & Reverse Proxy ,來自俄羅斯的軟件,不光可以用作負載均衡,反向代理,還是出色的web服務器,使用廣泛,所以也是面試常問的知識點。如果英文不錯可以參考。
LVS
:The Linux Virtual Server Project - Linux Server Cluster for Load Balancing ,Linux Virtual Server的縮寫,一個Linux下的開源服務器集群系統,章?文嵩博?士于1998年5月創立。
HAProxy
:http://www.haproxy.org/ ,一款高可用http/TCP負載均衡。
F5
:F5 | Multi-Cloud Security and Application Delivery 硬件負載均衡。
上述都是常見負載均衡,在企業里具體使用哪種框架并不是絕對的,主要取決于系統的需求和工程師對每個框架的了解程度。
一個框架能存活下來一定是具有自己的優點,沒有最好,適合自己的就是最好的。
比如F5,性能出色價格昂貴而出名,從十幾萬到上百萬不等,有強大的售后和技術支持,我工作多年只有工作第一年參加國家電網項目上使用過F5,當時還給了我們一臺測試用的機器,后來辭職后面試別的公司,面試官問我以前的項目組是使用的什么負載均衡,我說F5,面試官感嘆國家隊果然財大氣粗,我那個時候不了解還有什么其他解決方案,表示F5很奇怪嗎?面試完回家才慢慢了解,原來有很多解決方案,阿里使用LVS,也使用Nginx,美團最初使用Nginx + LVS,以及后來獨立研發的MGW。
有人會問,怎么一個負載均衡就這么多種算法,心好累,企業開發里能用這么多算法嗎?真正到企業開發中,一般都只用一種,如果負責的服務器沒有帶狀態的 Session,也不存在機器配置不相同的情況,那就可以用輪詢或隨機算法,工程師根據實際情況選擇最合適自己的算法。
生活中的正向代理,打個比方,你想去俄羅斯旅行,需要去使館辦理簽證,手續麻煩,你完全不知道從何下手,這個時候你想到找旅行社,有專門的導游可你幫你代辦,你只需提供資料就在家等著拿簽證就可以了,你是客戶端,俄羅斯使館是服務端,導游就是代理端。
正向代理就是代理客戶端,服務端不知道客戶端是誰。
互聯網不夠發達的時候,我們都打過10086,有事兒就找客服,全國31個省都有自己的客服中心,每個客服中心都有上百個客服小哥小姐姐,我們不關心給你分配的是誰,只需要接通10086后會自動給你分配客服給你,這就是反向代理。
反向代理就是代理服務端,客戶端不知道服務端是誰。
反向代理服務器可以充當“交通警察”,如上圖,位于后端服務器(baidu)前面,并以最大化速度和容量利用率的方式在一組服務器上分發客戶端請求,同時確保沒有一個服務器過載,可以降低性能。如果服務器出現故障,負載均衡器會將流量重定向到其它正常的服務器上。
到此,相信大家對“分布式架構中正向代理與反向代理的面試題有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。