
У меня есть 2 сервера, каждый в двух разных местах. Мне нужно разместить приложение на одном, а сервер базы данных на другом.
Если я пингую сервер базы данных с сервера приложений, то в среднем я получаю около 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-рукопожатие (для упрощения скажем, 15 мс* + время ЦП), затем вы получаете пакет SYN/ACK (15 мс + время ЦП), отправляете обратно ACK и запрос (не менее 15 мс + время ЦП), затем время, необходимое БД для обработки запроса, а затем время (15 мс + время ЦП) для получения данных обратно и еще немного времени для подтверждения и закрытия соединения.
Конечно, это не считая аутентификации (имя пользователя/пароль) в базе данных и отсутствия шифрования (SSL-рукопожатия/DH или чего-либо еще, что требуется).
*половина времени на передачу туда и обратно, предполагая, что маршрут туда и обратно симметричен (половина времени на дорогу туда и половина на дорогу обратно... время обработки процессором ответа на ping очень мало)
решение2
Время пинга — это время в оба конца. Если подумать — как он может измерить время в одну сторону? Так что это займет 30 мс плюс время запроса.
решение3
Время ping будет представлять все три параметра вместе, то есть оно будет включать время от приложения до сервера базы данных, время, которое потребовалось для выполнения запроса к базе данных (поскольку он создает временную метку для ответа после завершения запроса) и время, которое потребовалось для обратной передачи на сервер приложения и обратно.
Короче говоря, ping — это общее время прохождения пакета туда и обратно с момента отправки пакета до получения ответа.
"Ping" сервиса обычно измеряется как среднее значение нескольких ping, поэтому ping может означать один отправленный пакет или может относиться к среднему значению всех времен передачи туда и обратно. И поэтому, если вы возьмете значение времени передачи туда и обратно ping из последних 100 пакетов, и все вместе они составят в среднем 30 мс, то вы скажете, что "у него ping 30 мс".