Почему Azure SignalR Service рекомендуется при развертывании приложения Blazor Server Side? - PullRequest
3 голосов
/ 12 марта 2020

Когда я публикую sh приложение Blazor Server Side на Azure, Visual Studio выдает сообщение, в котором будет указано:

Ваше приложение использует SignalR. Для сред, в которых требуется масштабирование, мы настоятельно рекомендуем добавить зависимость от Azure Служба SignalR.

Однако мое приложение работает нормально, без использования Azure Служба SignalR. Поэтому мне было интересно, действительно ли имеет смысл интегрировать его или это просто способ для Microsoft выжать несколько дополнительных долларов из наших карманов ...

Кто-нибудь пробовал развертывать приложение Blazor Server Side с и без Azure Служба SignalR, чтобы проверить, есть ли какая-либо реальная разница в производительности? Какое преимущество я должен ожидать от этого?

enter image description here

Ответы [ 2 ]

3 голосов
/ 12 марта 2020

Здесь есть несколько переменных, поэтому никто не может сказать вам: «Выше X-клиентов вам нужно использовать сервис SignalR». В зависимости от того, как подготовлено ваше решение, тот или иной компонент может быть ограничивающим фактором.

Например, ограничения службы сервиса показывают максимальное количество веб-сокетов на экземпляр Web App. Для уровня Basi c это 350. Когда вам нужно 351, вы можете выбрать:

  • Увеличить план обслуживания приложения до уровня Standard или выше.
  • Добавьте дополнительный экземпляр и используйте объединительную плату Redis или Service Bus.
  • Воспользуйтесь услугой SignalR.
  • Отключите веб-сокеты от SignalR и положитесь на что-то вроде длинного опроса, который ограничен ресурсами сервера.

После того, как вы go перейдете на стандартный уровень обслуживания и масштабируете его до нескольких экземпляров веб-приложения, вы сможете довольно далеко разместить хостинг SignalR самостоятельно. Таким образом, мы использовали более 5K одновременно подключенных клиентов с четырьмя экземплярами Standard S3. Четвертое - вводящее в заблуждение число, потому что нам нужна была мощность для других частей нашего приложения, а не только для SignalR.

Когда вы сами принимаете SignalR, это накладывает некоторые ограничения, и вы можете повесить себя различными способами. Например, при использовании SignalR netcore вам необходимо иметь токен ARR для среды с несколькими экземплярами. Это отстой. И я однажды реализовал тесное переподключение опроса после того, как соединение было закрыто с внешнего интерфейса. Было забавно, когда наши серверы отключались более двух минут, возвращались обратно, и у нас было несколько тысяч веб-браузеров, которые пытались восстановить соединение. А в стандартном веб-приложении уровня действительно сложно определить, какой процент памяти и ЦП потребляют несколько соединений через веб-сокеты.

Итак, после всего сказанного, ответ звучит так: «Это зависит от многих вещей». Сделав это обоими способами, я бы на 1024 * вперед и использовал бы сервис SignalR.

0 голосов
/ 12 марта 2020

Приложение Blazor Server построено поверх ASP. NET Core SignalR. Каждый клиент связывается с сервером через одно или несколько соединений SignalR, называемых цепью. Схема - это абстракция Blazor над соединениями SignalR, которая может выдерживать временные прерывания работы сети. Когда клиент Blazor видит, что соединение SignalR отключено, он пытается повторно подключиться к серверу, используя новое соединение SignalR.

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

Всякий раз, когда вам нужно масштабировать SignalR, вам необходимо реализовать шаблон называется объединительной платой. Используя Azure Сервис SignalR, он уже там, поэтому вам не нужно делать это самостоятельно.

https://docs.microsoft.com/en-us/aspnet/core/blazor/hosting-models?view=aspnetcore-3.1

...