Масштабирование SignalR с помощью RedisSignalR Scaleout with Redis

по Майк Уоссонby Mike Wasson

Warning

Эта документация не относится к последней версии SignalR.This documentation isn't for the latest version of SignalR. Ознакомьтесь с ASP.NET Core SignalR.Take a look at ASP.NET Core SignalR.

Версии программного обеспечения, используемые в этом разделеSoftware versions used in this topic

Предыдущие версии этого разделаPrevious versions of this topic

Сведения о более ранних версиях SignalR см. в статье о старых версияхSignalR.For information about earlier versions of SignalR, see SignalR Older Versions.

Вопросы и комментарииQuestions and comments

Оставьте отзыв о том, как вы понравится вам в этом учебнике, и что можно улучшить в комментариях в нижней части страницы.Please leave feedback on how you liked this tutorial and what we could improve in the comments at the bottom of the page. Если у вас есть вопросы, не связанные непосредственно с этим руководством, их можно опубликовать на форуме ASP.NET SignalR или 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.

В этом руководстве вы будете использовать Redis для распространения сообщений в приложении SignalR, которое развернуто на двух отдельных экземплярах IIS.In this tutorial, you will use Redis to distribute messages across a SignalR application that is deployed on two separate IIS instances.

Redis — это хранилище "ключ — значение" в памяти.Redis is an in-memory key-value store. Она также поддерживает систему обмена сообщениями с моделью публикации и подписки.It also supports a messaging system with a publish/subscribe model. Для пересылки сообщений на другие серверы в объединительной плате Redis SignalR используется функция Pub/Re-in.The SignalR Redis backplane uses the pub/sub feature to forward messages to other servers.

В рамках этого руководства вы будете использовать три сервера:For this tutorial, you will use three servers:

  • Два сервера под Windows, которые будут использоваться для развертывания приложения SignalR.Two servers running Windows, which you will use to deploy a SignalR application.
  • Один сервер под управлением Linux, который будет использоваться для запуска Redis.One server running Linux, which you will use to run Redis. Для снимков экрана в этом учебнике я использовал Ubuntu 12,04 TLS.For the screenshots in this tutorial, I used Ubuntu 12.04 TLS.

Если у вас нет трех физических серверов, можно создать виртуальные машины в Hyper-V.If you don't have three physical servers to use, you can create VMs on Hyper-V. Другой вариант — создать виртуальные машины в Azure.Another option is to create VMs on Azure.

Хотя в этом учебнике используется официальная реализация Redis, в MSOpenTech также есть порт Windows Redis .Although this tutorial uses the official Redis implementation, there is also a Windows port of Redis from MSOpenTech. Установка и настройка различаются, но в противном случае шаги одинаковы.Setup and configuration are different, but otherwise the steps are the same.

Note

Масштабирование SignalR с помощью Redis не поддерживает кластеры Redis.SignalR scaleout with Redis does not support Redis clusters.

ОбзорOverview

Прежде чем приступить к работе с подробным руководством, ознакомьтесь с кратким обзором того, что вы сделаете.Before we get to the detailed tutorial, here is a quick overview of what you will do.

  1. Установите Redis и запустите сервер Redis.Install Redis and start the Redis server.

  2. Добавьте следующие пакеты NuGet в приложение:Add these NuGet packages to your application:

  3. Создание приложения SignalR.Create a SignalR application.

  4. Добавьте следующий код в Startup.cs, чтобы настроить объединительную плату: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 на Hyper-VUbuntu on Hyper-V

С помощью Windows Hyper-V вы можете легко создать виртуальную машину Ubuntu на Windows Server.Using Windows Hyper-V, you can easily create an Ubuntu VM on Windows Server.

Скачайте ISO-образ Ubuntu с http://www.ubuntu.com.Download the Ubuntu ISO from http://www.ubuntu.com.

В Hyper-V добавьте новую виртуальную машину.In Hyper-V, add a new VM. На шаге Подключить виртуальный жесткий диск выберите создать виртуальный жесткий диск.In the Connect Virtual Hard Disk step, select Create a virtual hard disk.

На шаге Параметры установки выберите файл образа (. ISO) , нажмите кнопку Обзори перейдите к ISO-образ установки Ubuntu.In the Installation Options step, select Image file (.iso), click Browse, and browse to the Ubuntu installation ISO.

Установка RedisInstall Redis

Выполните действия, описанные в http://redis.io/download , чтобы скачать и создать 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

Это приведет к сборке двоичных файлов Redis в каталоге src.This builds the Redis binaries in the src directory.

По умолчанию Redis не требует пароля.By default, Redis does not require a password. Чтобы задать пароль, измените файл redis.conf, который находится в корневом каталоге исходного кода.To set a password, edit the redis.conf file, which is located in the root directory of the source code. (Создайте резервную копию файла, прежде чем изменять его!) Добавьте следующую директиву в redis.conf:(Make a backup copy of the file before you edit it!) Add the following directive to redis.conf:

requirepass YourStrongPassword1234

Теперь запустите сервер Redis:Now start the Redis server:

src/redis-server redis.conf

Откройте порт 6379. это порт по умолчанию, который прослушивается Redis.Open port 6379, which is the default port that Redis listens on. (Номер порта можно изменить в файле конфигурации.)(You can change the port number in the configuration file.)

Создание приложения SignalRCreate the SignalR Application

Создайте приложение SignalR, следуя одному из следующих учебников:Create a SignalR application by following either of these tutorials:

Далее мы изменим приложение разговора для поддержки масштабирования с помощью Redis.Next, we'll modify the chat application to support scaleout with Redis. Сначала добавьте Microsoft.AspNet.SignalR.StackExchangeRedis пакет NuGet в проект.First, add the Microsoft.AspNet.SignalR.StackExchangeRedis NuGet package to your project. В Visual Studio в меню Сервис выберите Диспетчер пакетов NuGet, а затем выберите консоль диспетчера пакетов.In Visual Studio, from the Tools menu, select NuGet Package Manager, then select Package Manager Console. В окне "Консоль диспетчера пакетов" введите следующую команду:In the Package Manager Console window, enter the following command:

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

Затем откройте файл Startup.cs.Next, open the Startup.cs file. Добавьте следующий код в метод конфигурации :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" — имя сервера, на котором работает Redis."server" is the name of the server that is running Redis.
  • порт — номер порта.port is the port number
  • Password — это пароль, определенный в файле Redis. conf."password" is the password that you defined in the redis.conf file.
  • AppName — любая строка."AppName" is any string. SignalR создает канал Pub/Redis с таким именем.SignalR creates a Redis pub/sub channel with this name.

Пример:For example:

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

Развертывание и запуск приложенияDeploy and Run the Application

Подготовьте экземпляры Windows Server к развертыванию приложения SignalR.Prepare your Windows Server instances to deploy the SignalR application.

Добавьте роль IIS.Add the IIS role. Включите функции разработки приложений, включая протокол WebSocket.Include "Application Development" features, including the WebSocket Protocol.

Также включите службу управления (указанную в разделе "средства управления").Also include the Management Service (listed under "Management Tools").

Установите веб-развертывание 3,0.Install Web Deploy 3.0. При запуске диспетчера IIS будет предложено установить веб-платформу Майкрософт, или вы можете скачать установщик.When you run IIS Manager, it will prompt you to install Microsoft Web Platform, or you can download the installer. В установщике платформы найдите веб-развертывание и установите веб-развертывание 3,0.In the Platform Installer, search for Web Deploy and install Web Deploy 3.0

Убедитесь, что служба веб-управления запущена.Check that the Web Management Service is running. В противном случае запустите службу.If not, start the service. (Если служба веб-управления не отображается в списке служб Windows, убедитесь, что служба управления установлена при добавлении роли 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.)

По умолчанию служба веб-управления прослушивает порт TCP 8172.By default, the Web Management Service listens on TCP port 8172. В брандмауэре Windows создайте новое правило для входящего трафика, разрешающее TCP-трафик через порт 8172.In Windows Firewall, create a new inbound rule to allow TCP traffic on port 8172. Дополнительные сведения см. в разделе Настройка правил брандмауэра.For more information, see Configuring Firewall Rules. (Если вы размещаете виртуальные машины в Azure, это можно сделать непосредственно в портал Azure.(If you are hosting the VMs on Azure, you can do this directly in the Azure portal. См. раздел Настройка конечных точек для виртуальной машины.)See How to Set Up Endpoints to a Virtual Machine.)

Теперь все готово для развертывания проекта Visual Studio с компьютера разработки на сервере.Now you are ready to deploy the Visual Studio project from your development machine to the server. В обозреватель решений щелкните решение правой кнопкой мыши и выберите пункт опубликовать.In Solution Explorer, right-click the solution and click Publish.

Более подробную документацию по веб-развертыванию см. в разделе веб-развертывание Map Web для Visual Studio и ASP.NET.For more detailed documentation about web deployment, see Web Deployment Content Map for Visual Studio and ASP.NET.

При развертывании приложения на двух серверах можно открыть каждый экземпляр в отдельном окне браузера и увидеть, что каждый из них получает сообщения SignalR от другого.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. (Конечно, в рабочей среде два сервера будут находиться за подсистемой балансировки нагрузки.)(Of course, in a production environment, the two servers would sit behind a load balancer.)

Если вы хотите просмотреть сообщения, отправленные в Redis, можно использовать клиент Redis-CLI , который устанавливается вместе с 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