---
# System prepended metadata

title: Backend速度調査(5回計測した平均)

---

# Backend速度調査(5回計測した平均)
> 目安計算量はESとDBをあまり考慮していないのでそこのチューニングは別途で見積もった。

* api/v1/login
931.92ms~5.62s
平均すると、1.07s
最初の挙動が遅い
* api/v2/es_search
2.57s
6.31s
2.25s
1.30s
目安計算量(WORD+2TAG)
* api/v2/tag_category
1回目:7.09s
2回目:3.87s
3回目:4.35s
目安計算量(CATEGORY^3) 
* api/v2/tags/suggest
文字数によってスピードが変わるわけではない（劇的には）
平均すると6.28sかかっている

* /v1/videos
1.13s ~ 5.73s
1回目:1.13s
2回目:5.73s
3回目:1.48s

* /v2/tags/soaring
1.16s ~ 7.23s
1回目: 3.57s
2回目: 1.16s
3回目: 7.23s

* /v2/tags/popular
0.5s ~ 8.31s 
1回目: 8.31s 
2回目: 0.5s
3回目: 2.92s
* /v2/tags/new
0.5s ~ 10.05s
1回目: 10.05s
2回目: 0.5s
3回目: 5.09s
* /v2/recomendVideos
0.6s ~ 1.15s
1回目: 1.15s
2回目: 0.6s
3回目: 0.74s

* 問題点
1. 最初のサイト訪問が遅い
2. タグカテゴリがちょっと遅い（静的にして、あたらしいタグが追加されたときに更新したらどうか&リスポンシブ形式が変わるが、最悪計算量をCATEGORY^2に抑えられる)
3. 入力時にタグサジェストAPIを叩いている（大量に叩きすぎ）
4. バックエンドのAPIが軒並み遅い
5. たまにes_searchにクエリが空で叩いている
* 対応策
1. クラスターのシャードが多すぎるため、どのクエリも実行速度が遅くなっていると感じる場合があるのでelastic-searchに割り当てるヒープ領域を20GB未満に抑える(これは一時的に挿入時に30GBまで増やしたので下げる必要がある)
2. サーバー自体に負荷がかかっているかどうか調査
3. grafanaなどを使って負荷率を常時監視負荷が高かったり、落ちている場合はslackに知らせるようにするロードバランサーを調整
4. タグカテゴリAPIを静的にするか、計算量を抑える（個人的には静的が良いと思う。毎回形を整えて返すのでどうしても遅くなってしま
う
5. タグサジェストの時に入力途中でAPIを叩いているので入力終了してフォーカスが外れた時にAPIを叩くようにする
6. 最初のサイト訪問がSSRによって遅いので、ユーザーが見ている時バックエンドのAPIにたたくようにする。(ユーザーのカーソル位置によって)
7. firebaseに複雑な検索させないようにする


## 引用
https://www.elastic.co/jp/blog/advanced-tuning-finding-and-fixing-slow-elasticsearch-queries
https://blog.koh.dev/2020-03-04-nodejs-performance/#%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E8%A8%88%E6%B8%AC%E3%83%84%E3%83%BC%E3%83%AB%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B
https://www.slideshare.net/ssuser91c7c7/elasticsearch-57588384
