Микросервисы: одновременное обновление кеша - PullRequest
0 голосов
/ 08 ноября 2018

Я занимаюсь разработкой микросервиса. Эта MS будет развернута в док-контейнерах и будет контролироваться Kubernetes. Я должен реализовать решение для кэширования с использованием распределенного кэша hazelcast. Мои требования:

  • Предварительная загрузка кэша при запуске этого микросервиса. Приблизительно для 3000 магазинов мне нужно выбрать два определенных атрибута и кэшировать их.
  • Каждые 24 часа обновляйте кеш.

Я реализовал Spring @EventListener и при запуске сделал вызов из базы данных для двух атрибутов, сделал @CachePut и сохранил их в Cache.

У меня также есть планировщик Spring с выражением cron для обновления кэша каждые 6 часов утра.

Пока все хорошо.

Но то, что я не осознавал, что в кластерной среде - 10-15 экземпляров моего микросервиса будут в действии и будут пытаться выполнить выше 2 шага почти одновременно - таким образом создавая панический эффект для моей базы данных и кеша. Кто-нибудь знает, что делать в этом сценарии? Есть ли какой-нибудь хороший дизайн или даже средний, которому я могу следовать?

Спасибо.

1 Ответ

0 голосов
/ 08 ноября 2018

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

Ищите MapLoader и его методы, которые позволят вам прогреть / предварительно загрузить кластер, и у вас будет свобода делать это с вашимсобственная реализация.

Проверьте подробности: https://docs.hazelcast.org/docs/3.11/manual/html-single/index.html#loading-and-storing-persistent-data

...