Компания, с которой я работаю, изучает переход на архитектуру микросервис / kubernetes, но преодолевает пару препятствий в исследовании, поэтому я решил поставить их здесь.
С типичной монолитной базой данных,множество запросов объединяются из других источников / таблиц, что обычно считается другой обязанностью микросервисов (например, Клиенты -> Заказы).
Вопрос, который у меня сейчас возникает, с микросервисами, что считается лучшей практикой?
Я нашел несколько предложенных подходов:
1) Присоединиться к коду,По сути работает несколько запросов.Например:
const user = UserService.getUserById(1);
const order = OrderService.getForUser(user);
Мне нравится этот подход, и я могу четко видеть, откуда поступают данные, что требуется и т. д. Однако возникает проблема дополнительной задержки.Где, как и прежде, я мог присоединиться к этому запросу и иметь только одну поездку в базу данных.Теперь у меня есть 2 (или более, в зависимости от требуемых данных) запросов к БД.
2) Присоединиться к внешней службе.Создание отдельного сервиса, который обрабатывает запросы.- Это похоже на наличие внутреннего API, от которого зависит каждый сервис, и выглядит как плохая практика в качестве единственной точки отказа.Может быть, я вижу это неправильно.
3) Присоединяйтесь к MySQL.Имейте все данные в той же базе данных и запросите как прежде.Это дает преимущество одиночной поездки в mysql, однако нарушает микросервисный подход и устраняет возможность иметь базу данных / схему для каждой службы.
Лично я считаю, что вариант 1 является наиболее универсальным, но яМне любопытно узнать о дополнительной задержке нескольких поездок в оба конца и о том, как вы, ребята, справились с этим.Или, возможно, есть другое решение, которого я не вижу.