負載均衡原理剖析與實踐第一篇-介紹篇


負載均衡原理剖析與實踐第一篇-介紹篇

 

系列文章索引

負載均衡詳解第一篇:負載均衡的需求

負載均衡詳解第二篇:服務器負載均衡的基本概念-網絡基礎

負載均衡詳解第三篇:服務器負載均衡的基本概念-使用負載均衡器的服務器群

負載均衡詳解第四篇:服務器負載均衡的基本概念-負載均衡時數據包流程

負載均衡詳解第五篇:服務器負載均衡的基本概念-健康檢查

負載均衡詳解第六篇:服務器負載均衡的基本概念-網絡地址轉換(NAT)

負載均衡詳解第七篇:服務器負載均衡的基本概念-服務器直接返回

負載均衡詳解第八篇:服務器負載均衡技術進階-會話保持(上)

負載均衡詳解第九篇:服務器負載均衡技術進階-會話保持(中)

負載均衡詳解第十篇:服務器負載均衡技術進階-會話保持(下) 

 

前言:相信朋友們對負載均衡應該不陌生了!特別是對搞運維的朋友!可能很多的技術人員認為,負載均衡不是搞IT運維的人管的嗎,關我們開發人員什么事情?曾經,我也是這樣想的,但是后來發現我錯了。開發人員,需要懂性能方面的問題,而負載均衡也是屬於性能的范疇,so…!如果開發人員想繼續不斷的提升自己,走向設計,架構的角色,那么,你就必須對技術的有全面的把握和整體的評估,才能在項目中從軟件和硬件多方面考慮,真正的實現可用性,擴展性,靈活性。

 

    曾經經歷過很多的項目,特別實在做外包的時候,基本上涉及不到什么性能的問題,極少涉及到負載均衡。當我接觸了互聯網之后,常常被人笑話我是搞企業開發的,不懂性能,於是我開始關注性能,也知道有負載均衡,那時候,感覺思維一下子被打開了,發現了一個不一樣的天地!但是負載均衡缺少很多的資料,網絡上很多的地方和文章都只是講了點皮毛,剛要深入的時候,就沒了!

 

    技術,入門容易,學精難!不精,就沒有核心競爭力,因為誰都懂,誰都可以替代你!所以要精!

 

    在這里,我將會深入的剖析負載均衡的原理,使用!甚至你可以感覺到,之后,你可以自己寫一個負載均衡的軟件出來!之后,在分析問題,思考問題的時候,你會游刃有余!

    ….

 

    負載均衡已經不是什么新的概念了,負載均衡也不僅僅就指的把一些服務器放在一起實現分壓。負載均衡是一個統稱。而我們平時談的最多的就是服務器負載均衡,全球負載均衡,防火牆負載均衡,緩存負載均衡!(在后面,會慢慢的講述各個方面)。

 

    就拿服務器負載均衡而言,它主要是把請求分攤在多個服務器資源上面。負載均衡還可以實現很精確的服務器健康檢查機制,請求的轉發。另外,因為負載均衡部署在服務器的前端,所以,它也可以包含服務器免受惡意用戶的攻擊,提高安全。同時,還可以基於IP數據包中的信息進行智能的選擇不同的程序,不同的服務器來處理!

 

    負載均衡的必要性

隨着互聯網的普及,越來越多的人開始在線使用服務。同時,也不能容忍網絡突然崩潰或者網速、服務的性能超低,特別是對於涉及到網上交易的應用而言,任何一點問題的出現,都是重大的經濟損失。為了保證提供更好,更穩定的服務,我們會不斷升級服務器的相關設備。

 

    雖然說根據摩爾定律:計算機的處理速度每18個月會翻一番。但是這個速度依然趕不上互聯網放在的速度和用戶對服務的需要,並且購買更好的設備,不僅僅昂貴,性價比也不理想。

 

    那么這里其實就已經涉及到了一個可伸縮性的挑戰。下面,我們就來看看一些常用的可伸縮性方案。

 

    正如之前所說的,計算機的更新速度無法趕上用戶需要,這個時候集群技術就應用而生了,這個技術主要是那些大型計算機廠商提供的,集群技術的提出在一定的程度上面緩和了之前的問題。下面,我們就來看看兩種比較典型的集群技術:松耦合系統,對稱多處理器系統。

 

松耦合系統

 

    松耦合系統是由很多的完全相同的計算機塊組成,這些計算機塊之間通過系統的總線連接。其中,每一個塊都包含各種的處理器,內存,磁盤控制器,磁盤驅動,網絡接口等。其實,每個塊都可以看出是一個獨立的計算機,只不過現在他們被聚在了一起。下面的草圖顯示這個關系:

 

20120326105512.png

 

    松耦合的計算機集群系統采用處理器通信技術,講負責分攤到多個處理器上面。這個系統只有在任務可以被分割的情況下發揮很好的伸縮性。例如,我們現在有一個任務要去返回一個表中所有的數據,並且這個表中的數據已經分割成為了多個不同的文件,放在磁盤上面。這個時候,采用松耦合的計算機集群技術,就可以講查詢任務分為多個不同的並行的子任務去查詢,每個子任務去一個文件中查找,最后將結果合並后返回。

 

    但是,不是所有的任務都是可以被分割的。例如,有個任務需要去更新之前那個表中的某個字段,那么此時,即使有這個更新任務被再次分割為小的子任務,但是因為需要更新的字段肯定是位於之間的一個文件中的,那就是說:最后只有一個子任務在真正執行,其余的子任務在打混,閑了。

 

    另外,為了使得松耦合的計算機集群系統獲取很好的伸縮性,這個系統還需要很多的技術去支持,也需要很多的人員維護,成本非常的高。

 

對稱多處理器系統

 

    對稱多處理器系統(SMP)采用多核共享內存(其實這也會導致性能問題,現在很多的計算機,特別是多核的服務器,都是采用的非對稱內存的方式,大家感興趣可以去研究下)。在這種系統中,為了達到很好的伸縮性,我們開發的應用程序必須采用多線程的技術(並且,也是需要將一個任務分為結果子任務來運行,而不同的子任務運行在不同的線程上面)。這些線程共享內存,並且通過內在的方式進行通信。同時,操作系統也會去調度這些線程,使得他們運行在多核上面。同樣,這個前面 的系統有這同樣類似的問題。

 

    OK,對之前的兩種方式就簡要的介紹一下。沒有深究,並且不是重點。

 

    下面,我們就看看負載均衡技術出現的一些基礎。

 

我們知道,傳統的交換機和路由器會根據數據包中的IP地址和MAC地址來決定將數據包發送到何處。但是,這個簡單的轉發能力無法滿足現在負責的Web Farm的需求。例如,傳統的路由器或交換機不能夠比較智能的將數據包發送給特定的應用程序、特定的服務器等。即使有服務器down了,路由器等還是會將數據包發給這個服務器。

 

    那么,我們到底如何來實現負載均衡呢?

    首先,我們還看看比較重要的一些理論基礎:OSI網絡模型,如圖

 

20120326105630.png

    這個圖,非常熟悉,我這里只是簡述一下!OSI,就是開放的網絡協議的標准了。從圖中可以看到,這OSI模型,定義了七層,從物理層一直到最上面的應用層。網絡協議,例如Tcp,UDP,IP,Http等分別對應模型中的不同層。其中IP協議處於第三層,TCP,UDP處理第四層。

大家就要問了?這個有啥用呢?

 

    我們又知道:傳統的路由器和交換器會位於OSI的第二或者第三層。也就說,它們決定了一個數據包必須如何被處理以及必須發往何處。盡管第二、三層的交換器做了非常了不起的事情,但是,其實在數據包的頭信息中,有更多的有價值的信息沒有被使用。如果我們在這個時候,將數據包獲取,然后分析里面的頭信息,然后將請求按照我們的需要進行轉發,那么就可以在第二、層實現負載均衡等技術。這也是我們常常看到或者聽到的Layer 2/3 Switching

 

    另外,如果在第四層到第七層中獲取數據包,分析頭信息,然后按需轉發請求,就是所謂的“Layer 4 through 7 Switching”。在第四層中,TCP和UDP的頭中包含了大量的信息,而這些信息可以使得我們更加智能的實現請求的轉發。例如,當用戶發送Http請求到部署到Tcp 80端口的站點的時候,我們可以分析通過分析頭信息得到這個信息,從而可以將請求轉發到其他的服務器上去。

 

    今天先到這里,東西不多,廢話可能一大堆 J!


免責聲明!

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



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