Maison  >  Article  >  développement back-end  >  Améliorer les performances des requêtes de l'API Golang

Améliorer les performances des requêtes de l'API Golang

PHPz
PHPzoriginal
2024-08-20 18:38:07486parcourir

Improving Golang API request performance

Le projet

J'ai récemment commencé à travailler sur un agrégateur d'échange de crypto-monnaie. Fondamentalement, j’envoie des demandes à un certain nombre d’échanges différents et je compare les tarifs. Cela doit être fait le plus rapidement possible. Dans cet article, je vais montrer quelques ajustements que j'ai apportés afin d'améliorer considérablement mes performances.

Gardez cependant à l'esprit que je ne suis pas un expert (surtout en go) et que je partage simplement mes découvertes issues de mon projet personnel.

Améliorations

Ces améliorations sont classées par ordre d'amélioration du temps d'exécution.

1. Utiliser des goroutines

Dans tout programme Go, les goroutines sont essentielles à la vitesse. Le plus gros coup de pouce que j’ai apporté a été l’envoi simultané de demandes. Comme je dois effectuer 12 échanges différents, l'envoi de ces demandes en même temps a réduit mon temps d'exécution d'environ 24 secondes à seulement ~ 3.

Les Goroutines sont étonnantes et extrêmement faciles à utiliser. Vous devez les inclure dans la mesure du possible. Mais faites toujours attention aux Data Races

2. Mise à niveau de la bibliothèque JSON

J'ai remplacé encoding/json par github.com/json-iterator/go.jsoniter, une bibliothèque de traitement JSON rapide qui fonctionne en remplacement de la bibliothèque standard, je n'ai donc pas eu à modifier de code , juste un changement de bibliothèque.

Résultats de référence

Pour mesurer les améliorations de performances, j'ai effectué quelques tests comparant encoding/json et jsoniter. Voici un résumé des résultats :

goos: linux
goarch: amd64
pkg: apiSpeedImprove
cpu: AMD Ryzen 5 7640U w/ Radeon 760M Graphics      
BenchmarkEncodingJSON-12 140383 7381 ns/op
BenchmarkJSONIter-12 974605 1217 ns/op
PASS
ok apiSpeedImprove 3.216s

Ainsi, jsoniter est environ 6 fois plus rapide que la bibliothèque standard.

3. Réutilisation des gestionnaires HTTP

J'ai commencé à réutiliser les gestionnaires HTTP au lieu d'en créer de nouveaux pour chaque requête. En configurant un gestionnaire une fois et en le réutilisant, j'ai réduit les frais généraux liés à la création de nouveaux gestionnaires pour chaque demande.

Résultats de référence

Voici les résultats des benchmarks comparant les gestionnaires réutilisés à la création de nouveaux gestionnaires pour chaque requête :

goos: linux
goarch: amd64
pkg: apiSpeedImprove/httpReuse
cpu: AMD Ryzen 5 7640U w/ Radeon 760M Graphics      
BenchmarkReusedHandler-12 2179 505189 ns/op
BenchmarkNewHandlerPerRequest-12 2341 507525 ns/op
PASS
ok apiSpeedImprove/httpReuse 7.270s

La réutilisation des gestionnaires HTTP a légèrement amélioré les performances par rapport à la création d'un nouveau gestionnaire pour chaque requête.

Conclusion

Grâce à ces ajustements, j'ai réussi à réduire le temps nécessaire pour rassembler toutes les informations de 24 secondes initialement à environ 2 secondes. Amélioration assez solide !

Si le code de mes benchmarks vous intéresse, il est disponible ici

Si vous avez apprécié cet article et souhaitez soutenir mon travail, vous pouvez faire un don ici.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn