У меня есть сервис Scheduler
, который позволяет мне добавлять запланированные задачи. Эта служба просто сохраняет в своей базе данных запланированное время и конечную точку для вызова при запуске задачи.
Например, есть услуга Payment
и услуга EmailReminder
. Сервис Payment
может добавить запланированную задачу регулярного платежа в сервис Scheduler
. Сервис EmailReminder
может добавить задачу напоминания по электронной почте в сервис Scheduler
. Когда задачи запускаются в службе Scheduler
, они будут помечены как done
и отправлены конечной точке соответствующих служб для обработки задачи.
На внешнем интерфейсе он должен отображать всю информацию о запланированной задаче напоминания по электронной почте, такую как электронная почта получателя, содержимое электронной почты и была ли она выполнена. Интерфейс извлекает большую часть этой информации из API, находящегося в службе EmailReminder
. Это просто, потому что все данные, которые он должен показывать в API из собственной базы данных.
Однако моя дилемма заключается в том, должен ли я сохранять статус done
в базе данных службы Scheduler
или сохранять этот статус в собственной базе данных соответствующих служб.
Если статус был сохранен в сервисе Scheduler
...
Если я сохраняю статус «выполнено» в сервисе Scheduler
, всякий раз, когда другие сервисы должны знать, выполняется ли задача сделано, они должны сделать вызов API для службы Scheduler
. Другими словами, сервис EmailReminder
должен извлекать статус «выполнено» из сервиса Scheduler
для всех записей каждый раз, когда его API вызывается из внешнего интерфейса. Я считаю, что это также повлечет за собой дополнительное время на общий запрос. Но плюсы этого - то, что база данных в сервисе Scheduler
является единственным источником правды о том, выполнена задача или нет.
Если статус был сохранен в соответствующих сервисах ...
В этом случае службе EmailReminder
не требуется выполнять дополнительный вызов API к службе Scheduler
. Информация доступна в собственной базе данных. Это также означает, что при изменении статуса done
в службе Scheduler
необходимо отправить событие, чтобы сообщить всем службам об обновлении их статуса. Однако недостатком этого является то, что я в основном имею дублированные копии одного и того же фрагмента информации (статус done
) в 2 местах; сервис Scheduler
и сервис EmailReminder
. Существует риск того, что данные могут стать противоречивыми.
В такой микросервисной архитектуре, как та, что у меня есть, лучше хранить такую информацию в службе Scheduler
или в соответствующих службах?