Мы используем SignalR в крупномасштабном веб-приложении. Мы развернули несколько веб-серверов, обрабатывающих соединения signalR. У нас есть встроенная объединительная плата Redis, у меня есть следующий вопрос: SignalR делает три вызова на сервер: 1) ведет переговоры, 2) подключается и 3) запускается. Если у нас есть веб-ферма за балансировщиком нагрузки, и эти три вызова заканчиваются на трех разных серверах, будет ли состояние соединений повреждено на всех трех серверах? Что произойдет в этом сценарии? Я не говорю о доставке сообщений.Управление подключением SignalR в веб-ферме
Более конкретно:
Будет ли второй веб-сервер будет в состоянии понять ConnectionID производимого вести переговоры вызова?
Что происходит, когда физическое соединение (websockets) установлено на другом сервере, а затем стартовый вызов переходит на другой сервер ?
Я знаю, что SignalR не сообщает информацию о соединении между серверами. Мне интересно о состоянии соединений в памяти на этих трех серверах. Я прочитал еще один вопрос, связанный с этим, но он говорит только о доставке сообщений. Для нас доставка сообщений не является проблемой. Я хочу понять конечное состояние соединений, если эти три вызова заканчиваются на разных серверах.
Вопрос, который я уже прошел, чтобы получить ответ: SignalR connection affinity in web-farm scenario
Поскольку наш балансировщик нагрузки сохраняет липкость, я не могу подтвердить, что произойдет, когда липкость уходит. Я хочу быть готовым к этому событию.
Эй guruprasath, просто интересно, если вы когда-либо получили ответ на этот вопрос? В настоящее время у нас есть ферма, которая обслуживает приложение, и мы используем объединительную панель Redis, размещенную в Azure. В моем случае на балансировщике нагрузки нет липких сеансов, и я вижу таймауты и разъединения с веб-окнами, которые, я считаю, это то, чего вы боялись. Смущающая часть для меня основана на том, что я читал в документации, транспортное соединение напрямую связано с объединительной платой, что означает, что балансировка нагрузки не имеет никакого значения ... но мы не видим проблем в среде с одним узлом. – ammills01
@ ammills01, я не получил ответа. Я пробовал размещать в другом канале, но не повезло. Основываясь на том, что вы описали, я предполагаю, что ваша проблема не связана с липкостью. Мы используем собственный кластер Redis с пользовательской реализацией объединительной платы. Поэтому я не могу говорить об устойчивости объединительной платы Redis, предоставленной ими. Я понимаю, что транспортное соединение не связано с объединительной платой (что будет проблемой безопасности). Транспортное соединение осуществляется с помощью интерфейсных веб-серверов, поддерживающих веб-порты. Таким образом, липкость балансировки нагрузки может иметь большое значение. – guruprasath
Спасибо за ответ. После немного большего количества копаний я пришел к тому же выводу, который вы упомянули здесь, транспорт с сервером SignalR, поэтому без липких сеансов на запросы всплывали и не выполнялись. Когда это произойдет, вы получите тайм-ауты, и если вы настроили longPolling или другие транспортные технологии, когда вы установили соединение SignalR, он перейдет к одному из них. Для нас это поражает longPolling, и приложение, похоже, отлично работает оттуда, просто берет больше ресурсов на серверах. – ammills01