私は、サービスのパフォーマンスと安定性を担当するシステムチームのテクニカルリードとして働いています。2020年3月から11月にかけて、ミロは7倍に成長し、1日あたり最大60万人以上のユニークユーザーを獲得しました。現在、モノリスは350台のサーバーで実行されており、ユーザーデータを格納するために約150個のインスタンスを使用しています。
より多くのユーザーがサービスを操作するほど、サーバーのボトルネックを見つけて排除するためにより多くの注意が必要になります。この問題をどのように解決したかをお話ししましょう。
パート1:問題の説明と紹介
私の理解では、どのアプリケーションもモデルとして表すことができます。それはタスクとハンドラーで構成されます。次の図に示すように、タスクはキューに入れられ、順番に実行されます。
この問題の説明に全員が同意するわけではありません。RESTfulサーバーにはキューがなく、ハンドラーと要求処理メソッドのみであると誰かが言うでしょう。
私はそれを異なって見ています:すべての要求が同時に処理されるわけではなく、いくつかはWebエンジンのメモリ、ソケット、または他の場所で順番を待っています。とにかく待ち行列があります。
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% . , .
, — , . . — , . .