從 ping 中取得的資料:是往返還是單向?

從 ping 中取得的資料:是往返還是單向?

我有 2 台伺服器,每台伺服器位於兩個不同的位置。我需要在其中一台上託管應用程序,在另一台上託管資料庫伺服器。

如果我從應用程式伺服器 ping 資料庫伺服器,平均會得到大約 30 毫秒。

我的問題是:

When I query the database from the app;

是否需要30 ms + database_server_query_run_time

或者;

是否需要30 ms + database_server_query_run_time+ 30毫秒

我想了解這一點。

答案1

通常需要比這兩個選項更多的時間。

Ping 僅測量從客戶端到伺服器再傳回的時間(rtt - 往返時間)

通常資料庫使用 TCP,因此您首先需要發送 SYN 封包來啟動 TCP 握手(為了簡化,假設 15ms* + cpu 時間,然後接收 SYN/ACK(15ms+cpu 時間),發回 ACK 和請求(至少15 毫秒+ cpu 時間),然後是資料庫處理查詢的時間,然後是取回資料的時間(15 毫秒+ cpu),還有一點時間來確認並關閉連線。

這當然不包括資料庫的身份驗證(使用者名稱/密碼),也沒有加密(ssl 握手/DH 或任何需要的內容)。

*一半的往返時間,假設往返路線是對稱的(一半的時間到達那裡,一半的時間返回...... ping 回复的 cpu 處理時間非常短)

答案2

ping 時間是往返時間。如果你想一想—它如何測量單向時間?所以加上查詢時間要30ms。

答案3

ping 時間將代表所有這三個時間,因此它將包括從應用程式到資料庫伺服器的時間、資料庫查詢完成所需的時間(因為它在查詢完成後為回應建立時間戳記)以及所花費的時間在返回應用程式伺服器的往返過程中。

簡而言之,ping 是從資料包發送到回應返回所需的全部往返時間。

服務的「ping」通常以多個 ping 的平均值來衡量,因此一個 ping 可能意味著發送的單一資料包,也可能指所有往返時間的平均值。因此,如果您從最後 100 個資料包中獲取 ping 的往返時間值,並且它們總共平均為 30 毫秒,那麼您會說「它有 30 毫秒的 ping」。

相關內容