我有 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 和请求(至少 15ms + cpu 时间),然后是数据库处理查询的时间,然后是时间(15ms + cpu)来获取数据,再花一点时间来确认,然后关闭连接。
这当然不包括数据库的身份验证(用户名/密码),也不包括加密(ssl 握手/DH 或任何需要的)。
*往返时间的一半,假设往返路线是对称的(一半时间去往那里,一半时间返回... ping 回复的 CPU 处理时间非常短)
答案2
ping 时间是往返时间。如果你仔细想想——它怎么能测量单程时间呢?所以它将花费 30 毫秒加上查询时间。
答案3
ping 时间将这三个时间结合在一起,因此它包括从应用程序到数据库服务器的时间、数据库查询完成所需的时间(因为它在查询完成后为响应创建时间戳)以及往返传输回应用程序服务器所需的时间。
简而言之,ping 是从数据包发送到其响应返回所花费的总往返时间。
服务的“ping”通常以多次 ping 的平均值来衡量,因此 ping 可能表示发送了一个数据包,也可能是指所有往返时间的平均值。因此,如果您从最后 100 个数据包中获取 ping 的往返时间值,并且它们加起来的平均值为 30 毫秒,那么您会说“它的 ping 为 30 毫秒”。