HTTP權威指南閱讀筆記四 連線管理

2022-01-26 02:28:12 字數 2054 閱讀 2900

http通訊是由tcp/ip承載的,http緊挨著tcp,位於其上層,所以http事務的效能很大程度上取決於底層tcp通道的效能。

http事務的時延

如圖:

http事務的時延有以下幾種主要原因。

(1)客戶端首先需要根據uri確定web伺服器的ip位址和埠號。如果最近沒有對uri中的主機名進行訪問,通過dns解析系統將uri中的主機名轉換成乙個ip位址可能要花費數十秒的時間。

(2)接下來,客戶端會向伺服器傳送一條tcp連線請求,並等待伺服器回送乙個請求接受應答。每條新的tcp連線都會有連線建立時延。這個值通常最多只有一兩秒種,但如果有數百個http事務的話,這個值會快速地疊加上去。

(3)一旦連線建立起來了,客戶端就會通過新建立的tcp管道來傳送http請求。資料到達時,web伺服器會從tcp連線中讀取請求報文,並對請求進行處理。網際網路傳輸請求報文,以及伺服器處理請求報文都需要時間。

(4)然後,web伺服器會回送http響應,這也需要花費時間。

這些tcp網路時延的大小取決於硬體速度、網路和伺服器的負載,請求和響應報文的尺寸,以及客戶端和伺服器之間的距離。tcp協議的技術複雜性也會對時延產生巨大的影響。

效能聚焦區域

(1)tcp連線建立握手:http事務越小,tcp連線建立握手所花時間佔的比例就越大。

(2)tcp慢啟動擁塞控制:tcp連線會隨著時間進行自我「調諧」,起初會限制連線的最大速度,如果資料傳輸成功,會隨著時間的推移提高傳輸速度,主要用於防止網際網路的突然過載和擁塞。由於存在這種擁塞控制特性,所以新連線的傳輸速度會比已經交換過一定量資料的、「已調諧」連線慢一些。

(3)資料聚集的nagle演算法:tcp有乙個資料流介面,應用程式可以通過它將任意尺寸的資料放入tcp棧中——即使一次只放乙個位元組也可以。所以如果tcp傳送了大量包含少數資料的分組,網路的效能就會嚴重下降。nagle演算法試圖在傳送乙個分組前,將大量tcp資料繫結在一起,以提高網路效率。這個演算法會引發幾種http效能問題。首先,小的http報文可能無法填滿乙個分組,可能會因為等待那些永遠不會到來的額外資料而產生時延。其次,nagle演算法與延遲確認之間的互動存在問題——nagle演算法會阻止資料的傳送,直到有確認的分組抵達為止,但確認分組自身會被延遲確認演算法延遲100~200毫秒。http應用程式常常會在自己的棧中設定引數tcp_nodealy,禁止nagle演算法,提高效能。如果要這麼做的話,一定要確保會向tcp寫入大塊的資料,這樣就不會產生一堆小分組。

(4)用於捎帶確認的tcp延遲確認演算法:每個tcp段都有乙個序列號和資料完整性校驗和。每個段的接收者收到完整的段時,都會向傳送者回送小的確認分組。如果傳送者沒有在指定的視窗時間內收到確認資訊,傳送者就認為分組已被破壞或損毀,並重發資料。由於確認報文很小,所以tcp允許在發往相同方向的輸出資料分組中對其進行「捎帶」。為了增加確認報文找到同向傳輸資料分組的可能性,很多tcp棧都實現了一種「延遲確認」演算法。延遲確認演算法會在乙個特定的視窗時間(通常是100~200毫秒)內將輸出確認存放在緩衝區中,以錄找能夠捎帶它的輸出資料分組。如果在那個時間段內沒有輸出資料分組,就將確認資訊放在單獨的分組中傳送。但是http具有雙峰特徵的請求——應答行為降低了捎帶資訊的可能。當希望有相反方向回傳分組的時候,偏偏沒有那麼多。通常,延遲確認演算法會引入相當大的時延。根據所使用作業系統的不同,可以調整或禁止延遲確認演算法。

(5)time_wait時延和埠耗盡:當某個tcp端點關閉tcp連線時,會在記憶體中維護乙個小的控制塊,用來記錄最近所關閉連線的ip位址和埠號。這類資訊只會維持一小段時間,通常是所估計的最大分端使用期的兩倍(稱為2msl,通常為2分鐘)左右,以確保在這段時間內不會建立具有相同位址和埠號的新連線。實際上這個演算法可以防止在兩分鐘內建立、關閉並重新建立兩個具有相同ip 位址和埠號的連線。由於可用源埠的數量有限(比如60000個),而且在2msl秒(比如120秒)內連線是無法重用的,連線速率就被限定在了60000/120 = 500 次/秒。超過這個數字,就會因埠耗盡而失敗。要修正這個問題,可以把2msl設定為乙個較小的值,或增加客戶端負載生成機器的數量,或確保客戶端和伺服器在迴圈使用幾個虛擬ip 位址以增加更多的連線組合。

HTTP權威指南閱讀筆記四 連線管理

http通訊是由tcp ip承載的,http緊挨著tcp,位於其上層,所以http事務的效能很大程度上取決於底層tcp通道的效能。http事務的時延 如圖 http事務的時延有以下幾種主要原因。1 客戶端首先需要根據uri確定web伺服器的ip位址和埠號。如果最近沒有對uri中的主機名進行訪問,通過...

《HTTP權威指南》閱讀筆記

歷時兩個多月,終於把經典圖書 http權威指南 讀完了。雖然看上去厚厚的一本,實際上只要有一些計算機網路基礎,讀起來還是很順利的,並沒有想象中那麼難啃。全書講的很細緻,涵蓋了http的方方面面,其中有一些都是些眾所周知的常識,比如前幾張關於http的基本介紹 url與資源等,但是也值得讀一讀,能夠把...

《HTTP權威指南》閱讀筆記(六)

一 對http 進行解釋,將其與web閘道器進行對比,並說明如何部署 http的 伺服器 分為公共 和私人 是代表客戶端是代表客戶端完成事務的中間人,既是web伺服器又是web客戶端。http客戶端會向 傳送請求報文,伺服器必須向web伺服器一樣,正確的處理請求和連線,然後返回響應。同時,自身要向伺...