Škálování aplikace SignalR službou Redis (SignalR 1.x)

Patrick Fletcher

Upozornění

Tato dokumentace není určená pro nejnovější verzi SignalR. Podívejte se na ASP.NET Core SignalR.

V tomto kurzu použijete Redis k distribuci zpráv v aplikaci SignalR, která je nasazená ve dvou samostatných instancích služby IIS.

Redis je úložiště klíč-hodnota v paměti. Podporuje také systém zasílání zpráv s modelem publikování a odběru. Backplane SignalR Redis používá funkci pub/sub k předávání zpráv na jiné servery.

Diagram znázorňující vztah mezi Redis Serverem, který se přihlašuje k odběru virtuálních ms, počítačů, které pak publikují virtuální ms na servery Redis.

Pro účely tohoto kurzu použijete tři servery:

  • Dva servery se systémem Windows, které použijete k nasazení aplikace SignalR.
  • Jeden server se systémem Linux, který použijete ke spuštění Redis. Pro snímky obrazovky v tomto kurzu jsem použil Ubuntu 12.04 TLS.

Pokud nemáte k dispozici tři fyzické servery, můžete vytvořit virtuální počítače v Hyper-V. Další možností je vytvořit virtuální počítače v Azure.

I když tento kurz používá oficiální implementaci Redis, existuje také port Redis pro Windows z MSOpenTech. Nastavení a konfigurace se liší, ale jinak jsou kroky stejné.

Poznámka

Škálování služby SignalR pomocí Redis nepodporuje clustery Redis.

Přehled

Než se dostaneme k podrobnému kurzu, tady je stručný přehled toho, co budete dělat.

  1. Nainstalujte Redis a spusťte server Redis.

  2. Přidejte do aplikace tyto balíčky NuGet:

  3. Vytvořte aplikaci SignalR.

  4. Do souboru Global.asax přidejte následující kód pro konfiguraci backplane:

    protected void Application_Start()
    {
        GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

Ubuntu na Hyper-V

Pomocí Windows Hyper-V můžete snadno vytvořit virtuální počítač s Ubuntu na Windows Serveru.

Stáhněte si Ubuntu ISO z http://www.ubuntu.com.

V Hyper-V přidejte nový virtuální počítač. V kroku Připojit virtuální pevný disk vyberte Vytvořit virtuální pevný disk.

Snímek obrazovky s Průvodcem novým virtuálním počítačem se zvýrazněným podoknem Připojit virtuální pevný disk a polem Název

V kroku Možnosti instalace vyberte Soubor bitové kopie (.iso), klikněte na Procházet a přejděte na instalační soubor ISO Ubuntu.

Snímek obrazovky Průvodce novým virtuálním počítačem s podoknem Možnosti instalace a zvýrazněnou možností Soubor obrázku

Instalace Redis

Podle pokynů v článku http://redis.io/download stáhněte a sestavte 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

Tím se vytvoří binární soubory Redis v adresáři src .

Ve výchozím nastavení Redis nevyžaduje heslo. Pokud chcete nastavit heslo, upravte redis.conf soubor, který se nachází v kořenovém adresáři zdrojového kódu. (Než soubor upravíte, vytvořte si záložní kopii.) Přidejte následující direktivu do redis.conf:

requirepass YourStrongPassword1234

Teď spusťte server Redis:

src/redis-server redis.conf

Snímek obrazovky s oknem serveru Azure User Redis s informacemi o serveru, včetně data spuštění serveru a stavu paměti

Otevřete port 6379, což je výchozí port, na kterém Redis naslouchá. (Číslo portu můžete změnit v konfiguračním souboru.)

Vytvoření aplikace SignalR

Vytvořte aplikaci SignalR podle některého z těchto kurzů:

Dále upravíme chatovací aplikaci tak, aby podporovala škálování na více instancí pomocí Redisu. Nejprve do projektu přidejte balíček NuGet SignalR.Redis. V sadě Visual Studio v nabídce Nástroje vyberte Správce balíčků NuGet a pak vyberte Konzola Správce balíčků. V okně konzoly Správce balíčků zadejte následující příkaz:

Install-Package Microsoft.AspNet.SignalR.Redis

Pak otevřete soubor Global.asax. Do metody Application_Start přidejte následující kód:

protected void Application_Start()
{
    GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");

    RouteTable.Routes.MapHubs();
}
  • "server" je název serveru, na kterém běží Redis.
  • port je číslo portu.
  • "password" je heslo, které jste definovali v souboru redis.conf.
  • "AppName" je libovolný řetězec. SignalR vytvoří pub/subkanál Redis s tímto názvem.

Příklad:

GlobalHost.DependencyResolver.UseRedis("redis-server.cloudapp.net", 6379,
    "MyStrongPassword1234", "ChatApp");

Nasazení a spuštění aplikace

Připravte instance Windows Serveru na nasazení aplikace SignalR.

Přidejte roli IIS. Zahrnout funkce "Vývoj aplikací", včetně protokolu WebSocket.

Snímek obrazovky Průvodce přidáním rolí a funkcí se zvýrazněnými možnostmi Role serveru a Protokol webového soketu

Zahrňte také službu pro správu (uvedenou v části Nástroje pro správu).

Snímek obrazovky s Průvodcem přidáním rolí a funkcí se zvýrazněnými možnostmi Role serveru a Nástroje pro správu

Nainstalujte Nasazení webu 3.0. Když spustíte Správce služby IIS, zobrazí se výzva k instalaci Webová platforma Microsoft nebo si můžete stáhnout instalační program. V instalačním programu platformy vyhledejte Nasazení webu a nainstalujte Nasazení webu 3.0.

Snímek obrazovky s výsledky hledání instalačního programu webové platformy 4 bod 5 se zvýrazněnou možností Nasazení webu 3 bod 0

Zkontrolujte, jestli je spuštěná služba webové správy. Pokud ne, službu spusťte. (Pokud v seznamu služeb systému Windows nevidíte Službu pro správu webu, ujistěte se, že jste ji nainstalovali při přidání role IIS.)

Ve výchozím nastavení naslouchá služba webové správy na portu TCP 8172. V bráně Windows Firewall vytvořte nové příchozí pravidlo, které povolí provoz TCP na portu 8172. Další informace najdete v tématu Konfigurace pravidel brány firewall. (Pokud hostujete virtuální počítače v Azure, můžete to udělat přímo v Azure Portal. Viz Postup nastavení koncových bodů pro virtuální počítač.)

Teď jste připraveni nasadit projekt sady Visual Studio z vývojového počítače na server. V Průzkumník řešení klikněte pravým tlačítkem na řešení a klikněte na Publikovat.

Podrobnější dokumentaci k nasazení webu najdete v tématu Mapa obsahu nasazení webu pro Visual Studio a ASP.NET.

Pokud nasadíte aplikaci na dva servery, můžete každou instanci otevřít v samostatném okně prohlížeče a zjistit, že každý z nich přijímá zprávy SignalR od druhého. (V produkčním prostředí by se oba servery samozřejmě nacházely za nástrojem pro vyrovnávání zatížení.)

Snímek obrazovky se zprávami Signal R zobrazenými ve webovém prohlížeči Internet Exploreru s obrazovkou indexu

Pokud vás zajímají zprávy odesílané do Redisu, můžete použít klienta redis-cli , který se instaluje s Redis.

redis-cli -a password
SUBSCRIBE ChatApp

Snímek obrazovky s výstupem uživatele Azure, která zobrazuje informace o všech odeslaných zprávách a doprovodné kódy