объединительную шину

advertisement
Microsoft Developer Tour
Технологическая экспедиция
msdevtour.ru
Коммуникации в реальном
времени с ASP.NET SignalR
Владимир Юнев
Содержание
Введение в веб-общение в реальном времени
Как общаются браузеры
ASP.NET SignalR
Магия реального времени за пару минут
Построение масштабных проектов
Масштабирование ASP.NET SignalR
Введение в общение
в реальном времени
Как общаются браузеры
Microsoft Developer Tour #MSDevTour
Общение не в реальном времени
Общение в реальном времени
Проще говоря…
SignalR - это абстракция,
которая умеет выбирать
способ взаимодействия
в real-time поверх HTTP
ASP.NET SignalR
Магия реального времени за пару минут
Microsoft Developer Tour #MSDevTour
Представляем SignalR
Абстракция поверх транспортных протоколов
События вместо задач/асинхронности
Управление соединениями
Широковещательные или целевые рассылки на клиентов
Что делает SignalR?
Постоянное соединение от Клиента к Серверу поверх HTTP
Легкое создание много-пользовательских
веб-приложений реального времени
Автоматически настраиваемые транспортные протоколы
Обратная совместимость SignalR
Web
Sockets
Forever
Frames
Long
Polling
Server Sent
Events
Что еще делает SignalR?
Позволяет делать пуши server-to-client и RPC
Строить асинхронные соединения
с масштабированием до тысяч клиентов
Масштабироваться с Service Bus, SQL Server & Redis
Open Source на GitHub
ASP.NET SignalR 2.0
Поддержка iOS и Android
Добавлена поддержка iOS и Android через компоненты
MonoTouch и MonoDroid компании Xamarin
Portable .NET Client
Поддержка платформ: NET 4.5, Silverlight 5,
Windows Phone 8, WinRT (.NET для Windows Store Apps)
Self Hosting Package
NuGet-пакет для самостоятельного хостинга SignaR
Обратная совместимость
Сервер и клиент могут иметь разные версии
ASP.NET SignalR 3.0 –
часть ASP.NET 5
подробности уже скоро…
Ключевые концепции SignalR
Хаб
• Более высоко-уровневый пайплайн построенный поверх Connection API,
что позволяет вашему клиенту и серверу вызывать методы друг-друга
Connection
• Представляет простейшую конечную точку для отправки сообщений
единичным клиентам, группам или широковещательные
Объединительная шина (Backplane)
• Объединительная шина позволяет вам масштабировать ваше приложение
на множество серверов. При использовании шины, каждый экземпляр
приложения отправляет сообщения в шину, а она, в свою очередь,
перенаправляет их другим экземплярам приложений
Хабы
Microsoft Developer Tour #MSDevTour
Хабы SignalR
Так как Хабы вызываются
на клиенте по имени,
это имя может быть
настроено по желанию
Хаб – это .NET-класс,
который наследуется от
Microsoft.AspNet.SignalR.Hub
Clients представляет
динамические свойства
полезные при работе с
разными устройствами
Класс Hub так же предлагает
виртуальные методы
полезные для ответа
на события под(от)ключения
Отправка сообщения всем подключенным клиентам
Clients.All.doWork()
Отправка сообщений вызывающему клиенту
Clients.Caller.doWork()
Отправка сообщений остальным клиентам
Clients.Others.doWork()
Отправка сообщений определенным клиентам
Clients.Users(“Brady”).doWork()
SignarlR Hub - сервер
public class ChatHub : Hub
{
public void SendMessage(String message)
{
Clients.addMessage(message);
}
}
Чат на базе SignalR Hub
var hub = $.connection.chat;
hub.addMessage = function (message) {
$("#msgs").append("<li>" + message + "</li>");
};
$.connection.hub.start().done(function () {
$("#send").click(function () {
hub.sendMessage($("#msg").val());
});
});
DEMO
Магия SignalR
Microsoft Developer Tour #MSDevTour
Построение масштабных
проектов реального времени
Паттерны масштабирования ASP.NET SignalR
Microsoft Developer Tour #MSDevTour
Обратите внимание на…
Блокировки, блокирующий I/O
никогда не блокируйте метод Hub
используйте async везде, где только можно
Отправка больших сообщений
Избегайте утечек памяти
плохое пониманием жизненного цикла объекта SignalR
Сессии – никогда не используйте их из SignalR, точка.
используйте сессии Hub, куки, хранилище браузера, БД, и т.д.
Архитектура SignalR : публикации/подписки
шина
сообщений
Паттерн 1. Серверный броадкаст
• Броадкаст с низкой нагрузкой
единого сообщения всем клиентам
• Одна отправка шины сообщения соответствует
многим пользователям (fan out)
• Увеличение клиентов не увеличивает
траффик очереди сообщений
Примеры: уведомления в приложении, простое табло акций
Паттерн 2. Серверный пуш
• Броадкаст с низкой нагрузкой
уникальных сообщений каждому клиенту
• Одна отправка шины сообщения соответствует
одному пользователю (no fan out)
• Увеличение клиентов означает увеличение
траффика очереди сообщений
Примеры: мониторинг уникальных акций, мониторинг задач
Паттерн 3. По событию от пользователя
• Броадкаст по действию клиентов
• Одна отправка шины сообщения соответствует
многим пользователям (fan out)
• Увеличение клиентов означает
больше траффика очереди сообщений
Примеры: приложения чатов, общая работа над документами
Паттерн 4. Высокочастотное общение
• Фиксированный высокоскоростной
броадкаст от серверов и клиентов
• Мы не рекомендуем > 25Hz
• Одна отправка шины сообщения соответствует
одному пользователю (no fan out)
• Больше клиентов означает увеличение
траффика очереди сообщений
• Примеры: игры в реальном времени, shootr.signalr.net
Паттерны нагрузки, итоги
1. Серверный броадкаст
низкая частота, сообщение всем
2. Серверный пуш
низкая частота, сообщение уникальным
3. На базе событий клиента
броадкаст на события клиента
4. Высокая частота
фиксированная высокая частота, уникальные сообщения
Инструменты тестирования масштабирования
Счетчики производительности
Microsoft.AspNet.SignalR.Utils, signalr.exe -ipc
crank.exe для генерации нагрузки SignalR
Нагрузочное тестирование хостинга конечных точек
stress.exe для запуска изолированных сценариев in-proc
Настройки IIS для управления лимитами
Проблема масштабирования: доставка сообщения
Проблема масштабирования: скорость клиента
Проблема масштабирования: распределенный клиент
Хабы привязаны к серверу,
так что вам требуется использовать
объединительную шину,
когда вы запускаете веб-ферму
Как работает объединительная шина?
Что SignalR делает без шины?
Как работает объединительная шина?
Вот как объединительная шина решает проблему
Архитектура масштабирования
Объединительная шина
web nodes
клиенты
Реализация масштабирования
• SQL Server, Redis & Azure Service Bus
• Самая легкая установка (пакет NuGet + 1 строчка кода)
• Великолепно подходит для паттерна нагруженного броадкаста
• Ограниченно для других сценариев
Каждое сообщение отправляется на каждый сервер, так что по мере
увеличения траффика вы упираетесь в скорость выборки сообщений из
объединительной шины одним веб-сервером
• Объединительная шина значительно медленнее
чем производительность одного сервера
пропускная ширина != масштабу
Настройка масштабирования: Общий сервер
• Подходит для одновременной работы
над документами, вайтбордами
• Клиенты работающие над одной задачей идут на один сервер
• Приложение знает какая задача происходит на каком сервере
похоже на идею игрового лобби игры в реальном времени
при подсоединении к серверу
• Используйте группы для разделения траффика,
например, группы на один документ
• Масштабирование выделенного сервера через задачу
одновременной работы
Настройка масштабирования: Server affinity
foo
Настройка масштабирования: Специфический сервер
• Подходит для сценария Серверный Пуш;
уникальные клиенты
• Подключение клиента к специфическому серверу
и сохранение этой связи
• Публикация сообщений для клиента
на привязанный сервер через конечную точку
Настройка масштабирования: Специфический сервер
Настройка масштабирования: Шина сообщений с фильтрами
• Подходит для сценария Серверный Пуш;
уникальные клиенты
• Веб-сервера подключаются к шине
с фильтрами на подписке
• Фильтр обновляется при каждом подключении
• При поступлении сообщения
производится локальный броадкаст
Настройка масштабирования: Шина сообщений с фильтрами
Объединительная шина
web nodes
клиенты
Настройка масштабирования: Перенос сервера
• Подходит для игр в реальном времени,
когда требуется перенести игрока в другой
шард/вселенную/мир (другой сервер)
• Производительность уровня
сервера (очень высокая)
• Нельзя отправлять сообщения
между клиентами на разных серверах
без дополнительной работы
Настройка масштабирования: Гибрид
Микс и соответствие нескольким паттернам
• Например, объединение подходов plug-in scale-out providers
с server affinity для отказо-усточивой совместной работы над
документами, где пользователь первым приходит в лобби,
выбирает документ/комнату, затем подключается к кластеру,
который обслуживает этот документ, который сам
сконфигурирован в подходе plug-in scale-our providers
• Например, используйте подход «перенос сервера» для
высоко-частотного обмена в приложении и настройте
доставку сервер-на-сервер для уведомлений и оповещений
внутри приложения
Заключение
SignalR делает общение в реальном времени простым
И предлагает магию…
ASP.NET SignalR – готовая инфраструктура
Хабы, подключения, шины – все для любых решений
Построение проектов реального времени
ASP.NET SignalR подходит для любых паттернов масштаба
Всем спасибо! Ваши вопросы
Владимир Юнев
эксперт по стратегическим технологиям, Microsoft
azurerus@microsoft.com
@XaocCPS
http://facebook.com/yunev
http://blogs.msdn.com/b/vyunev
Группа Azure для всех – http://facebook.com/groups/azurerus/
azure.com
asp.net
msftva.ru
©2015 Microsoft Corporation. All rights reserved. Microsoft, Windows, Office, Azure, System Center, Dynamics and other product names are or may be registered trademarks and/or
trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this
presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee
the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN
THIS PRESENTATION.
Download