作者:MobotStone
1、什么是延遲呢?
延遲其實(shí)就是我們?cè)诰W(wǎng)頁瀏覽或者使用應(yīng)用時(shí),從我們點(diǎn)擊請(qǐng)求到服務(wù)器返回結(jié)果給我們之間的時(shí)間差。就像你在跟朋友打電話,你說完話后,朋友聽到并回應(yīng)你所說話的時(shí)間差一樣。
我們的最終目標(biāo)是創(chuàng)建一個(gè)系統(tǒng),讓這個(gè)時(shí)間差變得盡可能短,也就是實(shí)現(xiàn)零延遲。但現(xiàn)實(shí)世界中,有各種各樣的問題會(huì)導(dǎo)致系統(tǒng)出現(xiàn)延遲。如果系統(tǒng)的延遲很低,那么我們請(qǐng)求得到響應(yīng)的時(shí)間就會(huì)很短。每次你在瀏覽器中輸入網(wǎng)址或者點(diǎn)擊一個(gè)鏈接,瀏覽器都會(huì)向服務(wù)器發(fā)出一個(gè)請(qǐng)求信號(hào),然后服務(wù)器需要處理這個(gè)請(qǐng)求,獲取需要的信息,最后把這些信息返回給你的瀏覽器。整個(gè)過程中就會(huì)有一些時(shí)間差,這就是延遲。所以,我們要不斷努力降低延遲,提高系統(tǒng)的響應(yīng)速度。
2、延遲是怎么回事呢?
延遲其實(shí)就是你在請(qǐng)求后需要等待的時(shí)間,就像等待快遞送到家門一樣。來看個(gè)例子,更容易理解它是怎么運(yùn)作的。
想象你正在和一個(gè)電子商務(wù)網(wǎng)站(比如淘寶)互動(dòng),你喜歡一個(gè)商品,然后把它加入購物車。現(xiàn)在,當(dāng)你點(diǎn)擊“添加到購物車”按鈕時(shí),下面的事情會(huì)依次發(fā)生:
你點(diǎn)擊了“添加到購物車”按鈕,這時(shí)就像你啟動(dòng)了一個(gè)計(jì)時(shí)器,瀏覽器開始向服務(wù)器發(fā)請(qǐng)求。
服務(wù)器收到請(qǐng)求,然后開始處理它,就像你的快遞訂單到了快遞中心一樣。
服務(wù)器處理完后,回應(yīng)你的請(qǐng)求,信息到達(dá)你的瀏覽器,商品成功添加到購物車中,就像你的包裹送到了家門口一樣。
你可以想象在第一步按下了計(jì)時(shí)器的啟動(dòng)按鈕,然后在最后一步停下,這段時(shí)間就是延遲。希望這個(gè)例子能讓你更容易理解延遲是如何運(yùn)作的。
3、延遲都是怎么來的呢?
現(xiàn)在,你應(yīng)該已經(jīng)理解了要點(diǎn),但是你知道是什么造成了延遲嗎?網(wǎng)絡(luò)中的延遲受多種因素影響,它們?cè)诖_定延遲的具體數(shù)值時(shí)扮演著關(guān)鍵角色。其中一個(gè)主要因素是出站呼叫。回到之前添加購物車的例子,當(dāng)你點(diǎn)擊瀏覽器上的按鈕時(shí),請(qǐng)求會(huì)發(fā)送到后端的某個(gè)服務(wù)器,這個(gè)服務(wù)器可能會(huì)在內(nèi)部調(diào)用多個(gè)服務(wù)來進(jìn)行計(jì)算(可能是同時(shí)或者按順序),然后等待它們的響應(yīng)或?qū)⑺鼈儏R總。所有這些因素都會(huì)增加呼叫的延遲。但總結(jié)起來,主要由以下幾個(gè)因素引起:
傳輸介質(zhì):傳輸介質(zhì)指的是信息在起點(diǎn)和終點(diǎn)之間的物理路徑。系統(tǒng)的延遲會(huì)取決于用于傳輸請(qǐng)求的介質(zhì)類型。廣域網(wǎng)、光纖電纜等傳輸介質(zhì)都廣泛應(yīng)用,但每種介質(zhì)都有自己的限制,這會(huì)影響延遲。
傳播延遲:這指的是數(shù)據(jù)包從一個(gè)源傳播到另一個(gè)源所需的時(shí)間。系統(tǒng)的延遲很大程度上取決于通信節(jié)點(diǎn)之間的距離。節(jié)點(diǎn)距離越遠(yuǎn),系統(tǒng)的延遲就會(huì)越高。
路由器:路由器在通信中扮演著重要的角色,它們需要一些時(shí)間來分析數(shù)據(jù)包的標(biāo)頭信息。延遲取決于路由器處理請(qǐng)求的效率。每一次路由器到路由器的跳躍都會(huì)增加系統(tǒng)的延遲。
存儲(chǔ)延遲:系統(tǒng)的延遲還受到所使用的存儲(chǔ)系統(tǒng)類型的影響,因?yàn)樘幚砗头祷財(cái)?shù)據(jù)可能需要一些時(shí)間。因此,訪問存儲(chǔ)中的數(shù)據(jù)會(huì)增加系統(tǒng)的延遲。
4、如何測量延遲?
要量化延遲其實(shí)很簡單,我們有幾種常用的方法,讓我們來看看最常見的三種:
Ping(網(wǎng)絡(luò)探測):Ping是測量延遲最常用的工具之一。它的原理是向目標(biāo)地址發(fā)送一個(gè)小數(shù)據(jù)包,然后查看接收到響應(yīng)所需的時(shí)間。更快的Ping意味著連接更敏捷,響應(yīng)更迅速。
Traceroute(路徑跟蹤):Traceroute是另一個(gè)用于測試延遲的工具。它也使用數(shù)據(jù)包,但不止如此,它還會(huì)逐一記錄數(shù)據(jù)包從源到目的地經(jīng)過的每個(gè)中間節(jié)點(diǎn)所需的時(shí)間。這有助于識(shí)別網(wǎng)絡(luò)中的延遲點(diǎn)。
MTR(網(wǎng)絡(luò)診斷工具):MTR是Ping和Traceroute的超級(jí)組合。MTR提供了詳盡的報(bào)告,列出了從一個(gè)端點(diǎn)到另一個(gè)端點(diǎn)所需的每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)的信息。這份報(bào)告通常包括了各種細(xì)節(jié),比如丟包率、平均延遲等,非常有助于分析網(wǎng)絡(luò)性能。
5、延遲優(yōu)化
延遲是系統(tǒng)性能的絆腳石,所以我們需要采取一些措施來進(jìn)行優(yōu)化。下面是一些簡單又實(shí)用的方法,可以幫助我們減少延遲:
采用HTTP/2:使用HTTP/2協(xié)議可以顯著減少延遲。它支持并行傳輸,最大程度地減少了數(shù)據(jù)從發(fā)送方到接收方的往返次數(shù),這對(duì)于降低延遲非常有效。
減少外部HTTP請(qǐng)求:第三方服務(wù)會(huì)增加延遲。通過減少外部HTTP請(qǐng)求的數(shù)量,我們可以提高系統(tǒng)的響應(yīng)速度和質(zhì)量。
使用CDN:內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)被證明能夠減少延遲。CDN會(huì)在全球多個(gè)位置緩存資源,從而減少請(qǐng)求和響應(yīng)的傳輸時(shí)間。這意味著可以從更接近客戶端的緩存位置獲取請(qǐng)求,而不必每次都回到原始服務(wù)器。
瀏覽器緩存:利用瀏覽器緩存,可以減少向服務(wù)器發(fā)送的請(qǐng)求次數(shù),從而降低延遲。瀏覽器會(huì)在本地緩存特定資源,這對(duì)于提高頁面加載速度很有幫助。
優(yōu)化磁盤I/O:為了減小磁盤I/O的影響,我們需要優(yōu)化算法,盡量減少頻繁的磁盤寫入操作。可以考慮使用直寫式緩存、內(nèi)存數(shù)據(jù)庫,或者在適當(dāng)?shù)那闆r下進(jìn)行寫入合并,還可以考慮使用快速存儲(chǔ)系統(tǒng),比如SSD。
作為開發(fā)人員,我們還可以在應(yīng)用程序級(jí)別采取一些方法來優(yōu)化延遲:
避免低效算法:高效的算法是代碼中延遲的主要來源之一。要盡量避免不必要的循環(huán)或昂貴的嵌套操作。
避免鎖定的設(shè)計(jì)模式:鎖定會(huì)引入延遲,因此我們應(yīng)該采用避免鎖定的設(shè)計(jì)模式,特別是在多線程環(huán)境中。
采用異步編程模型:異步編程可以更好地利用硬件資源,因?yàn)樗苊饬俗枞僮鳎瑥亩鴾p少等待時(shí)間。
限制無界隊(duì)列深度:限制無界隊(duì)列深度并提供反壓通常可以減少代碼中的等待時(shí)間,從而產(chǎn)生更可預(yù)測的延遲。
這些方法可以幫助我們優(yōu)化延遲,提高系統(tǒng)性能,讓用戶獲得更好的體驗(yàn)。
審核編輯:黃飛
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
8701瀏覽量
84541 -
路由器
+關(guān)注
關(guān)注
22文章
3641瀏覽量
112801 -
計(jì)時(shí)器
+關(guān)注
關(guān)注
1文章
414瀏覽量
32485 -
CDN
+關(guān)注
關(guān)注
0文章
306瀏覽量
28672
原文標(biāo)題:網(wǎng)絡(luò)延遲簡介:為什么它重要,如何測量
文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論