Можно ли вызывать сервис из другого сервиса в архитектуре SOA? - PullRequest
15 голосов
/ 11 января 2011

Я думаю, что знаю ответ на этот вопрос, но я только что заметил, что кто-то делает прямо противоположное - кто очень опытный разработчик, у них просто был плохой день?

В: Можно ли вызывать сервис изнутри сервиса в архитектуре SOA?

Я подозреваю, что нет, но я все равно спрошу ...

Ответы [ 5 ]

6 голосов
/ 11 января 2011

Я не могу придумать ни одной причины, почему бы и нет. Я могу придумать несколько причин, почему служба может вызвать другую службу. Я спроектировал и реализовал несколько сервисов, которые делают это. Я также знаю о других архитектурах, которые устанавливают такую ​​систему.

3 голосов
/ 13 января 2011

Определенно, да.Этот шаблон SOA обычно называется хореографией, когда один веб-сервис обрабатывает, а затем передает сообщение другому по конвейеру обработки.Поищите его в Google, и вы найдете несколько хороших ссылок.
В другом случае может быть более техническая причина, например, маршрутизация, когда у вас есть веб-сервисы с внешним интерфейсом, которые направляют ваши сообщения в разные бэкэнд-сервисы на основе политики безопасности, контента, соединения различных технологий или транспортного протокола и т. Д..

2 голосов
/ 20 января 2011

Ответ на это, как всегда, «это зависит ...», позвольте мне объяснить, что я имею в виду.

Вызов другой службы в SOA - это, конечно, вполне приемлемая вещь, в основе SOA - возможность создавать новые вещи из существующих служб.

Более важной частью является то, как вы вызываете сервисы, рассмотрим систему SOA, где несколько сервисов взаимодействуют в цепочке вызовов, каждый из которых привлекает другой в транзакционную область. Подобные действия без тщательного планирования окажут огромное влияние на производительность вашей системы. Та же цепочка вызовов, разработанная с использованием хорошо разделенных сервисов, которые распределены по правильной единице работы, страдает меньше.

Рассмотрим надежность системы: в типичной архитектуре один сервис имеет тенденцию становиться более популярным, чем другие, и появляется множество других сервисов, вызывающих его. Отказ этой одной службы приводит к выходу из строя всей системы из-за того, что все другие службы зависят от вызова этой одной службы.

Рассмотрите разницу между синхронными и асинхронными вызовами, когда вы используете что? Это влияние каждого?

Как вы проектируете и разделяете сервисы, чтобы ограничить стоимость пересечения границы сервиса при каждом вызове?

Множество вопросов, но если вы посмотрите вокруг, есть много мест, где можно найти ответы, я предлагаю начать с них.

Я бы посоветовал вам прочитать статьи Thomas Erl и Roger Sessions, это даст вам твердое представление о том, что такое SOA.

Построение SOA

Шаблон проектирования SOA

Достижение целостности в SOA

Почему ваша SOA должна быть похожа на VW Beetle

SOA для вашего босса

Производительность службы WCF

0 голосов
/ 13 января 2011

У меня есть другой сценарий.Что если вы хотите внедрить кластеризацию на уровне сервисов в вашей SOA?Например, скажем, служба персистентности находится на одном компьютере и отвечает за обработку всех задач персистентности в кластере.Таким образом, на другой машине, для которой требуется постоянная функциональность, необходимо подключиться только к этой машине (игнорировать фактор отказа при сбое).

Теперь при входе в систему, если служба пользователя напрямую имеет экземпляр службы постоянства, вы не сможете реализовать кластеризацию на уровне службы.

У нас есть наше промежуточное ПО SOA, и я напрямую вызывал сервис.Но когда мы внедрили кластеризацию на уровне сервисов с использованием JMS / ActiveMQ, мы столкнулись с проблемой для этих взаимосвязанных сервисов.

0 голосов
/ 11 января 2011

подумайте об архитектурной цели «разделения интересов».вместо того, чтобы каждый сервис знал, как все делать, он может полагаться на другие специализированные сервисы для общих функций

...