从 ping 获得的数据:是往返还是一种方式?

Phi*_*hil 32 networking ping latency

我有 2 台服务器,每台服务器位于两个不同的位置。我需要在一个上托管一个应用程序,在另一个上托管数据库服务器。

从应用程序服务器,如果我 ping 数据库服务器,平均我得到大约 30 毫秒。

我的问题是:

When I query the database from the app;
Run Code Online (Sandbox Code Playgroud)

会不会需要 30 ms + database_server_query_run_time

或者;

是否需要30 ms + database_server_query_run_time+ 30ms

我想明白这一点。

mul*_*laz 26

通常需要更多的时间然后这两个选项。

Ping 仅测量从客户端到服务器再返回的时间(rtt - 往返时间)

通常数据库使用 TCP,所以你首先需要发送一个 SYN 数据包来启动 TCP 握手(为了简化我们假设 15ms* + cpu 时间,然后你收到和 SYN/ACK(15ms + cpu 时间),发回一个 ACK​​ 和一个请求(至少 15ms + cpu 时间),然后是 DB 处理查询的时间,然后是取回数据的时间(15ms + cpu),还有一点要确认,并关闭连接。

这当然不包括对数据库的身份验证(用户名/密码),也没有加密(ssl 握手/DH 或任何需要的东西)。

*往返时间的一半,假设那里和回来的路线是对称的(一半时间到那里,一半时间回来...... ping回复的cpu处理时间很短)

  • 可悲的是,大多数软件(至少是网络应用程序)不支持这一点:/但这个想法是,建立与数据库的连接(一次),并保持连接运行(打开),并继续发送查询/获得回复,不断打开连接。这消除了每次都进行 tcp 握手、身份验证等的需要。 (2认同)

Dav*_*rtz 7

ping 时间是往返的。如果您考虑一下 - 它如何测量单向时间?所以它将需要 30ms 加上查询时间。