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