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

Pub/sub с сохранением доступа к полному состоянию системы

У меня есть сервер, который поддерживает глобальное состояние приложения.

Клиенты могут подключаться к серверу и получать сообщения об изменениях в глобальном состоянии (механизм публикации/подписки, чтобы сервер мог транслировать информацию).

Однако при запуске у клиентов вообще нет информации о глобальном состоянии, а она им нужна. Я хочу, чтобы для любого нового клиента, подписывающегося на систему, первое уведомление было полным состоянием приложения. Затем они получают только изменения об этом состоянии:

  1. клиент подключается к системе обмена сообщениями
  2. он подписывается на систему обмена сообщениями
  3. первое сообщение, которое он получает, это полное состояние системы
  4. затем он получает только изменения о глобальном состоянии

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

Системы обмена сообщениями, такие как ActiveMQ или Stomp, прекрасно подходят для моих нужд, поскольку они многоязычны и могут использоваться с несколькими транспортными уровнями. Однако не существует понятия отправки полного состояния (или согласованного накопления последних изменений).

Конечно, я мог бы легко обеспечить это состояние статическим способом (сначала я получаю полное состояние, а затем подписываюсь на систему публикации/подписки), однако я должен быть осторожен с возможными изменениями в то же время (не потерял ли я некоторые изменения? при обработке полного состояния?Учтено ли это изменение в глобальном состоянии, которое я только что получил?...). Однако я теряю многоязычный/мультитранспортный аспект, уже обеспечиваемый Stomp и ActiveMQ.

Существуют ли какие-либо существующие библиотеки/инструменты для этого? Какие-то расширения для ActiveMQ? Что-то похожее на Стомп? Или нужно делать своими руками?


Ответы:


1

Это не проблема домена обмена сообщениями, а конкретный вариант использования. Pub/Sub не предназначен для получения какой-либо информации о состоянии производителя/потребителя, он просто проксирует сообщения.

Тем не менее, есть несколько различных шаблонов повторной доставки, которые можно использовать, чтобы немного сократить разрыв (Политика подписки на последнее изображение и т. д.), но я бы предпочел более простые решения. Кроме того, вы можете рассмотреть возможность использования чего-то вроде Apache Camel, чтобы разместить его между производителями и подписчиками, чтобы обеспечить эту дополнительную логику.

Как вы сказали, сложная часть заключается в том, чтобы синхронизировать добавочные обновления с полученным полным образом системы. Сверху, вот что я бы сделал...

  • предоставить службу REST, позволяющую любым клиентам получать полное состояние системы
  • добавить увеличивающийся номер версии как к полным данным состояния, так и к данным добавочного обновления
  • when a client comes online
    • subscribe to start getting incremental updates (queue them internally for now)
    • используйте службу REST, чтобы получить полное состояние системы
    • затем начните обработку добавочных обновлений и игнорируйте старые на основе номеров версий.
23.04.2012
  • Да, я бы тоже так делал по умолчанию. Я жду еще несколько дней для других ответов на всякий случай. 23.04.2012
  • круто... Мне любопытно, знает ли кто-нибудь более чистый подход... хороший вопрос 24.04.2012
  • Новые материалы

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

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

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

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

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

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

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