
저는 2개의 서버를 보유하고 있으며 각 서버는 두 개의 별도 위치에 있습니다. 한 곳에서는 애플리케이션을 호스팅하고 다른 한 곳에서는 데이터베이스 서버를 호스팅해야 합니다.
앱 서버에서 데이터베이스 서버를 핑하면 평균적으로 약 30ms를 얻습니다.
내 질문은 다음과 같습니다
When I query the database from the app;
걸릴까요?
30 ms + database_server_query_run_time
또는;
걸릴까요?
30 ms + database_server_query_run_time
+ 30ms
이 점 양해 부탁드리겠습니다.
답변1
일반적으로 이 두 가지 옵션보다 더 많은 옵션이 필요합니다.
Ping은 클라이언트에서 서버로, 다시 돌아오는 시간만 측정합니다(rtt - 왕복 시간).
일반적으로 데이터베이스는 TCP를 사용하므로 먼저 SYN 패킷을 보내 TCP 핸드셰이크를 시작해야 합니다(단순화하기 위해 15ms* + CPU 시간을 가정한 다음 SYN/ACK(15ms+CPU 시간)를 수신하고 ACK와 요청(최소 15ms + CPU 시간), DB가 쿼리를 처리하는 데 걸리는 시간, 데이터를 다시 가져오는 데 걸리는 시간(15ms + CPU), ack에 조금 더 시간이 걸리고 연결이 닫힙니다.
이는 물론 데이터베이스에 대한 인증(사용자 이름/비밀번호) 및 암호화(SSL 핸드셰이크/DH 또는 필요한 모든 것)를 계산하지 않습니다.
*왕복 시간의 절반, 그곳과 돌아오는 경로가 대칭이라고 가정합니다(거기까지 가는 데 걸리는 시간의 절반, 돌아오는 데 걸리는 시간의 절반... 핑 응답을 위한 CPU 처리 시간이 매우 짧습니다)
답변2
핑 시간은 왕복입니다. 생각해 보면 어떻게 편도 시간을 측정할 수 있을까요? 따라서 30ms에 쿼리 시간을 더한 시간이 소요됩니다.
답변3
핑 시간은 세 가지를 모두 나타내므로 앱에서 데이터베이스 서버까지의 시간, 데이터베이스 쿼리를 완료하는 데 걸린 시간(쿼리가 완료된 후 응답에 대한 타임스탬프를 생성하므로) 및 소요된 시간이 포함됩니다. 앱 서버 왕복으로 다시 전송 중입니다.
따라서 짧은 핑은 패킷이 전송된 후 왕복으로 응답이 도착할 때까지 걸린 모든 것을 포함하는 왕복 시간입니다.
서비스의 "핑"은 일반적으로 여러 핑의 평균으로 측정되므로 핑은 전송된 단일 패킷을 의미할 수도 있고 모든 왕복 시간의 평균 값을 나타낼 수도 있습니다. 따라서 지난 100개 패킷에서 핑의 왕복 시간 값을 취하여 평균 30ms를 얻은 경우 "30ms 핑이 있습니다"라고 말할 수 있습니다.