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

ジョブキューを自前で実装する #4451

Closed
syuilo opened this issue Mar 8, 2019 · 1 comment
Closed

ジョブキューを自前で実装する #4451

syuilo opened this issue Mar 8, 2019 · 1 comment
Assignees
Labels
💬Discussion Being discussed or needs discussion ✨Feature This adds/improves/enhances a feature packages/backend Server side specific issue/PR

Comments

@syuilo
Copy link
Member

syuilo commented Mar 8, 2019

Summary

なかなかニーズに合うジョブキューが存在しないため自作する
そうすればMisskeyの動作に最適化することもできる(#4450みたいに)

RedisよりもMongoDBの方が知識があるのでMongoDBを使いたいけど、それだと新しいジョブが作成されたことをリアルタイムに知ることができない
ポーリングして定期的に新しいジョブがないか確認する…?
それするくらいならRedisのpub/sub使う方が良さそうな気も

あとアトミック性の確保をどうするか
複数のワーカーがいるなかでジョブが作成されてもどれかひとつのワーカーだけがそれを捌くようにしなければいけない

それと、ジョブ処理中にプロセスが落ちるなどして応答がなくなったジョブについて、自動的に「待機中」の状態に戻さなければいけない
これはジョブの処理を開始してから一定期間経っても完了しなかったり進捗を更新しなかったり失敗とマークされないジョブを定期的にクロールして状態を変えれば良さそう
その「一定時間」はジョブごとに設定できるのが便利そう

ジョブのライフサイクル:
待機中(waiting) --> 処理中(active) --> 失敗かつ再試行上限にまだ達していないならwaitingに戻す

ジョブを一覧したり個別にキャンセルしたりできるAPIも用意して管理画面からの操作もできるようにする

Related to #4450
Related to #4442

@syuilo syuilo added 💬Discussion Being discussed or needs discussion ✨Feature This adds/improves/enhances a feature packages/backend Server side specific issue/PR labels Mar 8, 2019
@syuilo syuilo self-assigned this Mar 8, 2019
@acid-chicken
Copy link
Member

RedisよりもMongoDBの方が知識があるのでMongoDBを使いたいけど、それだと新しいジョブが作成されたことをリアルタイムに知ることができない
ポーリングして定期的に新しいジョブがないか確認する…?
それするくらいならRedisのpub/sub使う方が良さそうな気も

Redis が非常にニーズに合っている気がします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
💬Discussion Being discussed or needs discussion ✨Feature This adds/improves/enhances a feature packages/backend Server side specific issue/PR
Projects
None yet
Development

No branches or pull requests

2 participants