Contact salesFree trial
Blog

Git se met en forme : rendre l'API de notre projet plus rapide avec le profileur Blackfire

Feu noirobservabilitéGitOpsGitperformance
Partager

Upsun a une architecture unique. L'un des aspects les plus intéressants de cette architecture est que, bien que certaines de nos API soient multi-locataires, notre API la plus importante - celle qui contrôle chaque projet et ses environnements - est en fait un démon mono-locataire.

Plus intéressant encore, ce démon à locataire unique est une API multiprotocole au sein de laquelle l'API principale parle de Git. Il expose également une API REST qui, à son tour, expose toutes ses capacités Git et les complète par d'autres, comme la réponse à la commande de mappage d'un nom de domaine à un environnement, la configuration des autorisations d'accès ou la mise à l'échelle d'un conteneur dans un environnement de prévisualisation. Pour l'essentiel, toute modification apportée à un cluster en cours d'exécution passe par le démon personnalisé.

Quel est l'intérêt d'un démon à locataire unique ?

Lorsque nous parlons de locataire unique, nous voulons dire que chaque projet client d'Upsun a son propre démon entièrement isolé. Chacun dispose de son propre datastore qui contient absolument tout ce dont le projet a besoin pour fonctionner, le tout à partir d'un seul endroit.

Cela offre toute une série d'avantages à nos utilisateurs. Cela permet notamment de réduire à l'extrême les zones de défaillance, de déplacer les projets d'une région à l'autre et de permettre le déploiement continu de nouvelles fonctionnalités. Tout cela sans risque, car un problème de performance dans un projet ne peut pas en affecter un autre, grâce à cette architecture. Mieux encore, Git ne se trouve pas sur le chemin de requête d'une application en cours d'exécution, ce qui signifie qu'elle peut être en panne et que les clusters configurés continueront à fonctionner sans problème.

Comment surveiller les performances des applications à locataire unique ?

Nous avons dit beaucoup de bien des applications à locataire unique, mais il y a quelques difficultés à prendre en compte, en particulier en ce qui concerne l'observabilité et l'optimisation des performances. Après tout, un projet avec des centaines de branches et un historique profond se comportera très différemment d'un projet avec un seul commit. Par conséquent, si vous ne déterminez pas un moyen de prioriser le travail d'optimisation des performances, il est facile de laisser ce composant important, mais pas nécessairement critique, tomber dans l'oubli et de laisser les performances de votre application devenir progressivement de plus en plus lentes. Toutes les applications de production ont besoin d'observabilité, et à mesure que les systèmes deviennent plus complexes, la demande d'informations sur les performances s'intensifie.

Alors que de nombreux ingénieurs considèrent que l'observabilité se limite à des traces, des journaux ou des mesures, son essence réside dans l'interrogation du système et l'approfondissement des goulets d'étranglement potentiels ou des domaines d'optimisation. Considérez ceci : un ingénieur devrait passer sans transition de la question "Quels sont les points de terminaison qui traînent ?" à la question "Que se passe-t-il dans le code pendant le 1% des requêtes HTTP les plus lentes, ou qu'est-ce qui est unique à propos de ces instances, points de terminaison, ou même utilisateurs les plus lents ?" Une véritable observabilité offre à la fois la profondeur et l'étendue, surtout si l'on utilise un outil d'observabilité puissant tel que Blackfire

Entrez dans Blackfire, l'expert de la surveillance et du profilage

Blackfire prend en charge à la fois la surveillance et le profilage des applications afin de maximiser la compréhension et l'optimisation des performances. La surveillance fait référence à une vue d'ensemble des mesures du système: Statut HTTP, délais des requêtes (P50 et P99), principales transactions, temps de réponse et mesures de la mémoire, le tout organisé par attributs HTTP et temps. Le profilage Blackfire, quant à lui, concerne l'analyse des applications à la demande. Pour activer le profilage, il suffit d'un en-tête HTTP spécifique ou d'une instrumentation manuelle du code. Et comme Blackfire a été créé pour être un puissant outil de profilage, il excelle dans la visualisation des données:

Ci-dessus se trouve une visualisation traditionnelle du graphe d'appel, qui montre la représentation graphique de toutes les relations entre l'appelant et l'appelé. La ligne de temps, quant à elle, montre les appels de fonction qui se sont produits pendant le profilage sur un axe temporel.

Comme vous pouvez le constater, Blackfire présente le mur/temps, l'utilisation du processeur et la mémoire dans un seul profil. Cela vous permet de voir le temps d'exécution d'une fonction et l'utilisation de la mémoire, et même les données réseau dans certains langages, en une seule session de profilage. Grâce à son profileur déterministe, quieffectue des mesures lorsqu'un certain événement, tel qu'un appel de fonction, une sortie de fonction ou une exception, se produit, il y a une certaine surcharge, mais Blackfire offre néanmoins une profondeur de profilage inégalée. En savoir plus sur les fonctionnalités de profilage d'Upsun et de Blackfire.

L'utilisation simultanée de la surveillance et du profilage Blackfire offre des opportunités permanentes d'identifier et d'éliminer les goulets d'étranglement. La surveillance met en évidence les zones du système qui présentent le plus de retards, tandis que le profilage nous permet d'approfondir les goulets d'étranglement émergents, qui n'ont pas encore été explorés, ce qui constitue un mélange puissant pour des performances supérieures.

Dogfooding et mise en œuvre du service Git

Nous prenons le dogfooding très au sérieux. En utilisant nos propres outils, nous détectons les problèmes avant qu'ils n'atteignent nos utilisateurs et nous améliorons continuellement nos offres. La possibilité de s'auto-tester est un avantage unique pour les outils d'observabilité, et chez Upsun, nous l'acceptons pleinement - c'est un cycle bénéfique. Par exemple, nous testons systématiquement tous les services que nous fournissons, quelle que soit leur taille.

Git est au cœur des interactions avec les utilisateurs d'Upsun. Qu'il s'agisse de la configuration de l'environnement ou du déploiement du code, Git, qui repose sur la structure Pyramid de Python, joue un rôle crucial dans notre flux de travail. Et compte tenu des capacités Python de Blackfire, l'associer à Git était une décision intuitive.

Notre groupe interne Git a conçu un intergiciel WSGI pour une interaction transparente avec Blackfire. Depuis la version 1.17.0, Blackfire supporte nativement Pyramid, ce qui simplifie l'intégration. Mais comment intégrer Blackfire à Git ? Tout commence par cette commande :

blackfire-python gunicorn --workers=2 test:app

Cette commande assure une intégration transparente avec les frameworks supportés, assurez-vous simplement que vous disposez d'un environnement Blackfire valide et des bonnes informations d'identification. Une fois que vous avez configuré l'environnement interne de notre service Git et activé la surveillance, notre tableau de bord s'affiche comme suit :

En regardant l'instantané de données ci-dessus, il est évident que la majorité de nos commandes Git tournent autour de 50 ms, ce qui est un bon signe. Cependant, nous pouvons toujours concentrer notre attention sur les quatre requêtes dépassant 1,6 seconde, car elles représentent les transactions les plus lentes de notre système. C'est un excellent exemple de la façon dont l'observabilité de Blackfire peut mettre en évidence des domaines d'optimisation - mais la solution à cette recherche d'optimisation particulière n'est pas le sujet d'aujourd'hui.

L'optimisation des performances en action

Notre groupe interne Git a mis en évidence plusieurs problèmes de performance survenant uniquement dans certains environnements. La nature exacte de ces environnements restait inconnue, ce qui rendait la reproduction locale difficile. C'est là que le profilage à la demande de Blackfire s'est avéré inestimable. L'équipe a profilé des requêtes HTTP spécifiques et a ensuite analysé les résultats avec Blackfire. Vous trouverez ci-dessous une capture d'écran du profilage d'un point de terminaison Git lent :

Un coup d'œil rapide aux principales mesures révèle un temps de mur et un temps de CPU égaux, ce qui suggère un processus à forte intensité de CPU au sein de l'application. En revanche, si le goulot d'étranglement était basé sur les E/S, comme un appel de microservice laggy ou une lecture de fichier extensive, le temps de mur refléterait le temps d'E/S.

Pour aller plus loin, la visualisation du graphe d'appel de Blackfire identifie les goulets d'étranglement en mettant en évidence la chaîne d'appels la plus chronophage en rouge, ce qui indique le chemin critique. Ce chemin met en évidence les fonctions qui méritent d'être optimisées. L'analyse de l'équipe Git a mis en évidence une fonction redondante dans ce chemin critique, traitant un grand tableau et effectuant des vérifications d'isinstance inutiles. L'élimination de cette fonction redondante a permis d'accélérer le temps d'exécution d'environ 40 %.

Grâce à cette optimisation, le diagramme d'appel n'affiche plus de chemin critique, ce qui signifie qu'il ne reste plus de domaines évidents pour l'amélioration immédiate des performances. En d'autres termes, cela signifie que d'autres optimisations sont possibles, mais que les résultats risquent d'être moins fructueux.

Conclusion du profilage Blackfire

Blackfire nous permet de nous concentrer facilement sur les optimisations les plus faciles à réaliser, mais il n'est pas nécessaire de s'arrêter là. Grâce au profilage et à la surveillance intégrés, vous pouvez identifier divers goulets d'étranglement dans les systèmes de production et ne vous y attaquer que lorsque les corrections sont faciles à mettre en œuvre et rentables.

Vous pourriez être surpris par les opportunités que vous manquez avec un outil comme Blackfire, en particulier avec les codes de production hérités qui n'avaient pas de capacités de surveillance auparavant. Découvrez plus de détails sur nos fonctionnalités d'observabilité ou lancez un essai gratuit dès aujourd'hui.

Votre meilleur travail
est à l'horizon

Essai gratuit
Discord
© 2025 Platform.sh. All rights reserved.