Все еще пытаюсь обернуть голову вокруг микросервисной архитектуры, так как я привык к монолитному подходу
Предположим, мы пытаемся создать чрезвычайно упрощенную систему бронирования Uber. Чтобы упростить, скажем , у нас есть 3 услуги и API шлюза для клиента: Booking
, Drivers
, Notification
и мы имеем следующий рабочий процесс:
При создании нового бронирования:
- Проверьте, есть ли у уже существующего пользователя бронирование
- Получить список доступных драйверов
- Отправьте уведомление водителям, чтобы забрать заказ
- Водитель забирает бронирование
Допустим, весь обмен сообщениями осуществляется через http-вызов, а не через шину обмена сообщениями, такую как kafka, для простоты.
Так что в этом случае я подумал, что Booking
служба может сделать проверку для существующего бронирования. Но тогда кто должен получать список доступных драйверов и уведомление? Я думаю сделать это на уровне шлюза, но теперь логика разделена на две части:
Gateway
- получить список доступных драйверов + отправить уведомленияBooking
- проверить наличие бронирования
И я почти уверен, что шлюз не подходящее место для этого, но я чувствую, что если мы делаем это в Booking
сервисе, он становится тесно связанным?
Чтобы сделать это более сложным, что произойдет, если у нас есть другой проект, который хочет повторно использовать систему бронирования, но со своей собственной бизнес-логикой на вершине? Вот почему я подумал сделать это на уровне шлюза, чтобы новый шлюз проекта мог иметь свою собственную бизнес-логику, отдельную от существующей.
Я полагаю, что есть еще один способ сделать так, чтобы у каждого проекта была своя собственная служба бронирования, которая будет общаться с основной службой бронирования, но я не уверен, какой здесь лучший подход :-)