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

Патрик Флетчер

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

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

В этом руководстве вы развернете приложение SignalR в веб-роли Windows Azure, используя шину сообщений Service Bus для распределения сообщений по каждому экземпляру роли. (Вы также можете использовать шину Service Bus с веб-приложениями в Службе приложений Azure.)

Схема со стрелками от Темы к веб-роли и на компьютеры. Стрелка под названием «публикация» начинается с веб-ролей и идет к Теме.

Prerequisites:

Серверная планка служебной шины также совместима с служебной шиной для Windows Server версии 1.1. Однако она несовместима с версией 1.0 служебной шины для Windows Server.

Цены

Шина данных служебной шины использует топики для отправки сообщений. Последние сведения о ценах см. в Service Bus. На момент написания этой статьи вы можете отправлять 1000 000 сообщений в месяц менее чем на 1 долл. США. Коммутационная панель отправляет сообщение служебной шины для каждого вызова метода узла SignalR. Существуют также некоторые контрольные сообщения для подключений, отключений, присоединения или выхода из групп и т. д. В большинстве приложений большинство трафика сообщений будет вызовами методов концентратора.

Обзор

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

  1. Используйте портал Windows Azure для создания нового пространства имен служебной шины.

  2. Добавьте эти пакеты NuGet в приложение:

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

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

    public void Configuration(IAppBuilder app)
    {
        string connectionString = "Service Bus connection string";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName");
    
        app.MapSignalR();
        // ...
    }
    

Этот код настраивает бэкплейн со значениями по умолчанию для TopicCount и MaxQueueLength. Сведения об изменении этих значений см. в разделе "Производительность SignalR: Метрики масштабирования".

Для каждого приложения выберите другое значение "YourAppName". Не используйте одно и то же значение в нескольких приложениях.

Создание служб Azure

Создайте облачную службу, как описано в руководстве по созданию и развертыванию облачной службы. Выполните действия, описанные в разделе "Практическое руководство. Создание облачной службы с помощью быстрого создания". В этом руководстве не требуется отправлять сертификат.

Снимок экрана: параметр Cloud Service, обведенный красным цветом.

Создайте новое пространство имен Service Bus, как описано в разделе "Использование разделов и подписок Service Bus". Выполните действия, описанные в разделе "Создание пространства имен службы".

Снимок экрана окна под названием

Замечание

Выберите тот же регион для облачной службы и пространства имен служебной шины.

Создание проекта Visual Studio

Запустите Visual Studio. В меню "Файл" нажмите кнопку "Создать проект".

В диалоговом окне Создать проект разверните Visual C#. В разделе "Установленные шаблоны" выберите "Облако " и выберите "Облачная служба Windows Azure". Сохраните .NET Framework 4.5 по умолчанию. Назовите приложение ChatService и нажмите кнопку "ОК".

Снимок экрана: диалоговое окно

В диалоговом окне "Новая облачная служба Windows Azure" выберите ASP.NET веб-роль. Нажмите кнопку со стрелкой вправо (>), чтобы добавить роль в ваше решение.

Наведите указатель мыши на новую роль, чтобы значок карандаша был видимым. Щелкните этот значок, чтобы переименовать роль. Назовите роль SignalRChat и нажмите кнопку "ОК".

Снимок экрана: диалоговое окно

В диалоговом окне "Создать ASP.NET проект" выберите MVC и нажмите кнопку "ОК".

Снимок экрана: диалоговое окно

Мастер проектов создает два проекта:

  • ChatService: этот проект является приложением Windows Azure. Он определяет роли Azure и другие параметры конфигурации.
  • SignalRChat: этот проект является вашим проектом ASP.NET MVC 5.

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

Чтобы создать приложение чата, выполните действия, описанные в руководстве по началу работы с SignalR и MVC 5.

Используйте NuGet для установки необходимых библиотек. В меню "Сервис" выберите диспетчер пакетов NuGet, а затем консоль диспетчера пакетов. В окне консоли диспетчера пакетов введите следующие команды:

Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus

-ProjectName Используйте параметр для установки пакетов в проект ASP.NET MVC, а не проект Windows Azure.

Настройте заднюю панель

В файле Startup.cs приложения добавьте следующий код:

public void Configuration(IAppBuilder app)
{
    // Any connection or hub wire up and configuration should go here
    string connectionString = "";
    GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");  

    app.MapSignalR();
}

Теперь необходимо получить строку подключения служебной шины. На портале Azure выберите созданное пространство имен служебной шины и щелкните значок ключа доступа.

Снимок экрана, на котором показан знак

Скопируйте строку подключения в буфер обмена, а затем вставьте ее в переменную connectionString .

Снимок экрана: диалоговое окно

string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";

Развертывание в Azure

В обозревателе решений разверните папку "Роли " в проекте ChatService.

Снимок экрана, на котором показана открытая папка

Щелкните правой кнопкой мыши роль SignalRChat и выберите "Свойства". Перейдите на вкладку "Конфигурация". В разделе "Экземпляры" выберите 2. Вы также можете задать размер виртуальной машины Экстра Маленький.

Снимок экрана, на котором показан раздел «Экземпляры». Количество экземпляров установлено на 2, а размер виртуальной машины установлен на «очень маленький».

Сохраните изменения.

В обозревателе решений щелкните правой кнопкой мыши проект ChatService. Выберите Опубликовать.

Снимок экрана: обозреватель решений. Публикация выбрана в контекстном меню службы чата.

Если вы впервые публикуете в Windows Azure, необходимо скачать свои учетные данные. В мастере публикации нажмите кнопку "Войти, чтобы скачать учетные данные". При этом вам будет предложено войти на портал Windows Azure и скачать файл параметров публикации.

Снимок экрана: диалоговое окно

Щелкните "Импортировать " и выберите скачанный файл параметров публикации.

Нажмите кнопку Далее. В диалоговом окне "Параметры публикации " в разделе "Облачная служба" выберите созданную ранее облачную службу.

Снимок экрана: страница параметров публикации Windows Azure.

Нажмите кнопку Опубликовать. Развертывание приложения и запуск виртуальных машин может занять несколько минут.

Теперь при запуске приложения чата экземпляры ролей взаимодействуют через служебную шину Azure, используя тему служебной шины. Тема — это очередь сообщений, которую могут использовать несколько подписчиков.

Backplane автоматически создает топик и подписки. Чтобы просмотреть действия подписок и сообщений, откройте портал Azure, выберите пространство имен служебной шины и щелкните "Темы".

Снимок экрана: меню навигации с выбранными разделами.

Появление активности сообщения на панели мониторинга может занять несколько минут.

Снимок экрана: график действия подписки и сообщения на временной шкале.

SignalR управляет временем существования темы. Пока приложение развернуто, не пытайтесь вручную удалять разделы или изменять параметры раздела.

Troubleshooting

System.InvalidOperationException "Единственный поддерживаемый IsolationLevel — 'IsolationLevel.Serializable'."

Эта ошибка может возникнуть, если для операции установлен уровень транзакции, отличный от Serializable. Убедитесь, что операции не выполняются с другими уровнями транзакций.