Смотрите этот пост на SOA Tenets . Также см. Фрактальное созвездие автономных служб .
«Службы должны развертываться, управляться и иметь версии независимо от других служб и / или приложений, которые зависят от них».
Автономия не означает изолированность или совершенно автономность.
Вместо этого у вас может быть «созвездие» из двух служб. Да, они зависят друг от друга. Нет, A не ломается, когда B перемещается или модернизируется. А также не ломается, когда внутренние компоненты B не изменяются.
Точно так же - с точки зрения B - и обновление до внутренних компонентов A не отражается на изменениях в интерфейсе B и внутренних устройствах.
API развиваются независимо. Схема, сообщения и реализации являются независимыми. Они просто относятся друг к другу.
«Служба A не может обслуживать клиентов, если служба B не запущена и работает» - не беспокойтесь. Служба А также не может обслуживать клиентов, если она не работает. Сервис не работает. Не имеет значения, является ли это B (от которого зависит A) или A. Зависимость не имеет ничего общего с надежностью или доступностью A или B.
Да, сервисы имеют четко определенные и независимые интерфейсы. Реализация A зависит от B, а интерфейс - нет.
Редактировать.
"некоторые гуру считают, что вам нужно даже хранить эти данные, которые вы получаете внутри, чтобы уменьшить зависимость и сохранить свою автономию ..."
Не вижу смысла. Если A зависит от B, и алгоритм B меняется, копия A данных B - хорошо - старая. Зависит от обычно означает живые, рабочие отношения до транзакции.
Проблема в том, что B может быть медленным, что делает A медленным, что делает приложение, которое использует A медленным. Это облом Но это не вызов для нарушения правил автономии и сохранения A в секретном кэше старых данных из B.