#826

Costruisci una coda di job che scala in orizzontale senza intoppi

C'è una coda di job nel database — la tabella jobs con lo stato pending per le righe non ancora eseguite. Cinque worker la guardano simultaneamente: ognuno vuole afferrare il job più vecchio e contrassegnarlo come "in lavorazione". Un comune lock a livello di riga con un limite fa accalcare tutti e cinque i worker sulla stessa riga e li serializza. La cura consiste nel saltare le righe già bloccate e prendere la successiva libera: ogni worker ottiene il proprio job e il parallelismo funziona senza collisioni. jobs(id SERIAL, status, payload) contiene quattro righe pending (a, b, c, d). Afferra un job pending da jobs con l'id più piccolo, portalo a running — gli altri tre restano pending.

Il risultato della tua query apparirà qui