У меня есть простая коллекция пар ключ-значение в моей базе данных mongo, в ней хранятся сведения о конфигурации моего веб-приложения, и она читается каждым экземпляром EC2, запускаемым автоматическим масштабированием ElasticBeanstalk (1-10 экземпляров).
Почти каждая конечная точка службы JAXRS вызывает чтение из коллекции конфигурации mongo, и я хочу прекратить чтение значений непосредственно из БД, чтобы уменьшить нагрузку на базу данных.
Я планирую прочитать значение один раз, сохранить егов словаре в памяти затем используйте значение из словаря в дальнейшем.Как только конфигурация будет изменена с веб-страницы администратора, я очищу значение из словаря, чтобы оно было перечитано из базы данных.
Проблема в том, что только один экземпляр EC2 очистит свой кэштак что мне нужно использовать какой-то тип pub / sub, чтобы сообщить всем остальным экземплярам EC2.
Нужна ли мне тема SNS или есть очередь SQS с каналом pub-sub (как здесь , но я не могу найти примеров)?
В любом случае может показаться, что я могу подписаться только на прослушиватель HTTP или HTTP или опросить цикл с тайм-аутом.
Я хочу, чтобы это также работало на моей машине разработчика (нет общедоступного IP), и я не уверен, что Java вернет моим экземплярам EC2 частный или публичный IP-адрес.Поскольку частные IP-адреса могут быть проблемой, я пришел к выводу, что каждый экземпляр EC2 должен опрашивать сообщения с длительным тайм-аутом (20 с).
Какой лучший способ добиться следующего
- Любой экземпляр EC2 может опубликовать «config X изменился»
- Каждый экземпляр EC2 получит сообщение «config X изменился»
- Чистый способ отписаться от экземпляров EC2, когда
- anЭкземпляр EC2 полностью остановлен (например, ServletListener для обнаружения закрытия приложения)
- Экземпляр EC2 внезапно остановлен / завершен
- Нет повторных сообщений
- Обнаружение мертвых подписчиков (например, никаких сообщений, собранных в течение 15 минут), а затем завершение работы этого подписчика (например, завершение экземпляра EC2)
- Работа со всеми экземплярами EC2 в среде beanstalk
- Также работа с удаленной машины разработки
Что было бы действительно хорошо, если бы вы могли получить балансировщик нагрузки Elastic Beanstalk для пересылки сообщений SNS каждомуЭкземпляр EC2 ?
Спасибо.