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

Откуда:
Сообщений: 9418
mad_nazgul
Stateless это севрис, на который если мы подаем одни и те же данные на вход, то получаем одни и те же ответы на выходе.
Идемпотентность - сильное условие, которое, обычно, завязано на стабильность внешнего состояния.
30 сен 19, 08:23    [21982318]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
mad_nazgul
Member

Откуда:
Сообщений: 4839
PetroNotC Sharp
mad_nazgul,
Ну ты даешь).
Немного не так.
Это в первый раз в сервис подаешь х=2.
Во втрой раз у=2 И ОН ТЕБЯ ПОМНИТ)


Нет, именно, что сервис ведет себя как "функция".

"ПОМНИТ" это значит есть состояние.

Но может быть по другому.
С одного "входа" идет x, а с другого "входа" идет y.
Например с веб-реквеста к нам прилетает "x", а "y" берется из БД.

Сам сервис stateless, т.е. он ведет себя одинаково при одинаковых данных.

Т.о. идет разделение ответственности.
Сервисы аккумулируют бизнес-логику, а состояние находиться в хранилищах данных, где бизнес-логики не должно быть.
30 сен 19, 09:01    [21982334]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
mad_nazgul
Member

Откуда:
Сообщений: 4839
Basil A. Sidorov
mad_nazgul
Stateless это севрис, на который если мы подаем одни и те же данные на вход, то получаем одни и те же ответы на выходе.
Идемпотентность - сильное условие, которое, обычно, завязано на стабильность внешнего состояния.


Ну да. Ничего "бесплатно" не бывает.
Stateless легче писать и сопровождать, но нужно уделять больше внимания к хранению данных.
30 сен 19, 09:03    [21982335]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9418
mad_nazgul
Ну да.
Ну нет - "без состояния" ортогонально "воспроизводимости".
30 сен 19, 09:08    [21982339]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2144
mad_nazgul
Но может быть по другому.
С одного "входа" идет x, а с другого "входа" идет y.
Например с веб-реквеста к нам прилетает "x", а "y" берется из БД.
именно на этом акцент карл!
А ты выше написал, в одном запросе подаем
Сервис.умножить(2,2).
Это без состояния.
30 сен 19, 09:16    [21982347]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2144
mad_nazgul
"ПОМНИТ" это значит есть состояние.
я и привел пример с состоянием.
Блин, такой простой вопрос и мусолим вторую страницу.
30 сен 19, 09:18    [21982350]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 2343
Basil A. Sidorov
Дмитрий Мух
Ну или сгенерировать тупо, но зашифровать надёжно :)
Это так не работает.
Идентификаторы сессия обязаны быть очень маленьким подмножеством, случайно выбранным из очень большого. Подможнество, возможно, следует "проредить" так, чтобы не было идентификаторов с последовательными значениями.
Если "тупо шифровать" последовательные значения, то потенциальный взломщик будет "тупо шифровать последовательные значения" и надёжно получать идентификаторы чьих-то сеансов.

Почему тупо шифровать? Почему последовательные?
30 сен 19, 10:08    [21982400]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Alexander A. Sak
Member

Откуда: Омск
Сообщений: 1036
Basil A. Sidorov
Если "тупо шифровать" последовательные значения, то потенциальный взломщик будет "тупо шифровать последовательные значения" и надёжно получать идентификаторы чьих-то сеансов.


Помнится, была на Хабре статья что-то типа "Грабь награбленное". Там чуваки увидели, что на каком-то файлообменнике ID генерится последовательно, и накачали себе кучу интересного: фильмы, базы е-мейлов и все такое прочее.
30 сен 19, 10:38    [21982420]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9418
Alexander A. Sak
чуваки увидели, что на каком-то файлообменнике ID генерится последовательно
Ключевое - последовательно. Попытка рэндомизации путём шифрования или хэширования, принципиально, ничего не меняет.
Если же выбираются случайные значения из очень большого множества, то и шифровать их не требуется.
30 сен 19, 11:13    [21982460]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9418
Дмитрий Мух
Почему последовательные?
Потому, что "сгенерить тупо". Если все слова употреблены (вами) корректно, то получается последовательность. В простейшем случае - линейная функция (одного) монотонно растущего аргумента.
30 сен 19, 11:16    [21982463]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
questioner
Member

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

questioner
тому же есть сомнения в том, что именно сервер всегда должен генерировать идентификатор сессии
да. Контейнер все делает)


Сервер ребутнули и состояние не потеряли, если сессию в базе храним.
30 сен 19, 15:56    [21982896]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2144
questioner
Сервер ребутнули и состояние не потеряли, если сессию в базе храним.
плюсы и минусы места хранения вообще не имеют отношения к вопросу.
Есть факт - сессия назначена контейнером (ОН ВАС ПОМНИТ И ДЕРЖИТ)
Противоположный факт - Не назначается сессия контейнером. Он узнаёт васю по зашифрованной строке от клиента "федя" С КАЖДЫМ НОВЫМ ЗАПРОСОМ на F5.
...
Все остальное это вариации от фактов выше.
30 сен 19, 16:11    [21982919]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
questioner
Member

Откуда:
Сообщений: 1865
PetroNotC Sharp
questioner
Сервер ребутнули и состояние не потеряли, если сессию в базе храним.
плюсы и минусы места хранения вообще не имеют отношения к вопросу.
Есть факт - сессия назначена контейнером (ОН ВАС ПОМНИТ И ДЕРЖИТ)
Противоположный факт - Не назначается сессия контейнером. Он узнаёт васю по зашифрованной строке от клиента "федя" С КАЖДЫМ НОВЫМ ЗАПРОСОМ на F5.
...
Все остальное это вариации от фактов выше.


я не согласен. кластерные приложения без стики сессион вполне себе работают.

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

Откуда: Москва
Сообщений: 5671
questioner
Серверу нет нужды ничего помнить.

- верно, но тогда либо JWT, либо какие то велосипеды по хранению состояния в БД и т п.
30 сен 19, 18:07    [21983066]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2144
questioner,
Добрались до кластеров. Еще есть сериализация сессии в бд. Потом рожать ее и базы.
Много чего есть.
Ты не запутывай простые вещи. Как в прошлом вопросе.
30 сен 19, 18:12    [21983077]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
questioner
Member

Откуда:
Сообщений: 1865
Kachalov
questioner
Серверу нет нужды ничего помнить.

- верно, но тогда либо JWT, либо какие то велосипеды по хранению состояния в БД и т п.


Тут как раз топик про то где хранить состояние. Если не на сервере(БД там или ещё чего), то сервер stateless. Точка.
30 сен 19, 18:32    [21983101]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
WGA
Member

Откуда:
Сообщений: 392
questioner,

В общем-то альтернатив традиционным сессиям немного.
1. Хранение данных в БД. Поднимаем эти данные при каждом запросе по некоему, как правило, секретному идентификатору. Недостатки - нагрузка на БД. Частично можно невелировать, если вместо обычной реляционной СУБД использовать специалбные дата-гриды типа Infinispan, Hazelcast и т.п. По сути распределенный кэш. При этом хранение состояния делегируется сервером приложений специализированному хранилищу, сам он остается stateless..
2. Хранить состояние на клиенте и передавать в куках при каждом запросе (или в заголовках, а хранить в local storage браузера). Из недостатков - безопасность и связанные с этим накладные расходы. Сервер не может доверять данным клиента, он должен как минимум их подписать. Есть и другие проблемы, например, сервер не может принудительно завершить сессию, а в дистанционном банковском обслуживании это важно, как пример. Вообще интересный подход, это чистый REST. Советую почитать про JWT.
30 сен 19, 19:00    [21983142]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5671
questioner
Если не на сервере(БД там или ещё чего), то сервер stateless.

- Вы про сервер или про приложение?

questioner
Тут как раз топик про то где хранить состояние. Точка.

- помягче, "точки" лучше с женой искать, а не на форуме
30 сен 19, 19:02    [21983148]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

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

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

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

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

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

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

Откуда:
Сообщений: 2144
questioner
Тут как раз топик про то где хранить состояние
неверно.
Топик про то как интерпретировать ф
30 сен 19, 20:27    [21983206]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2144
Глюки))
Топик про то как понять конкретну фразу фаулера.
А то уже пишут ОБЗОР с аналитикой всех вариантов хранения и плюс аутентификации.
30 сен 19, 20:32    [21983214]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
Дмитрий Мух
Member

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

амн, а последовательность-то откуда возьмётся? где будет храниться?
проще сгенерировать случайное число, или взять идентификатор пользователя

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

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


Сервер почти всегда statefull, т.к. будет хранить где-то состояние.
А вот сервисы в нем могут быть почти все stateless.
Где хранить состояние на сервере приложений.
Есть много вариантов. Например в memcached, по sessionId :-)
1 окт 19, 05:36    [21983409]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2144
mad_nazgul
А вот сервисы в нем могут быть почти все stateless.
все в руках программиста.
Services.startSession(idClients)
Serveces.setParamX(2
Services.setParamY(2
Services.getSUM()
Вариантов миллион чтобы делать обзор.
1 окт 19, 07:49    [21983427]     Ответить | Цитировать Сообщить модератору
 Re: Фаулер. Как реализовать Сеанс(Session) c состоянием при помощи сервера без состояния?  [new]
questioner
Member

Откуда:
Сообщений: 1865
mad_nazgul
Есть много вариантов. Например в memcached, по sessionId :-)



А Фаулер называет такой сервер stateless
1 окт 19, 11:09    [21983574]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Java Ответить