Nano Hash - криптовалюты, майнинг, программирование

SignalR отстает при развертывании в облаке? | .Сетевое ядро

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

Их состояние подключения управляется через HashList<>() для каждого типа пользователя (2 списка). Запись добавляется в список всякий раз, когда пользователь подключается (вызывается OnConnected()), и эта запись удаляется из списка всякий раз, когда пользователь отключается (вызывается OnDisconnected()).

Эти HashLists являются статическими переменными, следующими лиге этого ответа StackOverflow.

При локальной отладке на моем компьютере списки HashLists изменяются мгновенно, но при публикации в облачной службе (в моем случае: Azure) для обновления списков требуется время (около 10–15 секунд). Однако получение действительного соединения с сервером занимает всего около 5 секунд.

Теперь я знаю, что подключение к серверу не может быть мгновенным, и это зависит от нескольких факторов, большинство из которых вне моей досягаемости, но мгновенное обнаружение отключений (или настолько мгновенное, насколько это возможно) решит мою проблему, что я должен делать? делать? Есть ли другой подход, который я должен использовать?

PS: Мгновенное обнаружение отключений можно выполнить на стороне клиента, но в моем случае это не поможет, поскольку мне нужны данные о подключенных пользователях на сервере.


Ответы:


1

Я полагаю, что вы развертываете собственную службу SignalR. Недостаточно хранить содержимое только в статических переменных, так как нет гарантии, что ваши запросы будут перенаправлены на тот же сервер. Чтобы решить эту проблему, вам необходимо реализовать собственный шаблон объединительной платы и сохранить состояние в другом месте (например, в кэше Azure Redis).

Больше информации:

https://docs.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-in-signalr

https://docs.microsoft.com/en-us/aspnet/core/signalr/redis-backplane?view=aspnetcore-3.1

PS: я настоятельно рекомендую вам использовать службу Azure SignalR, а не размещать собственную.

02.04.2020
  • Я второй этот ответ. Масштабирование с использованием объединительной платы Redis заходит так далеко, прежде чем просто начать уничтожать экземпляр Redis. И, к сожалению, с Azure Redis нет возможности даже увидеть нагрузку, которую pubsub оказывает на экземпляр Redis, поэтому вы не знаете, что что-то идет не так, пока не начнете замечать серьезные задержки в производительности SignalR. 02.04.2020
  • Что касается Redis: я понимаю, что это поможет, если пользователи подключатся к разным серверам. Но в моем случае (фаза разработки, максимальное количество пользователей 2 или 3), если предположить, что все они подключены к одному и тому же серверу, почему обновление переменных занимает много времени? Это проблема статических переменных или узкое место из функции OnDisconnected требует времени для вызова? Что касается службы SignalR, я обязательно попробую, но опять же, приложение все еще находится в стадии разработки, я посмотрю, подойдет ли нам бесплатный план. 03.04.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..