Идеи о микросервисах:
- Микросервисы должны быть функционально независимыми
- Микросервисы должны специализироваться на выполнении некоторой полезной работы в домене, которым они владеют
- Микросервисы предназначены для связи друг с другом
Я считаю, что эти идеи противоречивы.
Позвольте мне привести гипотетический бизнес-сценарий.
Мне нужна служба, которая выполняет рабочий процесс с шагом, требующим автоматического перевода.
В моем бизнесе есть служба автоматического перевода. Существует RESTful API, где я могу POST исходный язык, целевой язык и текст, и он возвращает перевод. Это прекрасный пример полезного автономного сервиса. Он многоразовый и совершенно не знает своих потребителей.
Должна ли услуга рабочего процесса, в которой нуждается мой бизнес, использовать эту услугу? Если это так, то мой сервис имеет «зависимость» от другого сервиса.
Если вы возьмете это рассуждение до предела, каждая служба в мире будет иметь все функции в мире.
Теперь я знаю, что вы думаете, что мы можем сломать эту зависимость, перейдя от ответа на запрос (REST) к обмену сообщениями. Мой сервис публикует сообщение с запросом на перевод. Ответное сообщение о переводе публикуется, когда перевод завершен, и моя служба использует это сообщение. Хорошо, но мой сервис должен заморозить рабочий процесс и продолжить работу при получении сообщения. Это все еще «ожидание», даже если ожидание является истинным асинхронным ожиданием (скажем, состояние рабочего процесса сохранялось, и сообщение о переводе приходит днем позже). Это просто отложенный запрос-ответ.