Pianificazione Migliaia di * Ricorsi * Lavori

0

Sto cercando approcci generali e idealmente librerie / strumenti per la pianificazione di molte migliaia di lavori ricorrenti.

Un semplice esempio è un aggregatore di feed, in cui vorrei interrogare ripetutamente migliaia di feed. Non vorrei mai effettuare il polling di un sito web più di una volta all'ora (esagerando con le risorse di tutti), ma potrei occuparmi di siti Web di polling meno di una volta all'ora se non c'è il tempo di terminare tutto in un'ora (e preoccuparsi in seguito della condivisione del processo o qualsiasi altra cosa per renderlo più veloce, se questo continua a succedere). Quindi vorrei fondamentalmente un framework in cui posso dire "esegui questa attività il più spesso possibile, ma non più di una volta all'ora".

Un'altra caratteristica interessante sarebbe che un tale framework decadesse esponenzialmente compiti falliti, cioè se un URL del feed fosse rotto, sarebbe programmato per 2 ore, poi 4 ore, ecc.

Ho sentito parlare di un approccio che coinvolge un albero binario che agisce come una sorta di struttura dati gigante simile a un cronjob. Il sistema passerebbe costantemente attraverso questo albero per vedere se eventuali attività sono in ritardo. Non ho molte più informazioni di questo. Ho esaminato strumenti come Resque, ma in realtà non sembrano coprire questo caso d'uso.

    
posta mahemoff 22.05.2012 - 04:34
fonte

1 risposta

2

È possibile utilizzare un elenco di attivabili, ordinati in ordine crescente al momento del successivo trigger. Quando devi attivare qualcosa, puoi sempre scegliere la parte anteriore dell'elenco, O (1). Quando è necessario (ri) pianificare qualcosa, è possibile inserirlo nell'elenco in tempo O (log N).

Sarebbe abbastanza semplice & semplice, e puoi sfruttare qualsiasi forma di timer API (il tuo programma di pianificazione ha bisogno di svegliarsi solo quando il fronte dell'elenco deve essere attivato).

    
risposta data 22.05.2012 - 11:16
fonte

Leggi altre domande sui tag