我面試電商行業的經歷-負載均衡


一、發發牢騷

  轉眼之間,在IT行業的道路上已經走過了8載,雖然每天沒日沒夜的辛苦的工作,辛苦的學習,加上年齡越大,學習越吃力,但是仍然跟不上新技術涌現的腳步,有種被技術拋棄的感覺,這是一個技術更新換代日新月異的時代。

知識的積累很重要,從事了很久的編程,但是仔細想起來,沒有那一項技術真正很透徹的了解其原理,每天機械的coding,很少去思考事情的本質。最近,下定決心利用辭職這段時間來梳理一下自己的知識,只有這樣才有所沉淀,才有所積累。

我以前沒有接觸過電商平台,最近一段時間去其它公司面試,和同行交流了一下,發現自己對前端知識一知半解。同時,也對電商網站發生了很大的興趣。其實面試也是一個和同行很好的交流的機會,通過面試可以發現自己知識結構的缺陷,自己的優勢所在,能讓自己更清醒認識自己,選定適合自己的技術方向前進。

最近的面試,發現面試官經常會問到你的職業規划是什么?這也是很多程序員經常思考的問題,畢竟寫程序是個青春飯,大多數程序員一般會想,將來做管理,做架構師。對於不擅長交流的、技術痴迷的程序員,每天專注於技術的程序員,有個更好的警醒作用,更好的思考自己10年以后,當自己成為一個老程序員應該做的事情。

二、服務器負載均衡

  電商平台還是其它平台,都存在系統優化的問題,系統優化大體上而言,主要從網絡、磁盤IO、內存和CPU資源幾個方面考慮。我最近的學習路線也是從這4個方面入手。每一個方面包含的知識太多,我只撿我最近面試時,回答的不是很好的地方來談一談。先談談負載均衡了,有興趣的同行,大家可以互相交流一下,下面是我搜集資料的一點體會。

     web 負載均衡的作用就是把請求均勻的分配給各個節點,它是一種動態均衡,通過一些工具實時地分析數據包,掌握網絡中的數據流量狀況,把請求理分配出去。對於不同的應用環境(如電子商務網站,它的計算負荷大;再如網絡數據庫應用,讀寫頻繁,服務器的存儲子系統系統面臨很大壓力;再如視頻服務應用,數據傳輸量大,網絡接口負擔重壓。),使用的均衡策略 (算法)是不同的。 所以均衡策略(算法)也就有了多種多樣的形式,廣義上的負載均衡既可以設置專門的網關、負載均衡器,也可以通過一些專用軟件與協議來實現。   在OSI七層協議模型中的第二(數據鏈路層)、第三(網絡層)、第四(傳輸層)、第七層(應用層)都有相應的負載均衡策略(算法),在數據鏈路層上實現負載均衡的原理是根據數據包的目的MAC地址選擇不同的路徑;在網絡層上可利用基於IP地址的分配方式將數據流疏通到多個節點;而傳輸層和應用層的交換(Switch),本身便是一種基於訪問流量的控制方式,能夠實現負載均衡。

 

三、負載均衡的算法

服務器的負載均衡算法很多,包括持續性的和非持續性的。基於負載均衡的算法主要有下面幾種:輪循(Round-Robin)、最小連接數(Least Connections First),快速響應優先(Faster Response Precedence),散列算法。

1、輪循算法

   就是將來自網絡的請求依次分配給集群中的節點進行處理。

2、最小連接數算法

就是為集群中的每台服務器設置一個記數器,記錄每個服務器當前的連接數,負載均衡系統總是選擇當前連接數最少的服務器分配任務。 這要比"輪循算法"好很多,因為在有些場合中,簡單的輪循不能判斷哪個節點的負載更低,也許新的工作又被分配給了一個已經很忙的服務器了。

3、快速響應優先算法

根據群集中的節點的狀態(CPU、內存等主要處理部分)來分配任務。 這一點很難做到,事實上到目前為止,采用這個算法的負載均衡系統還很少。尤其對於硬件負載均衡設備來說,只能在TCP/IP協議方面做工作,幾乎不可能深入到服務器的處理系統中進行監測。

四、負載均衡的方式

上面是負載均衡常用的算法,基於以上負載均衡算法的使用方式上,又分為如下幾種:

1、DNS輪詢

最早的負載均衡技術是通過DNS來實現的,在DNS中為多個地址配置同一個名字,因而查詢這個名字的客戶機將得到其中一個地址,從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的。

DNS負載均衡是一種簡單而有效的方法,但是它不能區分服務器的差異,也不能反映服務器的當前運行狀態。當使用DNS負載均衡的時候,必須盡量保證不同的 客戶計算機能均勻獲得不同的地址。由於DNS數據具備刷新時間標志,一旦超過這個時間限制,其他DNS服務器就需要和這個服務器交互,以重新獲得地址數 據,就有可能獲得不同IP地址。因此為了使地址能隨機分配,就應使刷新時間盡量短,不同地方的DNS服務器能更新對應的地址,達到隨機獲得地址,然而將過 期時間設置得過短,將使DNS流量大增,而造成額外的網絡問題。DNS負載均衡的另一個問題是,一旦某個服務器出現故障,即使及時修改了DNS設置,還是要等待足夠的時間才能發揮作用,在此期間,保存了故障服務器地址的客戶計算機將不能正常訪問服務器

2、反向代理服務器

     使用代理服務器,可以將請求轉發給內部的服務器,使用這種加速模式顯然可以提升靜態網頁的訪問速度。然而,也可以考慮這樣一種技術,使用代理服務器將請求均勻轉發給多台服務器,從而達到負載均衡的目的。

   這種代理方式與普通的代理方式有所不同,標准代理方式是客戶使用代理訪問多個外部服務器,而這種代理方式是代理多個客戶訪問內部服務器,因此也被稱為反向代理模式。雖然實現這個任務並不算是特別復雜,然而由於要求特別高的效率,實現起來並不簡單。

使用反向代理的好處是,可以將負載均衡和代理服務器的高速緩存技術結合在一起,提供有益的性能。然而它本身也存在一些問題,首先就是必須為每一種服務都專門開發一個反向代理服務器,這就不是一個輕松的任務。

代理服務器本身雖然可以達到很高效率,但是針對每一次代理,代理服務器就必須維護兩個連接,一個對外的連接,一個對內的連接,因此對於特別高的連接請求,代理服務器的負載也就非常之大。反向代理方式下能應用優化的負載均衡策略,每次訪問最空閑的內部服務器來提供服務。但是隨着並發連接數量的增加,代理服務器本身的負載也變得非常大,最后反向代理服務器本身會成為服務的瓶頸。

3、地址轉換網關

支持負載均衡的地址轉換網關,可以將一個外部IP地址映射為多個內部IP地址,對每次TCP連接請求動態使用其中一個內部地址,達到負載均衡的目的。很多硬件廠商將這種技術集成在他們的交換機中,作為他們第四層交換的一種功能來實現,一般采用隨機選擇、根據服務器的連接數量或者響應時間進行選擇的負載均衡策略來分配負載。由於地址轉換相對來講比較接近網絡的低層,因此就有可能將它集成在硬件設備中,通常這樣的硬件設備是局域網交換機。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM