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

В каком сценарии состояние лучше, чем безстоящее для Интернета?

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

Есть ли у вас ситуация, когда состояние более подходит, чем апатрид?

4b9b3361

Ответ 1

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

  • Использование страницы с состоянием в калитке упрощает выполнение частичных обновлений страниц с использованием каркаса AJAX.
  • Stateful - более "интуитивная" модель программирования. Например, в классе страницы калитки я могу объявить поле частного члена на стороне сервера, установить его при загрузке страницы и получить к нему доступ каждый раз, когда запрос AJAX попадает на страницу для выполнения некоторого обновления.
  • Wicket предотвращает наиболее распространенные проблемы concurrency в веб-уровне путем синхронизации на объекте пользовательского сеанса при обработке запроса.
  • Сохранение состояния на стороне сервера иногда может повысить производительность; например, объект, который требует много времени для создания, но должен быть доступен для этой страницы, может быть загружен только один раз, когда страница сначала создается.

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

Ссылка на калитки: http://wicket.apache.org/

Ответ 2

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

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

Это, по сути, дискуссия между функциональным и императивным программированием.

Ответ 3

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

Ответ 4

Я работаю в statefull клиентском сервере без поддержки сервера из-за масштабируемости, но, столкнувшись с препятствиями, объясняющими, почему это и стало сложнее реализовать с использованием сервера без гражданства, вы получаете отставку в долгосрочной перспективе, вот где светит сервер с поддержкой состояния:). Несмотря на то, что я предпочитаю statefull client, это нелегко эффективно реализовать с помощью asp.net viewstate, и, возможно, это то, где statefull web становится практичным. Я думаю, что statefull client, сервер без гражданства делает вас более осведомленным о количестве данных, которые транспортируются между шинами. Это иногда скрывается до тех пор, пока не возникнет проблема с использованием модели statefull server programming. Кроме того, переход от stateless к statefull легко (просто игнорируйте информацию о состоянии, которую вы предоставляете, поскольку вы уже знаете это..). Переход на противоположное почти невозможно/не стоит. Еще одна вещь, использующая statefull-сервер, заключается в том, что состояние очистки/кеш часто является проблемой, когда вы используете также statefull-клиент. Это просто неинтуитивно и запутанно, или мабы просто я:)

В любом случае GWT и многие другие современные инструментальные средства (Silverlight, говорящие с WCF), по-видимому, предпочитают клиента с сохранением состояния, сервера без учета состояния из-за проблем с масштабируемостью. Может быть, сервер с состоянием должен быть исключением из правила без сохранения... можно выбрать одну страницу/окно.

Источники: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/2871ef5076c1bdb6/43e7a5377047aa44?#43e7a5377047aa44

Ответ 5

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

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

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

Лучший подход заключается в том, чтобы хранить сеанс за веб-серверами в каком-то хранилище данных, в наши дни для него доступно множество замечательных продуктов nosql (redis, mongo, elasticsearch, memcached). Таким образом, веб-серверы не имеют состояния, но у вас все еще есть государственная серверная часть, и доступность этого состояния может управляться путем выбора правильной настройки хранилища данных. Эти хранилища данных обычно имеют большую избыточность, поэтому почти всегда можно делать изменения в своем веб-приложении и даже в хранилище данных, не влияя на пользователей.