Profilerstellung in der Produktion, um Serverengpässe zu finden

Ich arbeite als technischer Leiter im Systemteam, das fĂĽr die Leistung und Stabilität des Dienstes verantwortlich ist. Von März bis November 2020 hat sich Miro versiebenfacht - bis zu 600.000 Unique User pro Tag. Jetzt läuft unser Monolith auf 350 Servern. Wir verwenden ungefähr 150 Instanzen zum Speichern von Benutzerdaten. 





Je mehr Benutzer mit dem Dienst interagieren, desto mehr Aufmerksamkeit ist erforderlich, um Engpässe auf den Servern zu finden und zu beseitigen. Lassen Sie mich Ihnen sagen, wie wir dieses Problem gelöst haben.





Erster Teil: Problemstellung und EinfĂĽhrung

Nach meinem Verständnis kann jede Anwendung als Modell dargestellt werden: Sie besteht aus Aufgaben und Handlern. Aufgaben werden wie in der folgenden Abbildung in die Warteschlange gestellt und nacheinander ausgeführt:





Nicht jeder stimmt dieser Aussage des Problems zu: Jemand wird sagen, dass es auf RESTful-Servern keine Warteschlangen gibt - nur Handler, Anforderungsverarbeitungsmethoden. 





Ich sehe das anders: Nicht alle Anfragen werden gleichzeitig verarbeitet, einige warten darauf, dass sie im Speicher der Web-Engine, in Sockets oder anderswo an die Reihe kommen. Es gibt sowieso eine Warteschlange.





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