Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

URLプレビューとメディアプロキシの瞬間的な負荷を抑える #13679

Closed
1 task done
samunohito opened this issue Apr 9, 2024 · 9 comments
Closed
1 task done
Assignees
Labels
✨Feature This adds/improves/enhances a feature

Comments

@samunohito
Copy link
Member

Summary

ユーザがURLつきのノートを投稿した際、瞬間的にマシンリソースを圧迫するというお話を聞き、軽く調査検証して問題がありそうなので起票しました。

URLつきのノートが投稿された後、以下のような流れで処理が呼ばれます。

  1. あるユーザがURLつきノートを投稿する
  2. 別ユーザ(複数人)のTLにノートが配信される
  3. 別ユーザ(複数人)のクライアントがノートをレンダリングするためにURLプレビュー生成要求を投げる
  4. URLプレビューの生成
  5. URLプレビューの生成結果からサムネイルなどのURLを取得し、メディアプロキシに取得要求を投げる
  6. 外部リソースの取得と加工処理

という流れのうち、4と6はそれなりにマシンリソースを使う処理です(外部アクセスと画像加工)。
これがTL表示中の複数ユーザーからのリクエストで同時多発的に走り、マシンリソースを圧迫する状態になっています。

上記を軽減するため、以下の施策を考えています。

  • Redisによるlock処理で4または6をそれぞれ排他化(URL単位で)
  • lockの獲得に成功した場合、4または6の処理を行い、結果をRedisにキャッシュ
  • lockの獲得前で待ち合わせていた後続の要求はキャッシュの値を読みだしてフロント側に返す

Purpose

マシンリソース圧迫の軽減

Do you want to implement this feature yourself?

  • Yes, I will implement this by myself and send a pull request
@samunohito samunohito added the ✨Feature This adds/improves/enhances a feature label Apr 9, 2024
@samunohito samunohito self-assigned this Apr 9, 2024
@syuilo
Copy link
Member

syuilo commented Apr 9, 2024

こういうのCDNが良い感じにしてくれないものなのかしら

@tamaina
Copy link
Member

tamaina commented Apr 9, 2024

nginxを設定しておけば万事OK

@samunohito
Copy link
Member Author

nginxを設定しておけば

キャッシュが出来る前にいっぱいリクエストが来たら…というシチュエーションでもよしなに制御して何とかしてくれるものですかね?

@kakkokari-gtyih
Copy link
Contributor

kakkokari-gtyih commented Apr 9, 2024

nginxを設定しておけば万事OK

このへんの知見もここに書き足しておけばよさそう(内容見た感じ、すでに書いてある?)

https://misskey-hub.net/ja/docs/for-admin/install/resources/nginx/

@samunohito
Copy link
Member Author

proxy_cache_lock
proxy_cache_use_stale

この2つを設定すれば、まさしくよしなにしてくれることが分かった

@tamaina
Copy link
Member

tamaina commented Apr 9, 2024

proxy_cache_lock

proxy_cache_use_stale

この2つを設定すれば、まさしくよしなにしてくれることが分かった

exactly

@samunohito

This comment was marked as off-topic.

@samunohito
Copy link
Member Author

@syuilo
「Misskey本体として冒頭の記載の対応する予定はなく、nginx等の機能を利用して制御してほしい」
…が回答になります?

@syuilo
Copy link
Member

syuilo commented Apr 10, 2024

こういう系はアプリケーションレイヤーではなくそれより前段のレイヤーでケアする話だと思うのと、対応する場合URLプレビューとメディアプロキシ以外にも似たような問題が発生する箇所ありそうだからロック処理だらけになりそうということでyes

@samunohito samunohito closed this as not planned Won't fix, can't repro, duplicate, stale Apr 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨Feature This adds/improves/enhances a feature
Projects
Status: Done
Development

No branches or pull requests

4 participants