Я реализовал это недавно в форме «системных сообщений», некоторые из которых предназначены для обслуживания.Но эффект тот же.У нас были некоторые дополнительные «требования», которые помогли нам сформировать решение.Они могут или не могут соответствовать вашим ожиданиям / желаниям:
- Координация нескольких серверов
- Немедленная синхронизация не была необходима
Мы использовали нашу реляционнуюбаза данных для фактического хранения данных.Одна таблица с «системными сообщениями» и несколькими другими полями, например, когда сообщения вступили в силу (not_before DATETIME
) и когда сообщения стали неэффективными (not_after DATETIME
).
При запуске приложение считываеттаблица системных сообщений для поиска действительных на данный момент сообщений и сохранения их в области действия application
, включая даты их действия.Всякий раз, когда мы хотим показать их на экране, мы проверяем каждый элемент в памяти и удаляем любой, срок действия которого истек.Это довольно быстро.
Каждые Х минут (например, с cron
) мы делаем запрос к специальному сервлету (на каждом сервере), который перезагружает системные сообщения из базы данных.Мы защищаем этот сервлет, разрешая запросы только с определенных IP-адресов, поэтому DOS не является проблемой.
Мы можем не только добавить системное сообщение с любого сервера в кластере, но и добавить его, написав непосредственно вбаза данных.Это может быть полезно, если вы не всегда хотите использовать свое приложение для генерации этих событий.
Вы можете изменить значение X на любое меньшее, чем 1 (минута), если вы используете cron
.Если вы используете какую-то другую систему, вы, вероятно, сможете получать обновления еще чаще.Я бы серьезно пересмотрел ваше требование «немедленного» распознавания, потому что для этого требуется система с гораздо худшей производительностью.
Если вы можете гарантировать, что только ваше приложение может генерировать эти изменения, и у вас есть список всех других серверовгде-то в кластере, вы можете теоретически пропинговать их все новым сообщением (или уведомить их, что новое сообщение существует, и пришло время обновить их список сообщений), но такие вещи лучше сделать с помощью инструмента оркестровки, такого какKubernetes, и мы выходим из зоны действия ИМО.