В моем текущем проекте у нас есть две микросервисы с двумя разными экземплярами БД, каждая из которых имеет таблицы, ссылающиеся на один и тот же базовый ресурс (хотя и с разными именами), то есть таблица ресурсов в сервисе A. DB называется foo
, в то время как в DB службы B он называется bar
.
Записи отправляются с использованием обеих служб, и каждая служба отвечает за запись в другую службу при обновлении / записи / удалении (игнорируя сеть / DB на данный момент сбои.)
Каждая служба отвечает за разную информацию о ресурсе, и поэтому каждая таблица содержит разные столбцы , содержащие разную информацию того же ресурса . Например: служба A имеет атрибут health_state
, а служба B имеет атрибут [и столбец] archived
.
Мы хотели бы разрешить пользователю фильтровать по обоим столбцам / атрибутам службы - т.е. GET /foo?search="health_state='unhealthy' and archived='false'"
. Как можно go это сделать?
Мы изначально думали, что одна микрослужба будет «интерфейсом» для другой и будет поддерживать поиск в A
для полей обеих служб. А затем A отправит соответствующие поля поиска в B
и присоединит результаты к базе данных A
. Это один из вариантов, который может плохо масштабироваться, если набор результатов B
массивный, это потому, что A
требует всех ресурсов archived
(в приведенном выше примере) для выполнения присоединиться. Кроме того, поисковый запрос может быть очень сложным для анализа. Если мы действительно воспользуемся этим подходом есть ли какие-либо предложения, как это сделать в масштабе ?
Помните о переносе нашего приложения на что-то вроде CQRS, как упоминалось здесь кажется огромным изменением (в настоящее время в соответствующей БД более 10К строк).
Благодарю вас за ответы!