Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
questioner
Member

Откуда:
Сообщений: 1861
В книге (в 6 главе) расписывается, что иметь сервер без состояния это очень удобно, классно и всё такое. Пишут, что всегда старайтесь использовать сервер без состояния.

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

и в конце написана фраза:

Хорошая новость заключается в том, что для реализации сеанса с состоянием, оказывается, можно применять сервер без состояния.

дальше по книге идёт описания способов хранения состояние сеанса : на клиенте, на сервер, в базе.

Вот что-то я не прочуял что именно значит сервер без состояния. И почему сохранение сеанса на стороне сервера не делает его stateful ?
27 сен 19, 16:05    [21981086]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
mayton
Member

Откуда: loopback
Сообщений: 42385
Stateless удобно кешировать и поднимать новые ноды. Ничего не теряешь при этом.
27 сен 19, 18:54    [21981238]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2089
questioner
Хорошая новость заключается в том, что для реализации сеанса с состоянием, оказывается, можно применять сервер без состояния.
там не написано каким образом?
27 сен 19, 19:02    [21981245]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
mayton
Member

Откуда: loopback
Сообщений: 42385
С корзиной - некрасиво получается. Она не укладывается в концепцию Stateless. Да и не надо.
27 сен 19, 19:06    [21981251]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
questioner
Member

Откуда:
Сообщений: 1861
PetroNotC Sharp
questioner
Хорошая новость заключается в том, что для реализации сеанса с состоянием, оказывается, можно применять сервер без состояния.
там не написано каким образом?


я искал, но не нашёл
27 сен 19, 19:09    [21981252]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2089
questioner
PetroNotC Sharp
пропущено...
там не написано каким образом?


я искал, но не нашёл
я тоже не в курсе.
27 сен 19, 19:14    [21981259]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
mayton
Member

Откуда: loopback
Сообщений: 42385
Вот например. По отношению к Rest-архитектуре.

https://restfulapi.net/statelessness/
Advantages of Statelessness

There are some very noticeable advantages for having REST APIs stateless.

Statelessness helps in scaling the APIs to millions of concurrent users by deploying it to multiple servers. Any server can handle any request because there is no session related dependency.

Being stateless makes REST APIs less complex – by removing all server-side state synchronization logic.

A stateless API is also easy to cache as well. A specific software can decide whether or not to cache the result of an HTTP request just by looking at that one request. There’s no nagging uncertainty that state from a previous request might affect the cacheability of this one. It improves the performance of applications.

The server never loses track of “where” each client is in the application because the client sends all necessary information with each request.
27 сен 19, 19:19    [21981264]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
questioner
Member

Откуда:
Сообщений: 1861
Судя по всему автор имел ввиду, что если хранить сессию на клиенте, либо в базе данных либо ещё в каком внешнем хранилище, то сервер будет считаться stateless
27 сен 19, 22:53    [21981398]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2089
questioner,
Где не храни, сервер назначает id session.
Значит хранит состояние.
Сессия есть сервера, есть клиента и есть у хибера своя.
27 сен 19, 23:00    [21981402]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9416
PetroNotC Sharp
Где не храни, сервер назначает id session.
Значит хранит состояние.
Заблуждение: идентификатор сеанса - всего лишь ключ, который позволяет извлечь необходимые данные из внешнего хранилища.
В результате, серверу требуется обрабатывать состояние сотен (тысяч) активных сеансов, а не все миллионы, которые "когда-то были".
28 сен 19, 08:14    [21981510]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2089
Basil A. Sidorov
PetroNotC Sharp
Где не храни, сервер назначает id session.
Значит хранит состояние.
Заблуждение: идентификатор сеанса - всего лишь ключ, который позволяет извлечь необходимые данные из внешнего хранилища.
В результате, серверу требуется обрабатывать состояние сотен (тысяч) активных сеансов, а не все миллионы, которые "когда-то были".
а я что другое сказал?
Это число.
И у хибера число, ключ, маркер. И у контейнера.
Могу проще для тебя сказать. Он тебя запоминает)
28 сен 19, 08:21    [21981514]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9416
PetroNotC Sharp
а я что другое сказал?
Да. Вы утверждали, что состояние хранит сервер.
Я утверждаю, что сервер или создаёт сеанс (для вновь прибывших) или получает идентификатор сеанса (от ранее посещавших) и работает с состоянием активных сеансов. По мере надобности это состояние сохраняется во внешнем хранилище.
С моей кочки зрения, вы мешаете в одну кучу сервер приложений и ту инфраструктуру, с которой этот сервер работает.
С моей кочки зрения, вы усугубляете непонимание, используя СМС-стиль общения за который, обычно, хочется просто убить. Поскольку это невозможно, то, обычно, приходится просто не общаться.
28 сен 19, 08:42    [21981523]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2089
Basil A. Sidorov
Да. Вы утверждали, что состояние хранит сервер.
да. Так как состояние в ООП это даже просто поле с int.

Basil A. Sidorov
или получает идентификатор сеанса
id сеанса ослика не равен ид сеанса контейнера. В остальном верно.

Basil A. Sidorov
С моей кочки зрения, вы мешаете в одну кучу сервер приложений и ту инфраструктуру, с которой этот сервер работает.
вы мешаете. Я разделил три сеанса. Хибера, контейнера и клиента.
А у вас непонятное слово. "получает".

Basil A. Sidorov
СМС-стиль общения
когда чел пишет что не понял, я расписываю. Тут у всех разное образование.
28 сен 19, 08:53    [21981527]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9416
PetroNotC Sharp
состояние в ООП это даже просто поле с int.
"Никогда и ничего не доводи до абсурда, ибо человек, желающий трапезовать поздно вечером, рискует трапезовать рано поутру".
Прочие ужимки лично я обсуждать не намерен.
28 сен 19, 08:56    [21981531]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2089
Basil A. Sidorov
PetroNotC Sharp
состояние в ООП это даже просто поле с int.
"Никогда и ничего не доводи до абсурда, ибо человек, желающий трапезовать поздно вечером, рискует трапезовать рано поутру".
Прочие ужимки лично я обсуждать не намерен.
ну задай вопрос про состояние на собесах.
Нет предмета для спора.
28 сен 19, 08:59    [21981534]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
questioner
Member

Откуда:
Сообщений: 1861
Basil A. Sidorov
PetroNotC Sharp
Где не храни, сервер назначает id session.
Значит хранит состояние.
Заблуждение: идентификатор сеанса - всего лишь ключ, который позволяет извлечь необходимые данные из внешнего хранилища.
В результате, серверу требуется обрабатывать состояние сотен (тысяч) активных сеансов, а не все миллионы, которые "когда-то были".


Наверное тут соглашусь. То, что ключ назначает сервер, кстати, не значит, что он их должен хранить.он может и UuID использовать
29 сен 19, 00:29    [21981838]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2089
questioner
Наверное тут соглашусь. То, что ключ назначает сервер, кстати, не значит, что он их должен хранить.он может и UuID использовать
переведи.
Там нет никакой магии.
Ключ назначаемый сервером это просто число и метка времени.
1. Либо он их хранит где угодно для использования
2. Либо не хранит.
Другого не дано. Нельзя быть немножко беременным сервером.
Про UuID не понял.
29 сен 19, 08:15    [21981868]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 2343
questioner
Basil A. Sidorov
пропущено...
Заблуждение: идентификатор сеанса - всего лишь ключ, который позволяет извлечь необходимые данные из внешнего хранилища.
В результате, серверу требуется обрабатывать состояние сотен (тысяч) активных сеансов, а не все миллионы, которые "когда-то были".


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

Хранить-то его зачем?
Его главное сгенерировать так, чтобы никто подобрать не смог и получить доступ к чей-то сессии.
29 сен 19, 12:04    [21981925]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 2343
Дмитрий Мух
Его главное сгенерировать так, чтобы никто подобрать не смог и получить доступ к чей-то сессии.

Ну или сгенерировать тупо, но зашифровать надёжно :)
29 сен 19, 12:06    [21981926]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 2343
questioner
Судя по всему автор имел ввиду, что если хранить сессию на клиенте, либо в базе данных либо ещё в каком внешнем хранилище, то сервер будет считаться stateless
Именно..

Великое множество сервисов в сети построены на горизонтальном масштабировании.
То есть запросы пользователей обслуживает не один, а три, пять, семь и более веб-серверов (балансировка нагрузки).
И в такой архитектуре встаёт вопрос как работать с информацией, которая должна быть сохранена в сессии пользователя и доступна всем его запросам.
Если она хранится локально на одной машине фермы, то все запросы должны идти туда же.
Этот подход называется липкие сессии (sticky session) - когда load balancer (к примеру HAProxy) закрепляет пользователя за сервером, который обслужил его первый запрос.

Если же у нас stateless, то нам не надо делать дополнительных телодвижений, настраивать балансировщик нагрузки, а там есть свои нюансы.
И тем самым всё проще и надёжнее.
29 сен 19, 12:41    [21981944]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
questioner
Member

Откуда:
Сообщений: 1861
PetroNotC Sharp
questioner
Наверное тут соглашусь. То, что ключ назначает сервер, кстати, не значит, что он их должен хранить.он может и UuID использовать
переведи.
Там нет никакой магии.
Ключ назначаемый сервером это просто число и метка времени.
1. Либо он их хранит где угодно для использования
2. Либо не хранит.
Другого не дано. Нельзя быть немножко беременным сервером.
Про UuID не понял.


Суть моей мысли в том, что если сервер даже генерирует некий идентификатор, то это совсем не значит, что ему его хранить надо. К тому же есть сомнения в том, что именно сервер всегда должен генерировать идентификатор сессии
29 сен 19, 21:24    [21982146]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2089
questioner
Суть моей мысли в том, что если сервер даже генерирует некий идентификатор, то это совсем не значит, что ему его хранить надо.
да. Пусть хранит в бд. Тебе легче?
Использует айди сессии все равно из бд опять сервер)))

questioner
тому же есть сомнения в том, что именно сервер всегда должен генерировать идентификатор сессии
да. Контейнер все делает)
30 сен 19, 00:20    [21982235]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
mad_nazgul
Member

Откуда:
Сообщений: 4838
questioner
Вот что-то я не прочуял что именно значит сервер без состояния. И почему сохранение сеанса на стороне сервера не делает его stateful ?


Stateless это просто.

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

Грубо говоря.
Если на вход сервиса add(x,y) подаем x=2, y=2, то на выходе всегда будет 4.

Со statefull такого сказать нельзя. Там может быть все что угодно.
30 сен 19, 05:52    [21982289]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2089
mad_nazgul,
Ну ты даешь).
Немного не так.
Это в первый раз в сервис подаешь х=2.
Во втрой раз у=2 И ОН ТЕБЯ ПОМНИТ)
30 сен 19, 08:05    [21982309]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9416
Дмитрий Мух
Ну или сгенерировать тупо, но зашифровать надёжно :)
Это так не работает.
Идентификаторы сессия обязаны быть очень маленьким подмножеством, случайно выбранным из очень большого. Подможнество, возможно, следует "проредить" так, чтобы не было идентификаторов с последовательными значениями.
Если "тупо шифровать" последовательные значения, то потенциальный взломщик будет "тупо шифровать последовательные значения" и надёжно получать идентификаторы чьих-то сеансов.
30 сен 19, 08:19    [21982316]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Java Ответить