
jobqueue
Détails
- Go
- PostgreSQL
- pgx
- Prometheus
- Docker
- GitHub Actions
Une file de jobs sur PostgreSQL qui reste correcte quand les workers tombent.
Un service de traitement asynchrone de jobs en Go qui utilise PostgreSQL à la fois comme stockage et comme file : un pool borné de workers prend les jobs, relance les échecs avec backoff et récupère le travail laissé par un processus tombé.
Construit en apprenant Go : j'ai conçu le modèle de concurrence, la machine à états des jobs et les garanties de livraison.
Points Forts
- Claim avec FOR UPDATE SKIP LOCKED : n'importe quel nombre de workers et de processus partage une base sans distribuer deux fois le même job
- Leases avec un fencing token monotone : un worker dont le lease a expiré ne peut pas écraser le résultat d'une tentative plus récente
- Backoff exponentiel avec jitter, erreurs relançables ou définitives, dead-letter et un arrêt propre qui libère les jobs interrompus sans consommer de tentative
- Tests d'intégration sous le race detector de Go contre un vrai PostgreSQL, dont trois pools exécutant 200 jobs exactement une fois chacun
