핑에서 얻은 데이터 : 왕복 또는 편도입니까?


28

각기 다른 두 위치에 2 대의 서버가 있습니다. 하나의 응용 프로그램과 다른 하나의 데이터베이스 서버를 호스팅해야합니다.

응용 프로그램 서버에서 데이터베이스 서버를 핑하면 평균 약 30ms가됩니다.

내 질문은 :

When I query the database from the app;

걸릴까요? 30 ms + database_server_query_run_time

또는;

+ 30ms 걸릴 30 ms + database_server_query_run_time까요

나는 이것을 이해하고 싶습니다.

답변:


24

일반적으로이 두 가지 옵션보다 더 많이 필요합니다.

Ping은 클라이언트, 서버 및 다시 돌아 오는 시간 만 측정합니다 (rtt-왕복 시간).

일반적으로 데이터베이스는 TCP를 사용하므로 먼저 SYN 패킷을 보내 TCP 핸드 셰이크를 시작해야합니다 (15ms * + CPU 시간을 단순화 한 다음 수신 및 SYN / ACK (15ms + cpu 시간), ACK 및 요청 (최소 15ms + CPU 시간), DB가 쿼리를 처리하는 시간 및 데이터를 다시 얻는 시간 (15ms + CPU) 및 약간 더 ack하고 연결을 닫습니다.

이것은 물론 데이터베이스에 대한 인증 (사용자 이름 / 암호)을 계산하지 않으며 암호화 (ssl 핸드 셰이크 / DH 또는 필요한 것)는 없습니다.

* 왕복 시간의 절반, 왕복 경로가 대칭이라고 가정 할 때 (반복 시간은 절반, 왕복 반은 ... ping 응답의 CPU 처리 시간이 매우 짧음)


지속적인 TCP 세션에서 3 방향 핸드 셰이크 문제가 발생할 수 있습니다.
Michuelnik

@Michuelnik, 당신은 정교하게 할 수 있습니까? 이 모든 것을 이해하고 DB 쿼리 대기 시간을 최소화하는 가장 좋은 방법을 찾고 싶습니다.
Phil

2
슬프게도, 대부분의 소프트웨어 (가장 가까운 웹 앱)는 이것을 지원하지 않습니다 : / 그러나 아이디어는 DB에 대한 연결 (한 번)을 설정하고 연결을 계속 실행 (개방)하고 하나 이상의 쿼리를 보내거나 응답을 얻는 것입니다. 끊임없이 열린 연결. 따라서 매번 tcp 핸드 셰이크, 인증 등이 필요하지 않습니다.
mulaz

mulaz, 설명해 주셔서 감사합니다. 파이썬으로 작업 할 것이므로 어떻게 진행되는지 보겠습니다. ;-)
Phil

요청의 크기와 회신을 잊지 마십시오. 예를 들어, 1MB / sec 링크에서 100KB 페이로드는 전송하는 데 100ms가 더 걸립니다.
더스틴 보스 웰

7

핑 시간은 왕복입니다. 생각해 보면 편도 시간을 어떻게 측정 할 수 있습니까? 따라서 쿼리 시간에 30ms를 더한 시간이 걸립니다.


1
나는 단지 30 초 + 쿼리 시간보다 조금 더 오래 걸릴 것이라고 덧붙일 것입니다. Ping은 ICMP이고 DB 연결은 TCP이므로 설정 / 핸드 셰이크 및 DB 연결 시작 등도 있습니다.
Doon

@Doon : 지속적인 TCP / 데이터베이스 연결을 "피할"될 수있는
Michuelnik

@Michuelnik, 지속적인 DB 연결이 여기에 오는 방법이라고 생각하십니까? 다른 문제가 발생합니까?
Phil

물론 @michuelnik. RTT + Query만큼 간단하지 않다는 것을 지적했습니다. 대기 시간 등으로 인해 세션 당 최대 속도에 제한이 있습니다.)
Doon

@phil 대부분의 경우 여러 쿼리를 수행하려는 경우 영구 DB 연결이 유리합니다. 쿼리가 분산되고 산발적이면 불필요하게 리소스를 묶는 것이지만 쿼리가 계속 진행되는 등의 경우 각 요청에서 새 연결을 여는 대신 기존 연결을 재사용하여 적은 양의 오버 헤드를 절약 할 수 있습니다.
Doon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.