misskey
misskey copied to clipboard
ダイレクトはジョブキューで優先的に処理できるようにする
Summary
ダイレクトのInbox/Deliverジョブを割り込みで優先的に処理できるようにする(これはオプションで有効・無効を切り替えられたほうがいいかも)
Purpose
あけおめ投稿で同時書き込みが大量に出てキューにWaitingが積もるような状態であっても、個人間の会話になるべく支障をきたさないようにするため
Related to #12467 (チャットとしてDMを再編成するとなると、この部分のUXが重要になる)
Do you want to implement this feature yourself?
- [ ] Yes, I will implement this by myself and send a pull request
memo: https://docs.bullmq.io/guide/jobs/prioritized
ん、違う、普通にLIFOさせればいいのか
https://docs.bullmq.io/guide/jobs/lifo
それ割り込みの処理では…(単に別レーンで処理するのではだめなのかなと)
サーバーリソース的には結局割り込みと同じ意味になるので、単純明快に割り込みとしてマークすればいいんじゃないかしら?
サーバーリソース的には結局割り込みと同じ意味になるので、単純明快に割り込みとしてマークすればいいんじゃないかしら?
それでもいいかも
マルチコアなら並列処理を…とかを考えたりした (Nodeは基本シングルスレッドなので無理かも)
基本的な話、Misskeyはワーカーで並列処理できるようになってて、それらにjobを割り振るためにBullMQを使っている
なら割り込みでいいな
逆にダイレクトが詰まったら大変なことになりそう…?
逆にダイレクトが詰まったら大変なことになりそう…?
まあでもそのための処理だからいいのか
いや、スパムがDM送りまくったら大変なことになるぞ
#12871 と同様にロールで割当できるようにしておいて、コンディショナルロールである程度登録から時間がたった人に対してダイレクトの優先配送を使えるようにすればまだマシかな
そもそものスパム対策として1アカウントが1秒1件しか送れないとかの制限を付けたい感じはある
そもそものスパム対策として1アカウントが1秒1件しか送れないとかの制限を付けたい感じはある
APIのレートリミット側かしらそれをやるなら
notes/createでごっちゃなのでAPIのレートリミットとは別に仕組む必要はあると思う
(時間制限を設けた場合は1分/秒間に何件DM送れるかはロールで設定可能にしたい)
(時間制限を設けた場合は1分/秒間に何件DM送れるかはロールで設定可能にしたい)
それ別で異臭立てたほうがいいかもしれ
notes/createって300 notes/hなんだ 意外と少なかった
notes/createが厳しめなのでDMで別に仕組む必要はないかも(APIリミット緩和でOK)
(よく考えたらフォロワーがたくさんいるユーザーが大量に投稿する方がサーバーリソース的にはきつい)
気が変わった
「非優先/1対多 = フォロワー向けのノート/リアクション配送」と「優先/1対1 = ダイレクト・リプライ先・フォロー承認」を分けてキューに保持したい感じがしてきた
非優先/1対多 = フォロワー向けのノート/リアクション配送
投票されて更新を配送する時もめっちゃ負荷が高い