Как Azure Signal R обрабатывает масштабирование сервера приложений? - PullRequest
0 голосов
/ 05 февраля 2019

У нас есть существующий веб-сервис, который мы модифицируем так, что, когда в сервисе происходят определенные события, они могут быть опубликованы заинтересованным пользователям.Мы используем службу Azure Signal R в качестве нашего механизма для передачи сообщений от нашего сервиса заинтересованным пользователям.В настоящее время наша архитектура выглядит следующим образом: enter image description here

  • Наш сервер приложений Signal R имеет только один концентратор , и в настоящее время мы запускаем три экземплярасервер приложений.Я пометил эти Экземпляр концентратора 01 , Экземпляр концентратора 02 и Экземпляр концентратора 03 на диаграмме выше.
  • Каждый экземпляр нашего существующеговеб-служба открывает одно соединение со службой Azure Signal R.Прочитав документы по внутренним документам службы Azure SignalR , я понял, что каждое клиентское соединение со службой Azure Signal R проходит одноразовое сопоставление с сервером приложений (или в данном случае с экземпляром-концентратором).На схеме я смоделировал это, показывая цветную ссылку, исходящую либо из существующего экземпляра веб-службы, либо от пользователя, и другую ссылку того же цвета и стиля, выходящую из службы Azure Signal R в один экземпляр-концентратор.

Наша главная задача - подключение существующего экземпляра веб-службы к службе Azure Signal R ( сплошные зеленые и сплошные синие ссылки на диаграмме ) может стать насыщенным, если мыпытаясь отправить слишком много событий.Мы планировали уменьшить эту проблему, чтобы открыть несколько соединений от каждого экземпляра веб-службы к службе Azure Signal R.Затем, в нашем коде, мы будем просто проходить через все соединения во время отправки сообщений.

Мы обеспокоены этим подходом в том, что мы не знаем, как эти подключения к службе Azure Signal R будут сопоставлены с экземплярами-концентраторами.Мы можем оказаться в ситуации, подобной приведенной ниже, когда один или два инстанса-концентратора в итоге берут на себя основную часть нашего трафика.enter image description here

На этой диаграмме мы видим:

  • Каждый экземпляр существующей веб-службы открыл несколько подключений к службе Azure Signal R.К сожалению, Hub Instance 01 и Hub Instance 03 были назначены большинство из этих соединений.Это означает, что они возьмут на себя основную часть нашего трафика и в конечном итоге начнут перегреваться.

Это приводит меня к следующим вопросам:

  1. Есть что-нибудьмы можем сделать в нашей существующей веб-службе, чтобы убедиться, что соединения, которые мы устанавливаем со службой Azure Signal R, равномерно распределены по инстансам-концентраторам?
  2. Что мы можем сделать, если один из наших инстансов-концентраторов начнет перегреваться?Кажется, что просто добавление еще одного инстанса-концентратора не поможет, потому что этому экземпляру будут назначены только новые клиенты.Есть ли способ перебалансировать соединения службы Azure Signal R при подключении нового инстанса-концентратора?
  3. Как влияют клиентские соединения, если экземпляр сервера приложений выходит из строя (т. Е. Для развертывания обновлений)?Разорваны ли клиентские соединения, и затем предполагается, что клиент будет переподключен?
  4. Как в службе Azure Signal R балансируются соединения, если самому кластеру службы Signal R необходимо увеличить или уменьшить масштаб?
...