Come è possibile impostare Windows Azure su più ruoli di lavoro in esecuzione sulla stessa istanza? È possibile?Più ruoli di lavoro sulla stessa istanza
risposta
Penso che tu abbia frainteso cosa sia un ruolo di lavoratore. I ruoli Web e Worker sono VM Window Server, la differenza principale è che i ruoli Web hanno IIS in esecuzione. Potresti avere più istanze di ciascuna.
Non esistono realmente "ruoli di più operatori nella stessa istanza". Pensa al ruolo del lavoratore come modello per la tua macchina virtuale: gli script di avvio e il codice di gestione degli eventi per gestire messaggi come l'avvio e l'arresto, insieme al codice che scrivi e che viene impacchettato ed eseguito all'interno della macchina virtuale.
Da OnStart()
o Run()
, è possibile eseguire praticamente qualsiasi codice desiderato. Fai partire più thread, esegui il codice del server (come Tomcat), ecc. Qualsiasi codice tu abbia eseguito in ogni istanza. Mentre si ridimensiona su più istanze, questo stesso modello VM viene utilizzato su ciascuna di queste istanze.
Vedere anche this answer, dove fornisco un po 'più di dettaglio.
Come David ha menzionato nella sua risposta, puoi dare il via a più thread. Uno dei miei clienti lo ha fatto utilizzando la classe ThreadedRoleEntryPoint.
Questa classe consente di utilizzare più classi punto di ingresso ruolo dei lavoratori (anche da più assembly) e li esegue nello stesso ruolo:
public override void Run()
{
Trace.TraceInformation("WebRole::Run begin", "Information");
List<WorkerEntryPoint> workers = new List<WorkerEntryPoint>();
workers.Add(new Worker1());
workers.Add(new Worker2());
base.Run(workers.ToArray());
Trace.TraceInformation("WebRole::Run end", "Information");
}
Il vantaggio è che si può avviare piccole e eseguire tutti lavoratore ruoli (non in realtà ruoli dei lavoratori, ma chiamiamoli processi o lavoratori) in un singolo ruolo (che effettivamente distribuisci).
Quindi, quando la tua azienda inizia a crescere, potresti iniziare a utilizzare ruoli dedicati che significa che avrai almeno 1 istanza in esecuzione per ruolo di lavoratore. E quando questo deve accadere, l'impatto sul codice sarà minimo poiché gli worker passati a ThreadedRoleEntryPoint ereditano da WorkerEntryPoint che assomiglia molto alla classe RoleEntryPoint.
Sì, è possibile. Ecco il modello di progettazione http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com/2010/12/running-multiple-threads-on-windows.html