Масштабирование SignalR с помощью Redis (SignalR 1.x)
Предупреждение
Эта документация не подходит для последней версии SignalR. Ознакомьтесь с ASP.NET Core SignalR.
В этом руководстве вы будете использовать Redis для распространения сообщений между приложением SignalR, которое развернуто в двух отдельных экземплярах IIS.
Redis — это хранилище ключей и значений в памяти. Она также поддерживает систему обмена сообщениями с моделью публикации и подписки. Объединитеьная панель Redis SignalR использует функцию pub/sub для пересылки сообщений на другие серверы.
В этом руководстве будут использоваться три сервера:
- Два сервера под управлением Windows, которые будут использоваться для развертывания приложения SignalR.
- Один сервер под управлением Linux, который будет использоваться для запуска Redis. Для снимков экрана в этом руководстве я использовал Ubuntu 12.04 TLS.
Если у вас нет трех физических серверов, можно создать виртуальные машины в Hyper-V. Другой вариант — создать виртуальные машины в Azure.
Хотя в этом руководстве используется официальная реализация Redis, существует также порт Redis для Windows от MSOpenTech. Настройка и настройка отличаются, но в противном случае действия будут одинаковыми.
Примечание
Масштабирование SignalR с помощью Redis не поддерживает кластеры Redis.
Общие сведения
Прежде чем мы приступим к подробному руководству, ознакомьтесь с кратким обзором того, что вы будете делать.
Установите Redis и запустите сервер Redis.
Добавьте в приложение следующие пакеты NuGet:
Создайте приложение SignalR.
Добавьте следующий код в Global.asax, чтобы настроить объединителю:
protected void Application_Start() { GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName"); RouteTable.Routes.MapHubs(); // ... }
Ubuntu на Hyper-V
С помощью Windows Hyper-V можно легко создать виртуальную машину Ubuntu на Windows Server.
Скачайте ISO-файл Ubuntu по ссылке http://www.ubuntu.com.
В Hyper-V добавьте новую виртуальную машину. На шаге Подключение виртуального жесткого диска выберите Создать виртуальный жесткий диск.
На шаге Параметры установки выберите Файл образа (ISO), нажмите кнопку Обзор и перейдите к ISO-файлу установки Ubuntu.
Установка Redis
Чтобы скачать и выполнить сборку Redis, выполните действия, описанные в этой статье http://redis.io/download .
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
Откройте порт 6379, который по умолчанию прослушивает Redis. (Номер порта можно изменить в файле конфигурации.)
Создание приложения SignalR
Создайте приложение SignalR, выполнив одно из следующих руководств:
Далее мы изменим приложение чата для поддержки масштабирования с помощью Redis. Сначала добавьте пакет NuGet SignalR.Redis в проект. В Visual Studio в меню Сервис выберите Диспетчер пакетов NuGet, а затем консоль диспетчера пакетов. В окне "Консоль диспетчера пакетов" введите следующую команду:
Install-Package Microsoft.AspNet.SignalR.Redis
Затем откройте файл Global.asax. Добавьте следующий код в метод Application_Start :
protected void Application_Start()
{
GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
RouteTable.Routes.MapHubs();
}
- "server" — это имя сервера, на котором выполняется Redis.
- port — номер порта.
- password — это пароль, определенный в файле redis.conf.
- AppName — это любая строка. SignalR создает канал redis pub/sub с таким именем.
Пример:
GlobalHost.DependencyResolver.UseRedis("redis-server.cloudapp.net", 6379,
"MyStrongPassword1234", "ChatApp");
Развертывание и запуск приложения
Подготовьте экземпляры Windows Server для развертывания приложения SignalR.
Добавьте роль IIS. Включите функции разработки приложений, включая протокол WebSocket.
Также включите службу управления (указанную в разделе "Средства управления").
Установите веб-развертывание 3.0. При запуске диспетчера IIS будет предложено установить веб-платформа Майкрософт или скачать установщик. В установщике платформы выполните поиск веб-развертывания и установки веб-развертывания 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