Это очень широкая тема, которая может поднять вопросы для обсуждения, поскольку все зависит от предпочтений, опыта и технических стеков. Я добавлю свои два цента, но не считаю это правилом, просто мое мнение для обоих подходов.
Первый подход (API для каждого сервиса, изолированного друг от друга):
- службы будут сами выставлять свои общедоступные API, и вам нужно будет внедрить подход обнаружения служб, чтобы клиенты могли вызывать каждую микросервису. Простой способ - использовать обратный прокси-сервер для переадресации вызовов с использованием имени службы.
- Каждый сервис и его API масштабируются независимо
- При таком подходе лучше развертывать отдельные обновления, не отключая другие микросервисы.
- Этот подход имеет тенденцию иметь больше повторений кода для обработки авторизации, аутентификации и других общих аспектов, оттуда вы в конечном итоге будете использовать совместно используемые библиотеки во всех сервисах.
- Этот подход увеличивает количество сбоев, это хорошо, потому что сбои будут влиять на меньшее количество сервисов, если один API отказывает, другие сервисы не будут затронуты (если сбой не влияет на машину, например, утечка памяти или высокая загрузка ЦП). ).
Второй подход (единый API для переадресации вызовов на нужные сервисы):
- У вас есть одна конечная точка, и обнаружение службы будет происходить в API, вся работа будет выполняться каждой службой.
- API должен масштабироваться для всех, даже если один сервис потребляет гораздо больше ресурсов, чем другие. просто сервис будет масштабироваться независимо.
- При таком подходе для добавления или изменения конечных точек API вы, скорее всего, обновите API и службу, поскольку отключение API повлияет на другие службы.
- Такой подход уменьшает дублирование кода, и вы можете централизовать многие общие аспекты, такие как авторизация, регулирование запросов и т. Д.
- В этом подходе меньше точек сбоев, если один из микросервисов выходит из строя, и от этой службы зависит большое количество вызовов, API будет обрабатывать больше запросов на подключение и ожидающих запросов, что повлияет на другие службы и производительность. Если он выйдет из строя, все службы будут недоступны. По сравнению с первым подходом первый подход приведет к снижению устойчивости к прокси или клиенту.
В итоге,
оба подхода будут иметь одинаковое усилие, разница в том, что усилия будут разделены на разные области, вы должны оценить оба и рассмотреть, какой из них сохранить. Не сравнивайте только код в сравнении, потому что он не оказывает большого влияния на общее решение по сравнению с другими аспектами, такими как выпуск, мониторинг, ведение журнала, безопасность, производительность.