#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. Эта настройка не приведет к дублированию обработки. Поскольку потребители выбирают задачу из очереди, каждый из них будет работать над отдельной задачей.