基礎知識,負載均衡和應用優化基礎

原文:http://bbs.linuxtone.org/thread-17094-1-1.html

負載均衡就是將負載(工作任務)進行平衡、分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務。更多解釋見百度百科http://baike.baidu.com/view/51184.htm

負載均衡的作用:把不同的客戶端的請求通過負載均衡策略分配到不同的服務器上去。

負載均衡的基本工作方式:通過更改請求的目的地址對請求進行轉發,在服務器返回數據包的時候更改返回數據包的源地址保證客戶端請求的目的和返回包是同一個地址。

負載均衡設計的三個要素:分發策略、會話保持和服務器健康檢查。
1、分發策略:即負載均衡設備根據什麼樣的策略把請求分發到不同的後臺服務器上。最簡單的算法就是輪詢,把用戶的請求依次分配到服務器上。
2、會話保持:在大部分的應用中都會涉及到服務器Session控制。而且這些Session通常不會在服務器之間進行復制的。也就是說一個用戶在登錄的時候,如果分配到了某一臺服務器上,則最基本的要求就是這個用戶後續的請求都分配到這臺服務器上。如果分配到其他的服務器上則可能不認識這個用戶的請求,而造成請求失敗。最簡單的會話保持策略是源地址會話保持,也就是負載均衡設備認爲同一個源地址過來的所有請求都是發自於同一個客戶端。在源地址會話保持的情況下,一個客戶端的第一個請求會按照負載均衡策略進行分配,一旦分配了一臺服務器之後,後續的請求都會發到這臺服務器。當然,對於一些應用如新聞、圖片等靜態的內容就不需要會話保持了。
3、健康檢查:負載均衡設備必須檢測後臺服務器是否在正常工作,如果發現某一臺服務器出現了故障,則需要把這臺服務器從負載均衡組裏面摘掉。當故障服務器恢復服務的時候,再把服務器重新加入到負載均衡組裏面進行處理。

四層負載均衡:

就是以TCP的一個連接爲最小單位,也就是以一個Socket連接的最小單位來進行轉發,在一個Socket裏面跑了多少個交易和負載均衡無關。

七層負載均衡:

負載均衡設備可以按照協議識別每一筆交易,並以每個交易爲最小單位進行轉發。

比如在一個HTTP 1.1的連接中可以包含多個Request/Response,四層負載均衡一旦在確定第一個連接的分配後,就不能對後續的request /response進行後續處理了。而七層負載均衡處理能把每一個http request/response分別進行處理。


負載均衡實際上有多種方式:
1DNS負載均衡,通過DNS協議實現,對於同一個域名,DNS可以同時提供多個IP地址對應,瀏覽器會選擇第一個地址發出請求,而多個DNS地址在 Local DNS返回給客戶端的時候會輪詢返回,所以不同的用戶得到的第一個地址是不一樣的。因此,對一個域名提供多個地址可以實現負載均衡的效果。另外一種DNS 負載均衡的方式是DNS服務器判斷客戶端local DNS的源地址,根據不同的源地址返回不同的IP地址和域名對應。比如來源是網通,就返回網通的服務器地址,來源是電信,就返回電信的服務器地址。這樣也能實現負載均衡的效果。
2NAT負載均衡,在前面一貼已經講過了,就不多說了。
3、重定向負載均衡,一些協議比如HTTP是可以支持重定向的,負載均衡設備通過算法決定用戶的請求應該去某臺服務器的時候,就返回一個302重定向指令使用戶重新發送一個請求到目的服務器。這樣實現負載均衡。在實際的網站環境中,由於每個編程人員的考慮角度不同,很多時候開發人員考慮的是如何實現功能和業務,很少考慮訪問速度究竟如何。他們的開發環境都是很好的100M1000M的網絡環境,而實際應用中客戶端可能來自於任何的地點和位置,有國外的訪問、CDMAGPRS、跨運營商等都有可能。當這些用戶訪問一個不優化的網站的時候,就會暴露出各種各樣的問題了。

訪問優化分爲兩個部分,客戶端優化和服務器端優化:


客戶端優化
主要是優化客戶端的訪問速度。客戶端的訪問優化可以通過以下幾種技術手段:
1、多併發連接,默認情況下,IE 7.0和以下或者Firefox對於同一個域名或地址,都只會用兩個TCP連接訪問網站,當一個網站上有幾十個對象(js,CSS,jpg,gif等)。這些對象就都會在兩個TCP連接中按照request/response方式依次下載。在局域網沒什麼感覺,但一到了廣域網環境下,由於廣域網的延遲就會造成TCP傳輸效率急劇下降(因爲延遲在每一次數據包的傳輸過程中都會被加入)。解決的辦法就是使用多個域名來下載這些對象,即使這些域名都對應同一個 IP,瀏覽器也會併發多個連接同時去下載對象。這也是Flashget,網絡螞蟻下載東西比單獨IE下載速度快的一個主要原因。
2HTTP壓縮,大部分的瀏覽器,比如IEFirefox都可以支持gzipdeflat兩種協議的解壓縮。而HTTP 的頁面內容大部分都是以明文,所以,把服務器返回的內容進行壓縮後,傳輸給客戶端,客戶端再進行解壓縮。通常情況下,壓縮比可以到1:5,也就是100K 的頁面可以壓縮到20K,這樣,在網絡上傳輸的數據量就小了很多。客戶端打開頁面的速度也快了許多。
3CDN技術,將內容推送到離客戶端比較近的地方。因此可以加快客戶端的頁面打開速度,同時降低服務器壓力。

服務器端優化:主要是減輕服務器的壓力
1Cache技術,通過大量的內存Cache服務器,可以有效的降低後臺服務器的壓力。避免將業務服務器直接暴露在前端。專門設計的Cache服務器通常具有比常規的Web服務器更好的處理性能。
2、在一些商業版本的負載均衡設備中,還提供了連接優化,也就是把很多個客戶端的TCP連接聚合成少量的TCP連接到後臺服務器(類似移動通信核心網中的隧道技術),這樣後臺服務器就不用頻繁開啓和關閉TCP連接了,從而達到降低服務器CPU佔用率的目的。SSL硬件加解密技術,可以直接通過硬件SSL芯片進行SSL加解密的工作。其他還有一些功能就不在這裏討論了。

TCP層面優化:
主要通過調整服務器內核的TCP堆棧參數實現,在新的Linux版本包括Windows Server 2008裏面都有很多的TCP 堆棧參數調整項,默認值不一定是最好的,有些時候通過一些調整能對應用系統有很大的幫助。這一塊俺現在還不是很清楚怎麼調整,有興趣的同學可以討論一下。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章