Plusieurs choses peuvent faire apparaitre ce besoin
Reflechissons au problème
Ajoutons des threads/process
PB: Et si jamais y a une exception ?
Resilience aux erreurs => DB + Retry
PB: Et si jamais on lance 400 jobs d'un coup ?
Pas trop de Jobs => Queue
PB: Et si on a besoin de scale les jobs ?
Scale et trop de responsabilités => Job serveur
PB: Démarrer un nouveau process c'est couteux…
Démarrage couteux => Pool de worker
PB: Des dizaines de Worker qui poll la DB ça la stress…
Stress de la DB de prod => Redis <3
PB: On vient de s'en créer plein \o/
Log wait, Des logs corrects, Config, …
Le faites pas vous même !
class HardWorker
include Sidekiq::Worker
def perform(name, count)
# do something
end
end
# Ailleur
HardWorker.perform_async("test", 3)
class HardJob < ApplicationJob
queue_as :default
def perform(user)
# do something
end
end
# Ailleur
HardJob.perform_later(User.first)
So many things…