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

Предупреждение

Эта документация не для последней версии SignalR. Взгляните на ASP.NET Core SignalR.

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

Предыдущие версии этого раздела

Сведения о более ранних версиях SignalR см. в разделе Старые версии SignalR.

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

Оставьте отзыв о том, как вам понравилось это руководство и что мы могли бы улучшить в комментариях в нижней части страницы. Если у вас есть вопросы, которые не связаны напрямую с руководством, вы можете опубликовать их на форуме ASP.NET SignalR или StackOverflow.com.

В этом руководстве вы будете использовать Redis для распространения сообщений между приложением SignalR, развернутыми в двух отдельных экземплярах IIS.

Redis — это хранилище ключей и значений в памяти. Он также поддерживает систему обмена сообщениями с моделью публикации и подписки. Серверная панель SignalR Redis использует функцию pub/sub для пересылки сообщений на другие серверы.

Схема, показывающая стрелки от Redis Server к V M, а затем к компьютерам. Одна стрелка с меткой Опубликовать переходит от V M к серверу Redis.

В этом руководстве будут использоваться три сервера:

  • Два сервера под управлением Windows, которые будут использоваться для развертывания приложения SignalR.
  • Один сервер под управлением Linux, который будет использоваться для запуска Redis. Для снимков экрана в этом руководстве я использовал Ubuntu 12.04 TLS.

Если у вас нет трех физических серверов, можно создать виртуальные машины в Hyper-V. Другой вариант — создать виртуальные машины в Azure.

Хотя в этом руководстве используется официальная реализация Redis, существует также порт Redis для Windows от MSOpenTech. Настройка и настройка различаются, но в противном случае действия одинаковы.

Примечание

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

Общие сведения

Прежде чем мы приступим к подробному руководству, ознакомьтесь с кратким обзором действий.

  1. Установите Redis и запустите сервер Redis.

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

  3. Создайте приложение SignalR.

  4. Добавьте следующий код в файл Startup.cs, чтобы настроить серверную панель:

    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-V

С помощью Windows Hyper-V можно легко создать виртуальную машину Ubuntu в Windows Server.

Скачайте ISO-файл Ubuntu по ссылке http://www.ubuntu.com.

В Hyper-V добавьте новую виртуальную машину. На шаге Подключение виртуального жесткого диска выберите Создать виртуальный жесткий диск.

Снимок экрана: диалоговое окно Мастера создания виртуальных машин. Выбраны варианты

На шаге Параметры установки выберите Файл образа (ISO-файл), нажмите кнопку Обзор и перейдите к ISO-файлу установки Ubuntu.

Снимок экрана: мастер создания виртуальной машины на странице параметров установки. Установка O S из загрузочного ПЗУ CD V D и файл образа точка i s o выбраны.

Установка Redis

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

По умолчанию Для Redis пароль не требуется. Чтобы задать пароль, измените redis.conf файл, который находится в корневом каталоге исходного кода. (Создайте резервную копию файла перед его редактированием.) Добавьте следующую директиву в redis.conf:

requirepass YourStrongPassword1234

Теперь запустите сервер Redis:

src/redis-server redis.conf

Снимок экрана: страница main сервера Redis.

Откройте порт 6379, который является портом по умолчанию, который прослушивает Redis. (Номер порта можно изменить в файле конфигурации.)

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

Создайте приложение SignalR, выполнив одно из следующих руководств:

Далее мы изменим приложение чата для поддержки масштабирования с помощью Redis. Сначала добавьте Microsoft.AspNet.SignalR.StackExchangeRedis пакет NuGet в проект. В Visual Studio в меню Сервис выберите Диспетчер пакетов NuGet, а затем — Консоль диспетчера пакетов. В окне "Консоль диспетчера пакетов" введите следующую команду:

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

Затем откройте файл Startup.cs. Добавьте следующий код в метод Configuration :

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.
  • port — номер порта
  • password — это пароль, определенный в файле redis.conf.
  • AppName — это любая строка. SignalR создает канал redis pub/sub с таким именем.

Пример:

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

Развертывание и запуск приложения

Подготовьте экземпляры Windows Server для развертывания приложения SignalR.

Добавьте роль IIS. Включите функции "Разработка приложений", включая протокол WebSocket.

Снимок экрана: мастер добавления ролей и компонентов. Выбраны роли сервера и протокол WebSocket.

Также включите службу управления (указанную в разделе "Средства управления").

Снимок экрана: мастер добавления ролей и компонентов. Выбрана служба управления.

Установите веб-развертывание 3.0. При запуске диспетчера IIS будет предложено установить веб-платформа Майкрософт или скачать установщик. В установщике платформы найдите веб-развертывание и установка веб-развертывания 3.0.

Снимок экрана: диалоговое окно установщика веб-платформы 4 в точке 5. Выбрано веб-развертывание 3, точка 0.

Убедитесь, что служба веб-управления запущена. Если это не так, запустите службу. (Если вы не видите веб-службу управления в списке служб Windows, убедитесь, что служба управления установлена при добавлении роли IIS.)

По умолчанию служба веб-управления прослушивает TCP-порт 8172. В брандмауэре Windows создайте новое правило для входящего трафика, разрешающее трафик TCP через порт 8172. Дополнительные сведения см. в разделе Настройка правил брандмауэра. (Если вы размещаете виртуальные машины в Azure, это можно сделать непосредственно в портал Azure. См. раздел Настройка конечных точек для виртуальной машины.)

Теперь вы готовы развернуть проект Visual Studio с компьютера разработки на сервере. В Обозреватель решений щелкните решение правой кнопкой мыши и выберите команду Опубликовать.

Более подробную документацию по веб-развертыванию см. в статье Карта содержимого веб-развертывания для Visual Studio и ASP.NET.

При развертывании приложения на двух серверах можно открыть каждый экземпляр в отдельном окне браузера и увидеть, что каждый из них получает сообщения SignalR от другого. (Конечно, в рабочей среде два сервера будут находиться за подсистемой балансировки нагрузки.)

Снимок экрана: два открытых окна браузера с приложением, развернутыми на двух серверах.

Если вам интересно просмотреть сообщения, отправляемые в Redis, можно использовать клиент redis-cli , который устанавливается вместе с Redis.

redis-cli -a password
SUBSCRIBE ChatApp

Снимок экрана: нумерованный список в окне Redis.