Я попал в микросервисный проект и столкнулся с этой проблемой.Предположим, у вас есть служба бронирования столов, состоящая из двух микросервисов:
- Ресторанный сервис (который управляет информацией о ресторане, такой как имя, владелец, таблицы).
- Сервис бронирования (который управляет подтверждением бронированияworkflow).
Поток событий для сущности «Ресторан» был довольно прост: streamId - это restaurantId, и каждое событие, например «tableAdded» или «tableRemoved», имеет инкрементный идентификатор события.Воспроизведение каждого события и получение совокупности тривиально.
А как насчет бронирования?Мой текущий дизайн потока событий использует restaurantId в качестве streamId, и к этому потоку добавляется каждое событие, например «bookingAccepted» или «servationRefused ».
Алгоритм, ответственный за проверку запроса на резервирование, должен знать предыдущее и последующее бронирование (в течение 3 часов с момента бронирования на входящий запрос).
Независимо от этого, нет бронирования свремя бронирования старше сейчас должно быть принято во внимание, и его событие не должно воспроизводиться, но при таком дизайне каждое событие воспроизводится для каждого запроса.
Подводя итог: если я прошурезервирование на завтра, система воспроизведет резервирования от 6 месяцев назад, которые обычно не связаны с входящим запросом, поскольку они относятся к моменту в прошлом.
Это приводит к неэффективности с течением времени в результате огромного количестваненужных событий, которые воспроизводятся.Я думал, чтобы решить это с помощью ежедневных снимков, но это кажется неправильным способом.
Есть идеи?
Заранее спасибо за любую помощь!