Насколько масштабируема действительно архитектура на основе веб-сервисов? - PullRequest
1 голос
/ 12 марта 2009

Всякий раз, когда кто-то говорит об архитектуре на основе сервисов, он часто упоминает масштабируемость, часто на одном дыхании. Однако, похоже, что использование сервисов увеличивает издержки, а не уменьшает их, поскольку теперь используется протокол, такой как SOAP или REST. Итак, действительно ли архитектура, основанная на веб-службах, добавляет преимущества в производительности, поскольку число пользователей, скажем, веб-приложений масштабируется, возможно, на порядок? Или требования масштабируемости просто выгружаются в службы, а не в основное приложение?

Ответы [ 6 ]

3 голосов
/ 12 марта 2009

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

Если нагрузка на сеть мешает работе системы, которую вы хотите построить, то, разумеется, SOA - неправильный выбор для вас. Помните, что никогда не нужно обращаться к сервису через HTTP. Я думаю, вы будете удивлены, насколько быстрыми могут быть некоторые протоколы (например, net.tcp).

2 голосов
/ 12 марта 2009

Помните, что вы можете масштабировать веб-сервис для работы на нескольких серверах, не затрагивая клиентов Это не очень хорошо работает с тесно связанной системой.

1 голос
/ 12 марта 2009

Веб-сервисы не дают вам масштабируемости бесплатно. На самом деле довольно просто создать сервис, который не будет масштабироваться.

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

Важно не забывать «А» в «SOA». Вы можете создать беспорядок, просто создавая кучу сервисов. Убедитесь, что у вас есть архитектура.

Один огромный шаг к масштабируемости - это переход от базовых синхронных служб типа запрос / ответ (например, SOAP RPC) к асинхронным службам. См. «Шаблоны корпоративной интеграции» Хопе и Вульфа

1 голос
/ 12 марта 2009

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

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

0 голосов
/ 12 марта 2009

RESTafarians напомнит вам, что REST - это не прототол, а архитектурный стиль. REST - это способ использовать HTTP напрямую, без оболочек, которые использует SOAP, для предоставления модели сервисов. REST намного ближе к проводу, чем SOAP. Одно это не делает одного лучше другого, у них обоих есть свое место.

Масштабируемость модели сервисов не столько напрямую связана с «сервисами» (как в веб-сервисах с заглавной буквой W и заглавной буквой S), чем с природой этих сервисов без сохранения состояния. Хорошо построенные веб-приложения также масштабируемы и могут считаться такими же масштабируемыми, как любая архитектура, управляемая сервисами.

Одно из различий между двумя моделями заключается в том, что веб-приложение без «сервисов» взаимодействует с ссылочными модулями, работающими в одном и том же процессе на двоичном уровне - сериализация не требуется. Веб-сервисы (SOAP или REST) ​​вводят некоторый уровень сериализации, который добавляет накладные расходы. Однако эти накладные расходы часто считаются достойными, учитывая их повторное использование (т. Е. Те же веб-службы, которые управляют вашими приложениями внутри компании, также могут быть использованы для того, чтобы сделать деловых партнеров счастливыми).

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

0 голосов
/ 12 марта 2009

Хорошо, давайте сначала определим масштабируемость. Почти все, что будет масштабироваться : если вам нужно больше емкости, в первом приближении вы можете просто добавить больше оборудования. Но некоторые архитектуры «более масштабируемы» - что это значит? Это связано со стоимостью: архитектура «более масштабируема», если стоимость за единицу добавленной емкости меньше.

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

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

Итак, теперь, когда кто-то спрашивает о «масштабируемости» SOA, SOAP или REST или чего-то еще, это то, о чем они говорят.

Сервисно-ориентированные архитектуры, как говорят, «более масштабируемы», поскольку добавление большей емкости относительно недорого, хотя, как вы говорите, могут быть накладные расходы, из-за которых вам потребуется больше возможностей для обслуживания одного пользователя. Это связано с тем, что большая часть затрат и сложности управления большой системой обусловлена ​​необходимостью поддерживать состояние сеанса, то есть отслеживать, что происходит между вызовами. Сервисно-ориентированные архитектуры избегают этого, делая каждый вызов относительно независимым от следующего, причем архитектура RESTful является ограничивающим случаем - все состояние сеанса кодируется в представлении, поэтому остальной системе не нужно знать об этом. Когда вы хотите добавить емкость, все, что вам нужно сделать, это добавить другой сервер; простой маршрутизации нагрузки будет достаточно для перенаправления сообщений на новое.

(Обратите внимание, что это также по своей природе более отказоустойчиво: если сервер умирает, другой более или менее автоматически получает запросы, и сеанс терять нельзя.)

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

В предельном случае, который вы видели в старых архитектурах на основе CGI, существует тот случай, когда для каждого пользовательского сеанса требуется полный тяжеловесный процесс; Я видел системы в тех местах, где fork / exec составлял 40-50 процентов нагрузки, где требовалась сложная программная установка балансировки нагрузки, чтобы убедиться, что запросы всегда поступали на машину, на которой проходил сеанс, и где просто нехватка слотов процесса была серьезной проблемой. Одна такая система требовала покупки целого нового высококачественного сервера Starfire, чтобы увеличить емкость.

...