экземплярам микросервисов с масштабируемой загрузкой необходимо обновить 1

#spring-boot #microservices

#spring-boot #микросервисы

Вопрос:

У меня уникальная проблема, пытающаяся определить, какая реализация для этого является наилучшей.

  • У меня есть таблица, в которой содержится полмиллиона строк. Каждая строка представляет бизнес-объект, мне нужно извлечь информацию об этом объекте из Интернета и асинхронно обновить таблицу обратно. (этот процесс занимает от 2 до 3 минут).
  • Я не могу эффективно обновить все эти строки с помощью 1 экземпляра microservices. поэтому планирую масштабировать это до нескольких экземпляров
  • мои экземпляры микросервисов — это асинхронный демон, который извлекает бизнес-объект 1 за раз и обрабатывает данные и, наконец, обновляет данные обратно в таблицу. . Вот где моя проблема между несколькими экземплярами, как мне убедиться, что ни один экземпляр микросервиса 2 не работает с одним и тем же бизнес-объектом (одной и той же строкой) в процессе обновления? Я хочу реализовать микросервисы оптимального решения, вероятно, без необходимости поддерживать какое-либо состояние на прикладном уровне.

Ответ №1:

Вы должны использовать внешнюю систему (базу данных / кэш) для сохранения информации о каждом экземпляре.

Пример: Блокировка. Создает таблицу или документ в базе данных, где хранится информация о текущих блокировках.

Ответ №2:

Я бы посоветовал вам использовать рабочую очередь. Который выглядит как идеально подходящий для вашей проблемы. Просто загрузите все данные или идентификатор данных в очередь один раз. Затем позвольте потребителям использовать их. Вы можете увидеть четкое объяснение здесь https://www.rabbitmq.com/tutorials/tutorial-two-python.html

введите описание изображения здесь

Комментарии:

1. Спасибо за ответ это может привести к тому, что несколько пользователей будут обрабатывать одно и то же сообщение, что приведет к дублированию обработки. Тирумал предложил shedlock, который будет близок к тому, что я искал .. всегда приветствуются любые другие идеи.

2. Эта настройка не приведет к дублированию обработки. Поскольку потребители выбирают задачу из очереди, каждый из них будет работать над отдельной задачей.