Creación de perfiles en producción para encontrar cuellos de botella en el servidor

Trabajo como líder técnico en el equipo de Sistema, que es responsable del desempeño y estabilidad del servicio. De marzo a noviembre de 2020, Miro se multiplicó por siete: más de 600 mil usuarios únicos por día. Ahora nuestro monolito se ejecuta en 350 servidores, usamos alrededor de 150 instancias para almacenar datos de usuario. 





Cuantos más usuarios interactúen con el servicio, más atención se requerirá para encontrar y eliminar los cuellos de botella en los servidores. Déjame contarte cómo solucionamos este problema.





Primera parte: planteamiento del problema e introducción

Según tengo entendido, cualquier aplicación se puede representar como un modelo: consta de tareas y controladores. Las tareas se ponen en cola y se ejecutan secuencialmente, como se muestra en la siguiente figura:





No todo el mundo está de acuerdo con esta afirmación del problema: alguien dirá que no hay colas en los servidores RESTful, solo controladores, métodos de procesamiento de solicitudes. 





Lo veo de otra manera: no todas las solicitudes se procesan simultáneamente, algunas están esperando su turno en la memoria del motor web, en sockets o en algún otro lugar. De todas formas hay cola.





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