Scale-out di SignalR con Redis (SignalR 1.x)
Avviso
Questa documentazione non è per la versione più recente di SignalR. Esaminare ASP.NET Core SignalR.
In questa esercitazione si userà Redis per distribuire i messaggi in un'applicazione SignalR distribuita in due istanze IIS separate.
Redis è un archivio chiave-valore in memoria. Supporta anche un sistema di messaggistica con un modello di pubblicazione/sottoscrizione. Il backplane SignalR Redis usa la funzionalità pub/sub per inoltrare messaggi ad altri server.
Per questa esercitazione si useranno tre server:
- Due server che eseguono Windows, che verranno usati per distribuire un'applicazione SignalR.
- Un server che esegue Linux, che verrà usato per eseguire Redis. Per gli screenshot di questa esercitazione, ho usato Ubuntu 12.04 TLS.
Se non si dispone di tre server fisici da usare, è possibile creare macchine virtuali in Hyper-V. Un'altra opzione consiste nel creare macchine virtuali in Azure.
Anche se questa esercitazione usa l'implementazione ufficiale di Redis, esiste anche una porta Windows di Redis di MSOpenTech. L'installazione e la configurazione sono diverse, ma in caso contrario i passaggi sono gli stessi.
Nota
La scalabilità orizzontale di SignalR con Redis non supporta i cluster Redis.
Panoramica
Prima di passare all'esercitazione dettagliata, ecco una rapida panoramica delle operazioni che verranno eseguite.
Installare Redis e avviare il server Redis.
Aggiungere questi pacchetti NuGet all'applicazione:
Creare un'applicazione SignalR.
Aggiungere il codice seguente a Global.asax per configurare il backplane:
protected void Application_Start() { GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName"); RouteTable.Routes.MapHubs(); // ... }
Ubuntu in Hyper-V
Con Windows Hyper-V è possibile creare facilmente una macchina virtuale Ubuntu in Windows Server.
Scaricare l'ISO Ubuntu da http://www.ubuntu.com.
In Hyper-V aggiungere una nuova macchina virtuale. Nel passaggio Connetti disco rigido virtuale selezionare Crea un disco rigido virtuale.
Nel passaggio Opzioni di installazione selezionare File di immagine (con estensione iso), fare clic su Sfoglia e passare all'ISO di installazione di Ubuntu.
Installare Redis
Seguire la procedura in http://redis.io/download per scaricare e compilare Redis.
wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzf redis-2.6.12.tar.gz
cd redis-2.6.12
make
In questo modo vengono compilati i file binari Redis nella src
directory .
Per impostazione predefinita, Redis non richiede una password. Per impostare una password, modificare il redis.conf
file, che si trova nella directory radice del codice sorgente. (Crea una copia di backup del file prima di modificarlo!) Aggiungere la direttiva seguente a redis.conf
:
requirepass YourStrongPassword1234
Avviare ora il server Redis:
src/redis-server redis.conf
Aprire la porta 6379, ovvero la porta predefinita su cui Redis è in ascolto. È possibile modificare il numero di porta nel file di configurazione.
Creare l'applicazione SignalR
Creare un'applicazione SignalR seguendo una di queste esercitazioni:
Successivamente, l'applicazione di chat verrà modificata per supportare la scalabilità orizzontale con Redis. Aggiungere prima di tutto il pacchetto NuGet SignalR.Redis al progetto. In Visual Studio scegliere Gestione pacchetti NuGet dal menu Strumenti e quindi console di Gestione pacchetti. Nella finestra Console di gestione pacchetti immettere il comando seguente:
Install-Package Microsoft.AspNet.SignalR.Redis
Aprire quindi il file Global.asax. Aggiungere il codice seguente al metodo Application_Start :
protected void Application_Start()
{
GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
RouteTable.Routes.MapHubs();
}
- "server" è il nome del server che esegue Redis.
- port è il numero di porta
- "password" è la password definita nel file redis.conf.
- "AppName" è qualsiasi stringa. SignalR crea un canale pub/sub Redis con questo nome.
Ad esempio:
GlobalHost.DependencyResolver.UseRedis("redis-server.cloudapp.net", 6379,
"MyStrongPassword1234", "ChatApp");
Distribuire ed eseguire l'applicazione
Preparare le istanze di Windows Server per distribuire l'applicazione SignalR.
Aggiungere il ruolo IIS. Includere le funzionalità "Sviluppo di applicazioni", incluso il protocollo WebSocket.
Includere anche il servizio di gestione (elencato in "Strumenti di gestione").
Installare Distribuzione Web 3.0. Quando si esegue Gestione IIS, verrà richiesto di installare Piattaforma Web Microsoft oppure scaricare il programma di installazione. Nel programma di installazione della piattaforma cercare Distribuzione Web e installare Distribuzione Web 3.0
Verificare che il servizio di gestione Web sia in esecuzione. In caso contrario, avviare il servizio. Se il servizio gestione Web non è presente nell'elenco dei servizi Windows, assicurarsi di aver installato il servizio di gestione quando è stato aggiunto il ruolo IIS.
Per impostazione predefinita, il servizio di gestione Web è in ascolto sulla porta TCP 8172. In Windows Firewall creare una nuova regola in ingresso per consentire il traffico TCP sulla porta 8172. Per altre informazioni, vedere Configurazione delle regole del firewall. Se si ospitano le macchine virtuali in Azure, è possibile farlo direttamente nel portale di Azure. Vedere Come configurare gli endpoint in una macchina virtuale.
A questo momento è possibile distribuire il progetto di Visual Studio dal computer di sviluppo al server. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione e scegliere Pubblica.
Per una documentazione più dettagliata sulla distribuzione Web, vedere Web Deployment Content Map for Visual Studio e ASP.NET.
Se si distribuisce l'applicazione in due server, è possibile aprire ogni istanza in una finestra del browser separata e verificare che ognuno riceva messaggi SignalR dall'altro. Naturalmente, in un ambiente di produzione, i due server si trovano dietro un servizio di bilanciamento del carico.
Se si è curiosi di visualizzare i messaggi inviati a Redis, è possibile usare il client redis-cli , che viene installato con Redis.
redis-cli -a password
SUBSCRIBE ChatApp