Подтвердить что ты не робот

Микросервисы и SOA с использованием обмена сообщениями

Мне было очень интересно попробовать микросервисы /SOA в качестве архитектуры, и мне сложно понять, как будет реализована интеграция между службами.

Мне нравится идея использования обмена сообщениями для развязки клиентов из служб, но не понимаю, как система может использовать ее исключительно. Типичные операции async и pub/sub stuff, очевидно, имеют смысл: сценарии, такие как создание нового порядка, передача данных для отчетности и т.д. Я не понимаю, являются ли люди обычно попытками использовать обмен сообщениями для обычных сценариев запроса/ответа - например, пользователь нажимает на свою страницу "профиль", а часть данных, которые должны отображаться на странице, - это пользовательская служба.

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

Спасибо за любую разработку/опыт!

4b9b3361

Ответ 1

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

То есть, синхронно - не из-за технологии, используемой для обработки их вызова, - но из-за встроенного и вообще негибкого ожидания со стороны пользователя, что все должно происходить в реальном времени, а не "в автономном режиме", (даже если в большинстве случаев нет существенной разницы).

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

Как и во всех других случаях, исключения изобилуют (и могут порождать совершенно новый разговор), но определенные типы пользовательских вызовов могут и должны обрабатываться "автономно" в зависимости от ситуации.

Однако я чувствую, что в центре вашего утверждения:

Мне нравится идея использовать обмен сообщениями, чтобы отделить клиентов от услуги

пропуская точку. Мы фактически не хотим отделять клиентов (или потребителей) и услуги.

Мы ожидаем, что клиент, скажем, бизнес-возможности Кредиторской задолженности, будет тесно связан с микросервисом кредиторской задолженности.

Аналогично мы ожидали бы высокую степень связи между сигнатурой конечной точки обслуживания bool ProcessTransaction(Transaction transaction) и потребителем такой операции.

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

И здесь, что преимущества обмена сообщениями действительно имеют значение. Дайте мне знать, что вы думаете, и если это вам вообще помогло.

Ответ 2

Я думаю, когда вы спрашиваете, как часто "обмен сообщениями" используется в запросе/ответе, вы, вероятно, имеете в виду асинхронную связь.

Я возьму другую (противоположную) перспективу, чем некоторые из ответов здесь, и скажу, что вы почти всегда должны использовать async, даже в запросе/ответе. Это связано с тем, что async означает, что вы не блокируете свою программу, ожидающую ответа, и ваша программа может продолжать выполнять некоторую другую обработку, ожидая ответа.

Например, представьте, что вы используете домашнюю страницу Twitter. Вы запускаете кучу запросов на различные микросервисы ( "дайте мне рекомендуемых последователей", "получите последнюю хронологию" и т.д.). Вы не хотите блокировать и сериализовывать все эти запросы. async, и это создает намного лучший пользовательский интерфейс, потому что, когда ответы возвращаются, они обновляют пользовательский интерфейс в реальном времени.

Twitter использует Finagle (http://twitter.github.io/finagle/guide/index.html) именно для этого (async RPC). Он не выполняет некоторые функции системы обмена сообщениями (в частности, она действительно привязана к JVM, и она не реализует управление потоком или очереди), но она реализует асинхронный запрос/ответ.

Ответ 3

Я только начал изучать микросервисы, поэтому это отнюдь не идеальный ответ. Это мое мнение, основанное на моем нынешнем понимании.

Если вы создаете микросервисы на основе событий, то брокер сообщений будет играть огромную роль. Допустим, у вас есть служба под названием CreateUserService, которая отвечает только за сбор данных, необходимых для создания пользователя, не сохраняющего данные. Эти данные затем публикуются в очередь.

Подписчики очереди createUser DuplicateUserService, UserDataStore и т.д. Затем могут реагировать соответственно на данные в каждой службе.

В итоге клиент получает данные от другой службы с соответствующей информацией о попытке события.

Ответ 4

То, что я не понимаю, заключается в том, что люди обычно пытаются использовать обмен сообщениями для обычных сценариев запроса/ответа - например, пользователь нажимает на свою страницу "профиля", а часть данных, которые необходимо получить на странице, пользовательская служба.

Ключ должен избегать запроса/ответа вообще. Технически это возможно, если весь ваш стек позволяет отправлять асинхронные сообщения, в том числе для веб-интерфейса, используя что-то вроде WebSocket в приложении одиночной страницы (SPA). Для практического примера вы можете посмотреть в шаблоне Receptable Maps (https://www.typesafe.com/activator/template/reactive-maps-java).

Ответ 5

Я не использовал REST, но я использую WSDL для связи между слоями. Интеграция между службами очень проста, они общаются друг с другом, как вложенные функции на задней панели, или просто используют XML и JSON, если запросы переходят с сервера на сервер.

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