Atuo como lĂder tĂ©cnico na equipe do Sistema, que Ă© responsável pelo desempenho e estabilidade do serviço. De março a novembro de 2020, o Miro cresceu sete vezes - atĂ© mais de 600 mil usuários Ăşnicos por dia. Agora nosso monolith Ă© executado em 350 servidores, usamos cerca de 150 instâncias para armazenar dados do usuário.
Quanto mais os usuários interagem com o serviço, mais atenção será necessária para localizar e eliminar gargalos nos servidores. Deixe-me contar como resolvemos esse problema.
Parte um: declaração do problema e introdução
No meu entendimento, qualquer aplicativo pode ser representado como um modelo: consiste em tarefas e manipuladores. As tarefas sĂŁo enfileiradas e executadas sequencialmente, como na figura abaixo:
Nem todos concordam com esta declaração do problema: alguém dirá que não há filas em servidores RESTful - apenas manipuladores, métodos de processamento de solicitação.
Eu vejo de outra forma: nem todos os pedidos são processados ​​simultaneamente, alguns aguardam sua vez na memória do web engine, em sockets ou em outro lugar. De qualquer maneira, há uma fila.
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% . , .
, — , . . — , . .