5

Ho bisogno di scrivere alcuni dati nel database ogni 50 secondi circa. È simile a un servizio di Windows in esecuzione in background e che esegue silenziosamente il proprio lavoro. L'avvio e l'arresto non sono un'opzione nel mio caso in quanto ho bisogno di una piccola quantità di dati precedentemente inseriti da memorizzare in memoria. Qual è la migliore soluzione per questo quando si utilizza Windows Azure o AWS?Attività di lunga durata (o per sempre) su Windows Azure

Grazie.

risposta

7

Con Windows Azure, è possibile scegliere un ruolo Web o Worker (entrambi fondamentalmente Windows 2008 Server R2 o SP2) e avere qualche tipo di evento temporizzato, come suggerito da @Lucifure. È anche possibile eseguire uno scheduler, come Quartz.net, o sfruttare le code di Windows Azure o le code del bus di servizio per visualizzare i messaggi in un determinato momento. Tuttavia: non è possibile avere un'attività "per sempre" in una determinata istanza di ruolo, in quanto periodicamente le istanze VM verranno riavviate (ad esempio per la manutenzione del sistema operativo host ogni mese). Con gli arresti di ruolo, riceverai una notifica che puoi gestire queste notifiche di arresto in Stopping() o OnStop(). Se si dispone di più istanze, è possibile utilizzare uno scheduler o una coda per garantire che gli eventi vengano comunque attivati ​​ogni 50 secondi circa e vengano gestiti su più istanze (ma solo da un'istanza in un dato momento).

Per conservare le informazioni in memoria, un'idea è quella di memorizzare tali informazioni in una cache. Hai 2 scelte:

  • Servizio cache distribuito (condiviso), che è in uso da qualche tempo. Funziona indipendentemente dalle istanze del tuo ruolo.
  • cache in memoria, appena introdotta nel giugno 2012. Supponendo di avere più di un'istanza, la cache viene distribuita tra tali istanze. È anche possibile eseguire la cache all'interno della memoria dei ruoli esistenti.

Ulteriori informazioni sulla memorizzazione nella cache sono here.

Esistono alcune risposte StackOverflow relative a Quartz.net e Windows Azure, ad esempio this one.

1

È possibile impostare un System.Threading.Timer per attivare ogni 50 secondi circa e fare il proprio lavoro ogni volta che si verifica l'evento.