Šklálování aplikace SignalR službou RedisSignalR Scaleout with Redis

o Jan Wassonby Mike Wasson

Warning

Tato dokumentace není pro nejnovější verzi nástroje Signal.This documentation isn't for the latest version of SignalR. Podívejte se na ASP.NET Core Signal.Take a look at ASP.NET Core SignalR.

Verze softwaru používané v tomto tématuSoftware versions used in this topic

Předchozí verze tohoto tématuPrevious versions of this topic

Informace o dřívějších verzích nástroje Signal najdete v části Signal – starší verze.For information about earlier versions of SignalR, see SignalR Older Versions.

Dotazy a komentářeQuestions and comments

Přečtěte si prosím svůj názor na to, jak se vám tento kurz líbí a co bychom mohli vylepšit v komentářích v dolní části stránky.Please leave feedback on how you liked this tutorial and what we could improve in the comments at the bottom of the page. Pokud máte dotazy, které přímo nesouvisejí s kurzem, můžete je publikovat do fóra signálu ASP.NET nebo StackOverflow.com.If you have questions that are not directly related to the tutorial, you can post them to the ASP.NET SignalR forum or StackOverflow.com.

V tomto kurzu použijete Redis k distribuci zpráv v aplikaci signalizace, která je nasazená ve dvou samostatných INSTANCÍCH služby IIS.In this tutorial, you will use Redis to distribute messages across a SignalR application that is deployed on two separate IIS instances.

Redis je úložiště hodnot klíč-hodnota v paměti.Redis is an in-memory key-value store. Podporuje také systém zasílání zpráv s modelem publikování/odběru.It also supports a messaging system with a publish/subscribe model. Redis pro vyřízení signálu používá funkci Pub/sub k posílání zpráv na jiné servery.The SignalR Redis backplane uses the pub/sub feature to forward messages to other servers.

Pro tento kurz budete používat tři servery:For this tutorial, you will use three servers:

  • Dva servery se systémem Windows, které použijete k nasazení aplikace Signal.Two servers running Windows, which you will use to deploy a SignalR application.
  • Jeden server se systémem Linux, který použijete ke spuštění Redis.One server running Linux, which you will use to run Redis. Pro snímky obrazovky v tomto kurzu jsem používal Ubuntu 12,04 TLS.For the screenshots in this tutorial, I used Ubuntu 12.04 TLS.

Pokud nemáte tři fyzické servery k použití, můžete vytvořit virtuální počítače v prostředí Hyper-V.If you don't have three physical servers to use, you can create VMs on Hyper-V. Další možností je vytvořit virtuální počítače v Azure.Another option is to create VMs on Azure.

I když tento kurz používá oficiální implementaci Redis, existuje taky Port Windows Redis z MSOpenTech.Although this tutorial uses the official Redis implementation, there is also a Windows port of Redis from MSOpenTech. Nastavení a konfigurace se liší, ale v opačném případě se jedná o stejné kroky.Setup and configuration are different, but otherwise the steps are the same.

Note

Škálování signálu pomocí Redis nepodporuje clustery Redis.SignalR scaleout with Redis does not support Redis clusters.

PřehledOverview

Než se dostanete k podrobnému kurzu, tady je rychlý přehled toho, co budete dělat.Before we get to the detailed tutorial, here is a quick overview of what you will do.

  1. Nainstalujte Redis a spusťte server Redis.Install Redis and start the Redis server.

  2. Přidejte tyto balíčky NuGet do vaší aplikace:Add these NuGet packages to your application:

  3. Vytvořte aplikaci signalizace.Create a SignalR application.

  4. Přidáním následujícího kódu do Startup.cs nakonfigurujte schéma pro replánování:Add the following code to Startup.cs to configure the backplane:

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
            app.MapSignalR();
        }
    }
    

Ubuntu na Hyper-VUbuntu on Hyper-V

Pomocí technologie Windows Hyper-V můžete snadno vytvořit virtuální počítač s Ubuntu na Windows serveru.Using Windows Hyper-V, you can easily create an Ubuntu VM on Windows Server.

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

V Hyper-V přidejte nový virtuální počítač.In Hyper-V, add a new VM. V kroku připojit virtuální pevný disk vyberte možnost vytvořit virtuální pevný disk.In the Connect Virtual Hard Disk step, select Create a virtual hard disk.

V kroku Možnosti instalace vyberte soubor obrázku (. ISO) , klikněte na tlačítko Procházeta přejděte do Ubuntu instalace ISO.In the Installation Options step, select Image file (.iso), click Browse, and browse to the Ubuntu installation ISO.

Nainstalovat RedisInstall Redis

Podle pokynů v části http://redis.io/download Stáhněte a sestavte Redis.Follow the steps at http://redis.io/download to download and build 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.This builds the Redis binaries in the src directory.

Ve výchozím nastavení Redis nevyžaduje heslo.By default, Redis does not require a password. Chcete-li nastavit heslo, upravte soubor redis.conf, který je umístěn v kořenovém adresáři zdrojového kódu.To set a password, edit the redis.conf file, which is located in the root directory of the source code. (Před úpravou! vytvořte záložní kopii souboru) Přidejte následující direktivu pro redis.conf:(Make a backup copy of the file before you edit it!) Add the following directive to redis.conf:

requirepass YourStrongPassword1234

Nyní spusťte server Redis:Now start the Redis server:

src/redis-server redis.conf

Otevřete port 6379, což je výchozí port, na kterém Redis naslouchá.Open port 6379, which is the default port that Redis listens on. (V konfiguračním souboru můžete změnit číslo portu.)(You can change the port number in the configuration file.)

Vytvoření aplikace SignalCreate the SignalR Application

Pomocí některého z těchto kurzů vytvořte aplikaci signalizace:Create a SignalR application by following either of these tutorials:

V dalším kroku změníme aplikaci Chat, aby podporovala horizontální navýšení kapacity pomocí Redis.Next, we'll modify the chat application to support scaleout with Redis. Nejprve do svého projektu přidejte balíček NuGet Microsoft.AspNet.SignalR.StackExchangeRedis.First, add the Microsoft.AspNet.SignalR.StackExchangeRedis NuGet package to your project. V aplikaci Visual Studio v nabídce nástroje vyberte Správce balíčků NuGeta pak vyberte Konzola správce balíčků.In Visual Studio, from the Tools menu, select NuGet Package Manager, then select Package Manager Console. V okně konzoly Správce balíčků zadejte následující příkaz:In the Package Manager Console window, enter the following command:

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

Pak otevřete soubor Startup.cs.Next, open the Startup.cs file. Do metody Konfigurace přidejte následující kód:Add the following code to the Configuration method:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
        app.MapSignalR();
    }
}
  • "Server" je název serveru, na kterém běží Redis."server" is the name of the server that is running Redis.
  • port je číslo portu.port is the port number
  • heslo je heslo, které jste definovali v souboru Redis. conf."password" is the password that you defined in the redis.conf file.
  • "AppName" je libovolný řetězec."AppName" is any string. Signal vytvoří Redis kanál pro publikování a podkanál s tímto názvem.SignalR creates a Redis pub/sub channel with this name.

Příklad:For example:

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

Nasazení a spuštění aplikaceDeploy and Run the Application

Připraví instance Windows serveru pro nasazení aplikace Signal.Prepare your Windows Server instances to deploy the SignalR application.

Přidejte roli IIS.Add the IIS role. Zahrňte funkce pro vývoj aplikací, včetně protokolu WebSocket.Include "Application Development" features, including the WebSocket Protocol.

Zahrňte také službu správy (v seznamu "nástroje pro správu").Also include the Management Service (listed under "Management Tools").

Nainstalujte Nasazení webu 3,0.Install Web Deploy 3.0. Spustíte-li správce služby IIS, zobrazí se výzva k instalaci webové platformy společnosti Microsoft nebo můžete instalační program stáhnout.When you run IIS Manager, it will prompt you to install Microsoft Web Platform, or you can download the installer. V instalačním programu platformy vyhledejte Nasazení webu a nainstalujte Nasazení webu 3,0In the Platform Installer, search for Web Deploy and install Web Deploy 3.0

Ověřte, zda je spuštěna služba webové správy.Check that the Web Management Service is running. V takovém případě službu spusťte.If not, start the service. (Pokud se služba webové správy nezobrazuje v seznamu služeb systému Windows, ujistěte se, že jste nainstalovali službu správy při přidání role služby IIS.)(If you don't see Web Management Service in the list of Windows services, make sure that you installed the Management Service when you added the IIS role.)

Ve výchozím nastavení služba webové správy naslouchá na portu TCP 8172.By default, the Web Management Service listens on TCP port 8172. V bráně Windows Firewall vytvořte nové příchozí pravidlo povolující přenosy TCP na portu 8172.In Windows Firewall, create a new inbound rule to allow TCP traffic on port 8172. Další informace najdete v tématu Konfigurace pravidel brány firewall.For more information, see Configuring Firewall Rules. (Pokud virtuální počítače hostují v Azure, můžete to provést přímo v Azure Portal.(If you are hosting the VMs on Azure, you can do this directly in the Azure portal. Přečtěte si téma nastavení koncových bodů na virtuální počítač.)See How to Set Up Endpoints to a Virtual Machine.)

Nyní jste připraveni nasadit projekt sady Visual Studio z vývojového počítače na server.Now you are ready to deploy the Visual Studio project from your development machine to the server. V Průzkumník řešení klikněte pravým tlačítkem na řešení a pak klikněte na publikovat.In Solution Explorer, right-click the solution and click Publish.

Podrobnější dokumentaci k nasazení webu najdete v tématu Mapa obsahu nasazení webu pro Visual Studio a ASP.NET.For more detailed documentation about web deployment, see Web Deployment Content Map for Visual Studio and ASP.NET.

Pokud nasadíte aplikaci na dva servery, můžete každou instanci otevřít v samostatném okně prohlížeče a podívat se, že každý z nich obdrží zprávy signálu.If you deploy the application to two servers, you can open each instance in a separate browser window and see that they each receive SignalR messages from the other. (Samozřejmě v produkčním prostředí budou dva servery za nástroj pro vyrovnávání zatížení.)(Of course, in a production environment, the two servers would sit behind a load balancer.)

Pokud jste zajímá zprávy, které se odesílají do Redis, můžete použít klienta Redis-CLI , který se instaluje s Redis.If you're curious to see the messages that are sent to Redis, you can use the redis-cli client, which installs with Redis.

redis-cli -a password
SUBSCRIBE ChatApp