Подскажите пожалуйста решение, те, кто сталкивался.
Есть распределенное приложение — клиент + сервер приложений. На сервере приложений хочется читать данный из БД -> передавать их на клиент -> на клиенте обрабатывать -> передавать обратно на сервер -> сохранять в БД.
Начал смотреть в сторону NHibernate (до этого использовал CodeSmith + NetTiers). Обнаружил, что он использует парадигму POCO — состояния объектов, прочитанных из БД, хранятся в сессии.
Все хорошо, но где хранить сессии NHibernate, если мы работаем в stateless-кластере и балансировщик может бросить следующий запрос пользователя на любой сервер?
Распределенное хранилище?
Привязывать пользователя к конкретному серверу?
Как делаете вы?
Вообще, применяется ли NHibernate в подобных сценариях? Если нет, то подскажите пожалуйста куда копать.
С нетерпением жду ответа!
Re: Использование NHibernate в случае stateless клаcтера
Здравствуйте, Syleiman, Вы писали:
S>Вообще, применяется ли NHibernate в подобных сценариях? Если нет, то подскажите пожалуйста куда копать.
Вместе с закрытием сессии умирает и первый уровень кеша, который в нем живет. Если у вас сессия привязана к HTTP-сессии, то проблем вроде бы не должно быть: пришел запрос, открыли сессию, что-то сделали, закрыли сессию и отправили ответ — новый запрос открывает новую сессию. Соответственно, сервер по-прежнему stateless.
S>Распределенное хранилище?
Все остальные уровни кеширования нужно или отключить, или задействовать распределенный кеш, что-то вроде NCache (есть провайдер для NHibernate).
В принципе, и кеш первого уровня даже можно отключить, используя StatelessSession. Но нужно ли это?
S>Привязывать пользователя к конкретному серверу?
Не стоит.
Re[2]: Использование NHibernate в случае stateless клаcтера
Здравствуйте, rsn81, Вы писали:
R>Здравствуйте, Syleiman, Вы писали:
S>>Вообще, применяется ли NHibernate в подобных сценариях? Если нет, то подскажите пожалуйста куда копать. R>Вместе с закрытием сессии умирает и первый уровень кеша, который в нем живет. Если у вас сессия привязана к HTTP-сессии, то проблем вроде бы не должно быть: пришел запрос, открыли сессию, что-то сделали, закрыли сессию и отправили ответ — новый запрос открывает новую сессию. Соответственно, сервер по-прежнему stateless.
Простите, а как привязать сессию NHibernate к HTTP-сессии?
S>>Распределенное хранилище? R>Все остальные уровни кеширования нужно или отключить, или задействовать распределенный кеш, что-то вроде NCache (есть провайдер для NHibernate).
R>В принципе, и кеш первого уровня даже можно отключить, используя StatelessSession. Но нужно ли это?
S>>Привязывать пользователя к конкретному серверу? R>Не стоит.
Re[3]: Использование NHibernate в случае stateless клаcтера
Здравствуйте, Syleiman, Вы писали:
S>Простите, а как привязать сессию NHibernate к HTTP-сессии?
HTTP — это я случайно написал, вы же не описывали, какой у вас протокол. В Google вбейте "nhibernate session per request", найдете решение для вашего окружения.
Re[4]: Использование NHibernate в случае stateless клаcтера
Здравствуйте, rsn81, Вы писали:
S>>Простите, а как привязать сессию NHibernate к HTTP-сессии? R>HTTP — это я случайно написал, вы же не описывали, какой у вас протокол. В Google вбейте "nhibernate session per request", найдете решение для вашего окружения.
Я может быть слишком умно выразился. Имелось в виду, что время жизни сессии совпадает со временем жизни запроса.
Re[5]: Использование NHibernate в случае stateless клаcтера
Здравствуйте, rsn81, Вы писали:
R>Здравствуйте, rsn81, Вы писали:
S>>>Простите, а как привязать сессию NHibernate к HTTP-сессии? R>>HTTP — это я случайно написал, вы же не описывали, какой у вас протокол. В Google вбейте "nhibernate session per request", найдете решение для вашего окружения. R>Я может быть слишком умно выразился. Имелось в виду, что время жизни сессии совпадает со временем жизни запроса.
Спасибо за ответ, буду копать