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% . , .
, — , . . — , . .