Creare e posticipare l'attività per 24 ore [chiuso]

1

Sto cercando di creare un'architettura sana per posticipare un compito per 24 ore. Finora ho pensato a:

  • unix cron job, ma questo non sarà in grado di prendere il carico che gli diamo, dato che avremo molte migliaia di attività in ritardo al giorno
  • Usa RabbitMQ con scambio di lettere morte, tuttavia, questo è un trucco e il fatto di essere un hack è pieno di problemi - impossibile da monitorare senza mutilare i messaggi, ecc.
  • Altre soluzioni che ho trovato sono basate su sondaggi, ad esempio, inserisci attività in MySQL e disponi di un responsabile del polling
  • Amazon SQS supporta solo ritardi fino a 15 minuti. Potrei scrivere un ciclo di punt per # di ritardi, ma questo sta già reinventando troppo la ruota. Inoltre, usando SQS questo sarebbe costoso come paghiamo per messaggio.
  • Redis possibilmente ...? non ho indagato pesantemente su questo So che Memcached non è appropriato in quanto non garantisce la persistenza a lungo.

Quale tecnologia esistente fa bene a questo? Non voglio reinventare la ruota qui, dato che sono abbastanza sicuro che non sto lavorando al primo prodotto software che richiede l'esecuzione di un compito domani. Finora sono stato al database di guida.

    
posta djechlin 13.07.2013 - 23:30
fonte

2 risposte

5

Credo che il tuo primo istinto sia il migliore - in quanto è dove devi cercare la risposta. Le prime versioni di cron erano un approccio di polling (ogni minuto, controlla se è necessario eseguire qualcosa). Una versione successiva utilizzava un simulatore di eventi discreti . L'articolo che porta a questa versione di cron è intitolato "Una struttura dati efficiente per il set di eventi di simulazione". Leggere questo (è lungo diverse pagine) può aiutarti a capire l'algoritmo e come reimplementarlo da solo.

In qualsiasi momento, conosci tutti gli eventi che si verificheranno nelle prossime 24 ore. Ogni volta che il processo viene eseguito per gestire qualcosa, guarda il capo della coda per vedere quanto tempo ha bisogno di dormire, quindi dorme così a lungo e avvia un altro thread o processo per occuparsi di quel lavoro, e ripete (leggi la testa, sonno, forchetta, leggi testa, ...).

Internamente, questo è come funziona cron.

La domanda diventa quindi come si desidera aggiornare e persistere questa struttura dati. Scrivere i dati in un database o in un file su un file system sembra essere il miglior approccio per questo, poiché si tratta di modi facilmente accessibili da una moltitudine di approcci diversi.

Non proverei a mantenere i dati in una coda di messaggi perché non sono pensati per questo.

    
risposta data 14.07.2013 - 03:31
fonte
3

Non ho molta esperienza con la pianificazione dei lavori e l'elaborazione in batch, ma so che Quartz è uno strumento a livello di impresa che ti consente di pianificare migliaia di lavori se necessario e ti consente di assegnare risorse di sistema (core / thread), ecc. Potresti volerlo dare un'occhiata se sei disposto a creare (o già avere) una soluzione Java.

    
risposta data 13.07.2013 - 23:39
fonte

Leggi altre domande sui tag