2009-06-12 2 views
6

Возможные Дублировать
stateful webservicesStateful Webservice

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

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

+2

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

ответ

16

Вся цель веб-службы состоит в том, чтобы доставить часть функциональности в одной транзакции способом, который является высокомасштабируемым. Это означает, что вещи просты и атомарны.

Когда вам нужно сделать несколько вызовов для выполнения операции, у вас есть большой потенциал для удержания транзакций. Возвращается ли клиент? Они сделаны? Как долго должна оставаться транзакция? Они рухнули? Как обращаться с откатами?

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

+3

Отличный ответ! Кроме того, если ваша операция выполнена с сохранением состояния, что произойдет, если сервер завершится с ошибкой? (И это будет.Вот почему мы запускаем кластеры серверов.) Все состояние будет потеряно. Stateless позволяет повторно отправить запрос на следующий сервер в кластере, как будто ничего не произошло. –

+1

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

9

Вот несколько причин, я могу думать:

  1. Затраты на поддержание состояния должны нести только на стороне сервера - потребители услуг редко веб-браузеры, так что нет печенья. Это снижает производительность вашего сервера и увеличивает сложность дизайна.

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

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

Есть много причин, но это те, которые я могу вспомнить с верхней части моей головы :)

-1

Я думаю, что это своего рода миф

Если Google может сделать масштабируемое масштабируемое приложение для веб-приложений, то почему мы не можем масштабировать веб-службу с сохранением состояния. Это все о сервере приложений, который уменьшает масштабируемость.

Даже с веб-сайтом или веб-сервисом конечной целью является лучшее обслуживание. Если «состояние» должно улучшить ваше обслуживание, то не стесняйтесь идти на это.

+2

Возможно, вы захотите уточнить, в какой части Google вы говорите. Основной google.com не «с точки зрения состояния». – NotMe