Profilage en production pour trouver les goulots d'étranglement du serveur

Je travaille en tant que responsable technique dans l'Ă©quipe Système, qui est responsable de la performance et de la stabilitĂ© du service. De mars Ă  novembre 2020, Miro a Ă©tĂ© multipliĂ© par sept - jusqu'Ă  plus de 600 000 utilisateurs uniques par jour. Maintenant notre monolithe fonctionne sur 350 serveurs, nous utilisons environ 150 instances pour stocker les donnĂ©es utilisateur. 





Plus les utilisateurs interagissent avec le service, plus il faudra se concentrer sur la recherche et l'élimination des goulots d'étranglement sur les serveurs. Laissez-moi vous dire comment nous avons résolu ce problème.





Première partie: énoncé du problème et introduction

À ma connaissance, toute application peut être représentée comme un modèle: elle se compose de tâches et de gestionnaires. Les tâches sont mises en file d'attente et exécutées de manière séquentielle, comme dans la figure ci-dessous:





Tout le monde n'est pas d'accord avec cette dĂ©claration du problème: quelqu'un dira qu'il n'y a pas de files d'attente sur les serveurs RESTful - uniquement des gestionnaires, des mĂ©thodes de traitement des demandes. 





Je vois les choses différemment: toutes les requêtes ne sont pas traitées simultanément, certaines attendent leur tour dans la mémoire du moteur web, dans les sockets ou ailleurs. Il y a quand même une file d'attente.





Miro WebSocket , . , , . , .





, — . 





, . , , .





: . , — , — . : . : , . , — . 





: . , . , . , . 





, , , . , , . 





. : (1%) , (99%). 





: . , (user’s action).  





: 2% , , — , . UX — , . .





:

. . 





, , , : - input/output (IO). 





, . — . , , SQL- .





(data access layer, DAL) , . , (observable). 





: Miro jOOQ SQL. : SQL-, . Redis , . DAL . , , . . 





RESTful , - .





, .





. , , SQL Redis. time-counters: , , Redis . 





Prometheus Jaeger. ? , — . . 





: Miro, . , , — . Prometheus , . 





— , . Jaeger . — .





Stack trace

, , , . — .





data access layers stack trace. , end point Redis.





stack trace , . — , , . 





Miro stack traces Grafana, dump third-party . : projects.pt.server.RepositoryImpl.findUser (RepositoryImpl.java:171) RepositoryImpl.findUser:171.





WatchDog

stack trace — , . , , .





— WatchDog. , . , .





— 100 5 . WatchDog thread, stack trace. 





: 5 , stack trace. , alert, — , - deadlock .





2020 , , Miro 20% . , . 





, — , . . — , . .












All Articles