Go Performance Tuning | Notes de camp pour les jeunes

C'est le 10e jour de ma participation à l'activité de création de notes d'accompagnement "Cinquième camp d'entraînement des jeunes"

avant-propos

Cet article présente principalement le cas de l'optimisation réelle des performances des services métier et comment effectuer l'optimisation des performances pour les programmes avec une logique relativement complexe.

Les types d'optimisation peuvent être divisés en : optimisation des services métier, optimisation de la bibliothèque de base et optimisation du langage Go.

Optimisation des services aux entreprises

concept de base

  • Service : un programme qui peut être déployé indépendamment et qui comporte certaines fonctions
  • Dépendance : l'implémentation de la fonction de ServiceA dépend du résultat de la réponse de ServiceB, qui est appelé ServiceA dépend de ServiceB
  • Lien d'invocation : un ensemble de services associés pouvant prendre en charge une demande d'interface et leurs dépendances mutuelles
  • Bibliothèque de base : boîte à outils publique, middleware

image.png

La figure ci-dessus est un schéma simple du déploiement du système. Les demandes des clients sont transmises par la passerelle et traitées par différents services métier. Les services métier peuvent dépendre d'autres services, ainsi que de composants tels que le stockage et les files d'attente de messages.

Ensuite, nous prenons l'optimisation des services métier comme exemple pour illustrer le processus de réglage des performances. Le service B dans la figure dépend du service A, et dépend également du stockage et du service D.

optimiser le processus

  1. Mettre en place des moyens d'évaluation de la performance des services
  2. Analyser les données de performance et localiser les goulots d'étranglement de performance
  3. Rétrofit des éléments clés d'optimisation
  4. Vérification de l'effet d'optimisation

Mettre en place des moyens d'évaluation de la performance des services

  • Méthode d'évaluation de la performance des services
    • Un seul benchmark ne peut pas satisfaire une analyse logique complexe
    • Différence de performance dans différentes conditions de charge
  • demander la structure du trafic
    • La logique de remplacement des paramètres de requête différente est différente
    • trafic en ligne réel
  • Plage de pression
    • Test de pression autonome
    • Essai de pression de grappe
  • Acquisition de données de performances
    • Données de performances autonomes
    • Données de performances des clusters

Parce que la logique est complexe, différents paramètres de requête utiliseront une logique de traitement différente, et les performances correspondantes sont également différentes.Il est nécessaire de simuler la situation réelle en ligne autant que possible pour analyser le goulot d'étranglement réel des performances.

Le test de pression enregistrera le trafic de requêtes en ligne et testera le service en contrôlant la vitesse de lecture. La portée du test peut être une instance unique ou l'ensemble du cluster. De même, la collecte des performances fera également la distinction entre une seule machine et un cluster.

Une fois la méthode d'évaluation établie, un rapport d'analyse de l'indice de performance du service sera généré.

Le rapport de test de stress réel comptera divers indicateurs de surveillance du service pendant le test de stress, y compris le qps, le retard, etc. En même temps, pendant le processus de test de stress, les données pprof du service peuvent également être collectées, et les problèmes de performance peut être analysé en utilisant la méthode précédente.

Analyse des données de performances

Analyser les données de performance et localiser les goulots d'étranglement de performance

Avec le rapport de performances avant l'optimisation du service et certaines données d'échantillonnage de performances, nous pouvons effectuer une analyse des goulots d'étranglement des performances.

业务服务常见的性能问题可能是使用基础组件不规范

比如下面代码,每次使用配置时都会进行json解析,拿到配置项,实际组件内部提供了缓存机制,只有数据变更的时候才需要重新解析json。

image.png

还有可能是:高并发场景优化不足

image.png

image.png

上边是服务高峰期的火焰图,下边是低峰期的火焰图,可以发现metrics,即监控组件的CPU资源占用变化较大,主要原因是监控数据上报是同步请求,在请求量上涨,监控打点数据量增加时,达到性能瓶颈,造成阻塞,影响业务逻辑的处理,后续是改成异步上报的机制提升了性能。

重点优化项改造

定位到性能瓶颈后,修改完后能直接发布上线吗?

  • 正确性是基础
  • 响应数据diff
    • 线上请求数据录制回放
    • 新旧逻辑接口数据diff

性能优化的前提是保证正确性,在变动较大的性能优化上线之前,还需要进行正确性验证,因为线上的场景和流程太多,所以要借助自动化手段来保证优化后程序的正确性。

线上请求的录制,要包含请求参数录制、返回内容录制,重放时对比优化前后返回内容进行正确性验证。

优化效果验证

  • 重复压测验证
  • 上线评估优化效果
    • 关注服务监控
    • 逐步放量
    • 收集性能数据

改造完成后,可以进行优化效果验证了。

验证分两部分,首先依然是用同样的数据对优化后的服务进行压测。

正式上线的时候会逐步放量,记录真正的优化效果。

压测并不能保证和线上表现完全一致,有时还要通过线上的表现再进行分析改进,是个长期的过程。

进一步优化

进一步优化,服务整体链路分析

  • 规范上游服务调用接口,明确场景需求
  • 分析链路,通过业务流程优化提升服务性能

基础库优化

基础库优化使用范围更广,在实际的业务服务中,为了评估某些功能上线后的效果,经常需要进行AB实验,看看不同策略对核心指标的影响,所以公司内部多数服务都会使用AB实验的SDK,如果能优化AB组件库的性能,所有用到的服务都会有性能提升。

Semblable au processus d'optimisation des services métier, nous allons d'abord compter l'utilisation des ressources des composants AB dans chaque service, voir quelle logique des composants AB consomme le plus de ressources et extraire les problèmes communs pour l'optimisation des clés.

L'optimisation du SDK comprend principalement :

  • Analyser la logique de base et les goulots d'étranglement des performances de la bibliothèque de base
    • Concevoir et améliorer le plan de rénovation
    • Données à la demande
    • Optimisation du protocole de sérialisation des données
  • Vérification du test de pression interne
  • Vérification de l'atterrissage du service commercial de promotion

Go optimisation de la langue

L'optimisation pour Go elle-même optimisera la stratégie d'allocation de mémoire du compilateur et de l'environnement d'exécution, et construira une version go plus efficace.

L'optimisation du langage Go est principalement l'optimisation du compilateur et de l'exécution, notamment :

  • Optimiser la stratégie d'allocation de mémoire
  • Optimiser le processus de compilation de code pour générer des programmes plus efficaces
  • Vérification du test de pression interne
  • Vérification de l'atterrissage du service commercial de promotion

Cette solution d'optimisation est facile d'accès, il suffit d'ajuster la configuration de compilation de l'éditeur, et elle a une grande polyvalence.

Résumer

  • Principes de réglage des performances
    • Fiez-vous aux données, pas aux conjectures
  • outil d'analyse des performances
    • Familier avec l'utilisation de l'outil pprof pour résoudre les problèmes de performances et comprendre ses principes de base
  • l'optimisation des performances
    • Exactitude garantie
    • Localisation des principaux goulots d'étranglement

Devis

Cas pratiques de réglage des performances

Guess you like

Origin juejin.im/post/7194236380300951609