-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
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
TLをPush型にする #9325
Comments
Redisはなかなかハードル高いからまずはnodeにキャッシュする? |
再起動したらすぐにパーになる |
RedisにTLをキャッシュ(というより構築)するデメリットとしては、TLを取得する際の負荷は劇的に減るけど代わりに投稿する際の負荷が今と比べてかなり高くなる TwitterもMastodonもそういうTLの実装してるらしい(Push型というらしい)からそのデメリットよりメリットの方が上回るんだろうけど |
アンテナもPush型…だがちょっと負荷高いか |
あと単にデータベースにクエリ投げるだけじゃなくなるから実装も結構複雑になる |
負荷的にはユーザー全員がタイムラインというアンテナを持つようなものだと思っている |
TwitterやMastodonと違って、Misskeyはそれぞれのノートがリアクション情報を持っているからRedisにあるそれらも適宜更新する必要があるからちょっと他のソフトウェアとは事情が違うかも |
IDだけ置いとけばいいか |
なんならidでソートも可能 |
データベースにレコードを挿入するのとRedisに値を追加するのだったら後者の方が圧倒的に負荷は低いだろうからそこまで重くはないと思われる ただローカルのフォロワーが100人いたら100回Redisにリクエスト投げなきゃいけないのかが気になる |
別の案
(リストでも同様のことを行えそう) |
まとめられないっぽい |
添付ファイルありのみのTLもキャッシュしたさがある |
Renoteを積極的に表示しないようにするとなると意外とRenote周りの扱いがきわどいか、というかもういっそのことPostgreSQLにRenote保持しなくてよくねとすら思い始めてきた |
RenoteをPostgresql上に保持しなかった場合通知周りの構造はどうなる感じでしょうか? |
MongoDB をキャッシュ用に使うのってどうだろう |
二種類DB扱うのアレだからPostgreSQLをキャッシュには使えないかな |
ポスグレへのアクセスを減らしたいのならポスグレでキャッシュ作るのが目的を満たしてるのかよくわからない |
別のポスグレにするとか |
確かに理論上可能だけどキャッシュみたいな捨てる前提のデータベースにマイグレーションとか too much すぎないかとか逆に運用の観点から二つ存在するのがややこしくならないかとかは気になる |
キャッシュとはいうものの、捨てる前提でRedisにタイムラインを蓄積していたらそれはそれで厄介な実装になりそう |
キャッシュというか「構築」の方が近いかも |
アンテナとかチャンネル投稿は(IDだけ)Redisに置くようになった |
この流れで本丸のHTLもやっていきたい |
難しい |
1万のローカルフォロワーがいたら投稿するごとに1万リクエストをRedisに送信しなきゃいけないのはしんどそう |
1リクエストRedisに送る処理が1msだったとしても1ms*10000=10s間はNodeのプロセスが止まりそう |
よく考えたらアクティブなユーザーだけに限ったとしてもインスタンス規模によっては普通に1万以上はフォロワーがいるわね |
|
待たなくても「送る」という処理自体が多少なりとも同期的に時間かからない?
おー |
redis xadd bulk で調べても情報がない |
bulk insert というかコマンドまとめて送るくんか https://github.com/luin/ioredis#pipelining |
まあそんな遅さを気にするんだったら適当にキューに積んでやらせるとかでいいかもしれん |
あとこれをやって本当にパフォーマンス向上するのかが気になってる |
こればっかりは実際にやったときの実測データが全てを語るので |
フォロワーの取得から各TLにIDを入れるまでLuaスクリプトでやる想定でどれくらい速度がでそうか実験 |
LTLだけはpush型にしてもよかったのでは… |
というか混雑対策としてSTLとLTLをストリーミングのみにする(local-timeline/hybrid-timelineが空配列を返す)モードがあるとよさそう? |
というよりはストリーミングを先に繋いで後からapi叩いた結果を繋げばいいか |
やるか |
ミュートの考慮が面倒そう |
難しい |
ミュートはTL取得時に処理する |
ファイルが添付されたノートのみオプションが指定されている場合の対応も難しい |
Summary
DBへのリクエストを1でも減らしたい
The text was updated successfully, but these errors were encountered: