premesso che io mi occupo della parte sistemi e non sviluppo
direttamente, quindi potrei dire delle imprecisioni, abbiate pazienza.
Un nostro software, che utilizza Ruby 1.9.x e Rails 3.2.x deve eseguire
dei task in cron ogni 5 minuti. Questi task appesantiscono la CPU del
server non tanto per i compiti che loro stessi eseguono ma per via del
fatto che rake molto pesante a caricare.
Vorrei capire che possibili alternative ci sono per lanciare questi cron
molto frequenti.
E’ possibile ottimizzare l’avvio di rake?
O forse sbagliato proprio il suo utilizzo in questo contesto e
dobbiamo valutare soluzioni diverse?
Un nostro software, che utilizza Ruby 1.9.x e Rails 3.2.x deve eseguire dei
task in cron ogni 5 minuti. Questi task appesantiscono la CPU del server non
tanto per i compiti che loro stessi eseguono ma per via del fatto che rake
molto pesante a caricare.
Ciao, molto probabilmente questi task sono pesanti perch caricano
tutto Rails. A parte aggiornare Ruby, non credo tu possa fare molto a
livello sistemistico per ridurre i tempi di startup.
On Monday, December 9, 2013 at 8:50 AM, Alessio C. wrote:
Vorrei capire che possibili alternative ci sono per lanciare questi cron
molto frequenti.
E’ possibile ottimizzare l’avvio di rake?
O forse è sbagliato proprio il suo utilizzo in questo contesto e
dobbiamo valutare soluzioni diverse?
Grazie per ogni consiglio/suggerimento
Ciao Alessio,
puoi provare Clockwork [1]. Il processo resta attivo ed esegue i task
con frequenza secondo configurazione.
In alternativa, se avete già un’infrastruttura Sidekiq in piedi, c’è
Sidetiq [2], che estende appunto Sidekiq con la stessa funzionalità.
Magari dico una boiata, ma come ipotesi esoterica potrebbero esserci
anche
Zeus [0] o Spring [1]
Certo è che il già menzionato Sidekiq e il non uso di Rails quando non
serve sono ottime indicazioni
Cerca di capire se il comando rake che lanci pu evitare di caricare
l’environment di Rails. Quasi sempre questo necessario, controlla per
che non sia una leggerezza nell’impostazione, magari caricate :task =>
:environment quando non serve. Ad esempio rake assets:clean non richiede
il
caricamento dell’environment, ma di fatto non fa altro che cancellare
dei
file in una directory.
Il consiglio di modificare l’architettura e usare una cosa tipo Sidekiq
ottimo, io farei cos.
puoi provare Clockwork [1]. Il processo resta attivo ed esegue i task con
frequenza secondo configurazione.
In alternativa, se avete già un’infrastruttura Sidekiq in piedi, c’è Sidetiq
[2], che estende appunto Sidekiq con la stessa funzionalità.