Как разрешить ограничения SignalR в scaleout для объединительной платы - программирование
Подтвердить что ты не робот

Как разрешить ограничения SignalR в scaleout для объединительной платы

Я использую ASP.NET MVC и С#. Я нашел SignalR для передачи данных в реальном времени, но signalR имеет некоторые ограничения.

в соответствии с проблемой для этого:

Используя объединительную плату, максимальная пропускная способность сообщения ниже, чем когда клиенты разговаривают напрямую с одним сервером node. Это потому, что объединительная плата пересылает каждое сообщение на каждый node, поэтому объединительная плата может стать узким местом. Является ли это ограничение проблемой, зависит от приложения. Например, вот некоторые типичные сценарии SignalR:

  • Передача сервера (например, биржевой тикер): объединительные платы работают хорошо для этого сценарий, поскольку сервер контролирует скорость, с которой отправлено.
  • Клиент-клиент (например, чат): в этом случае объединительная плата может быть узким местом, если количество сообщений масштабируется с количеством клиенты; то есть, если скорость сообщений растет пропорционально больше клиентов присоединяется.
  • Высокочастотное реальное время (например, игры в реальном времени): объединительная плата не является рекомендуется для этого сценария.

Мой проект нуждается в высокочастотном реальном времени (например, в играх реального времени).

Также мне нужен видеочат в реальном времени

Мой сценарий:

У меня есть сервер Master и несколько подчиненных серверов, клиенты подключаются к подчиненным серверам, а подчиненные серверы подключаются к главному серверу.

Пример: Сервер Slave-1 и сервер Slave-2, подключенный к главному серверу, клиент-A и клиент-B, подключенный к Slave-1, клиент-C и клиент-D, подключенный к ведомому-2,

client-A отправить сообщение или данные или в реальном чате с клиентом-D

Как я могу реализовать этот сценарий?

[Update-1]

Если я не использую signalR для этой проблемы, то что я должен использовать?

[Обновление-2]

В моем сценарии главный сервер действует как маршрутизатор, а подчиненный сервер действует как коммутатор. Клиенты, подключенные к коммутатору и коммутатору, подключенному к маршрутизатору. Если клиент-A отправляет пакет данных на клиент-C, пакет данных должен быть отправлен на пакет данных с маршрутизатором и маршрутизатором. В 2000 году возможно количество ведомых серверов и количество пользователей для каждого сервера это более 10 000.

Спасибо.

4b9b3361

Ответ 1

Объединительная плата введет задержки в доставке сообщений, что плохо работает для работы с низкой задержкой. Если вам абсолютно необходимо иметь несколько серверов для обработки ваших клиентов, и вы абсолютно должны иметь минимальную задержку, тогда объединительная плата, вероятно, не будет работать для вас.

Однако, зайдите в этот разговор на форумах ASP. Плакат видит средние задержки около 25 мс для 60 000 сообщений в секунду для 3000 подключенных клиентов на одном сервере.

Как это часто бывает, компромисс между латентностью и сложностью. Оптимальное решение предназначено для маршрутизации сообщений только на сервер (ы), содержащий целевой клиент (ы). Чтобы достичь этого, вам нужно отслеживать каждое подключение к клиенту, общаться с повторными соединениями на разных серверах и т.д. Возможно, вы можете решить это с помощью нескольких десятков часов жесткого программирования, но при этом вы собираетесь нарушить большую часть что делает SignalR полезным.

Для альтернатив первое, что приходит на ум, ZeroMQ. Немного больше работы, особенно если ваши клиенты основаны на браузере, но низкая задержка и высокая пропускная способность - это цели проекта для ZeroMQ. Вам нужно будет справиться с масштабированием, хотя... и вы вернетесь к отслеживанию точек подключения на нескольких серверах и снова подключаетесь.

Если ни одна из этих проблем не решает ваши проблемы, вам, возможно, придется посмотреть на изменение вашей архитектуры. Один из распространенных методов для MMO заключается в том, чтобы связанные клиенты подключались к тем же серверам для снижения требований к межсерверной связи. Клиенты, которые законно нуждаются в передаче данных в режиме реального времени, объединяются на одном сервере, который не должен беспокоиться о проблемах задней плоскости. Затем этот сервер передает серверу "Мастер" обратно только то, что требуется для поддержания состояния в мире и т.д.

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