web-dev-qa-db-fra.com

Données obtenues par ping: est-ce aller-retour ou aller simple?

J'ai 2 serveurs, chacun dans deux emplacements distincts. J'ai besoin d'héberger une application sur l'un et le serveur de base de données sur l'autre.

Depuis le serveur d'applications, si je fais un ping sur le serveur de base de données, en moyenne, j'obtiens environ 30 ms.

Ma question est:

When I query the database from the app;

Est-ce que ça va prendre 30 ms + database_server_query_run_time

Ou;

Est-ce que ça va prendre 30 ms + database_server_query_run_time + 30 ms

Je voudrais comprendre cela s'il vous plaît.

28
Phil

Cela prendra généralement plus que ces deux options.

Le ping mesure le temps entre le client, le serveur et vice-versa (rtt - aller-retour)

Habituellement, les bases de données utilisent TCP, vous devez donc d'abord envoyer un paquet SYN pour démarrer la poignée de main TCP (pour simplifier disons 15 ms * + temps cpu, puis vous recevez et SYN/ACK (15 ms + cpu) temps), renvoyer un ACK et une demande (au moins 15 ms + temps cpu), puis le temps pour la base de données pour traiter la requête, puis le temps (15 ms + cpu) pour récupérer les données, et un peu plus pour ack et fermez la connexion.

Bien sûr, cela ne compte pas l'authentification (nom d'utilisateur/mot de passe) de la base de données, et aucun cryptage (poignée de main SSL/DH ou tout ce qui est nécessaire).

* la moitié d'un temps aller-retour, en supposant que l'itinéraire aller-retour est symétrique (la moitié du temps pour y arriver, et la moitié pour revenir ... le temps de traitement du processeur pour la réponse ping est très court)

24
mulaz

Le temps de ping est aller-retour. Si vous y réfléchissez - comment pourrait-il mesurer le temps à sens unique? Cela prendra donc 30 ms plus le temps de requête.

7
David Schwartz