Question

Je travaille actuellement sur un système multiniveau et je résous des problèmes de performances de base de données. Un domaine que nous avons étudié est le temps de latence entre le serveur de base de données et le serveur d'applications. Dans notre environnement de test, le Les temps moyens de ping entre les deux boîtes sont de l’ordre de 0,2 ms, mais sur le site du client, il se situe autour de 8,2 ms. Est-ce Quelque chose devrait nous inquiéter?

Pour votre système moyen, qu'est-ce que vous considérez comme une latence raisonnable et comment vous y prendriez-vous pour tester / mesurer la latence?

Karl

Était-ce utile?

La solution

En bref: non!

Ce que vous devez surveiller est la performance globale de vos requêtes (c'est-à-dire le transport vers la base de données + l'exécution + le transport vers votre serveur)

Vous pouvez utiliser un compteur de performance pour surveiller le temps généralement nécessaire à l’exécution de vos requêtes. Vous constaterez probablement que vos résultats dépassent la milliseconde.

Il n’existe pas de "temps de latence raisonnable". Vous devez plutôt considérer le "temps de latence raisonnable pour votre projet", qui varie beaucoup en fonction de votre travail. Les gens n’ont pas les mêmes attentes en ce qui concerne une plateforme de trading en temps réel et un site Web amateur en lecture seule.

Autres conseils

Désolé pour la réponse très inopportune, mais je suis tombé sur cette question lorsque je cherchais des mesures de la latence réseau que les autres obtenaient entre leur serveur d'applications et leur serveur de base de données. Quoi qu'il en soit, j'ai remarqué que l'autre réponse

En tout cas, bref: oui, la latence du réseau (mesurée par ping) peut faire une énorme différence.

Si votre réponse à la base de données est 0,001 ms, vous constaterez un impact considérable en passant d'un ping de 0,2 ms à 8 ms. J'ai entendu dire que les protocoles de base de données sont bavards, ce qui, si true, signifie qu'ils seraient davantage affectés par la latence lente du réseau que par http.

Et plus que probablement, si vous exécutez une requête, ajouter 8 ms pour obtenir la réponse de la base de données n’a aucune importance. Mais si vous faites 10 000 requêtes qui se produisent généralement avec un code incorrect ou une utilisation non optimisée d'un ORM, vous devrez alors attendre 80 secondes supplémentaires pour un ping de 8 ms, où pour un ping de 0,2 ms, vous n'attendriez que 4 secondes.

En règle générale, je ne laisse jamais les applications clientes contacter directement la base de données. J'ai besoin que les applications clientes passent toujours par un serveur d'applications (par exemple, un service Web REST). De cette façon, si j’ai accidentellement un "1 + N" Problème ORM, alors ce n’est pas aussi percutant. Je voudrais toujours essayer de résoudre le problème sous-jacent ...

Sur un serveur Linux, vous pouvez tester vous-même l'effet de latence à l'aide de la commande tc.

Par exemple, cette commande ajoutera un délai de 10 ms à tous les paquets acheminés via eth0

tc qdisc add dev eth0 root netem delay 10ms

utilisez cette commande pour supprimer le délai

tc qdisc del dev eth0 root

Plus de détails disponibles ici: http://devresources.linux-foundation.org/shemminger/netem/example. html

Toutes les applications seront différentes, mais j’ai bien vu des situations dans lesquelles une latence de 10 ms a eu un impact significatif sur les performances du système.

Selon l’un des chercheurs, un temps d’attente de 400 ms pour charger une page Web correspond à peu près au moment où ils commencent à demander aux gens d’annuler le chargement de la page et d’aller ailleurs. Mon conseil est d’examiner l’ensemble du processus, de la demande initiale du client à son exécution, et si vous vous en sortez bien, il n’est pas nécessaire d’optimiser davantage. 8,2 ms vs 0,2 ms est exponentiellement plus grande au sens mathématique, mais du point de vue humain, personne ne peut vraiment percevoir une différence de 8,0 ms. C'est pourquoi ils ont des photos d'arrivée dans les courses;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top