Использование NHibernate в случае stateless клаcтера
От: Syleiman  
Дата: 13.01.11 06:05
Оценка:
Добрый день!

Подскажите пожалуйста решение, те, кто сталкивался.
Есть распределенное приложение — клиент + сервер приложений. На сервере приложений хочется читать данный из БД -> передавать их на клиент -> на клиенте обрабатывать -> передавать обратно на сервер -> сохранять в БД.

Начал смотреть в сторону NHibernate (до этого использовал CodeSmith + NetTiers). Обнаружил, что он использует парадигму POCO — состояния объектов, прочитанных из БД, хранятся в сессии.

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

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

С нетерпением жду ответа!
Re: Использование NHibernate в случае stateless клаcтера
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 13.01.11 09:11
Оценка:
Здравствуйте, Syleiman, Вы писали:

S>Вообще, применяется ли NHibernate в подобных сценариях? Если нет, то подскажите пожалуйста куда копать.

Вместе с закрытием сессии умирает и первый уровень кеша, который в нем живет. Если у вас сессия привязана к HTTP-сессии, то проблем вроде бы не должно быть: пришел запрос, открыли сессию, что-то сделали, закрыли сессию и отправили ответ — новый запрос открывает новую сессию. Соответственно, сервер по-прежнему stateless.

S>Распределенное хранилище?

Все остальные уровни кеширования нужно или отключить, или задействовать распределенный кеш, что-то вроде NCache (есть провайдер для NHibernate).

В принципе, и кеш первого уровня даже можно отключить, используя StatelessSession. Но нужно ли это?

S>Привязывать пользователя к конкретному серверу?

Не стоит.
Re[2]: Использование NHibernate в случае stateless клаcтера
От: Syleiman  
Дата: 13.01.11 13:31
Оценка:
Здравствуйте, rsn81, Вы писали:

R>Здравствуйте, Syleiman, Вы писали:


S>>Вообще, применяется ли NHibernate в подобных сценариях? Если нет, то подскажите пожалуйста куда копать.

R>Вместе с закрытием сессии умирает и первый уровень кеша, который в нем живет. Если у вас сессия привязана к HTTP-сессии, то проблем вроде бы не должно быть: пришел запрос, открыли сессию, что-то сделали, закрыли сессию и отправили ответ — новый запрос открывает новую сессию. Соответственно, сервер по-прежнему stateless.
Простите, а как привязать сессию NHibernate к HTTP-сессии?

S>>Распределенное хранилище?

R>Все остальные уровни кеширования нужно или отключить, или задействовать распределенный кеш, что-то вроде NCache (есть провайдер для NHibernate).

R>В принципе, и кеш первого уровня даже можно отключить, используя StatelessSession. Но нужно ли это?


S>>Привязывать пользователя к конкретному серверу?

R>Не стоит.
Re[3]: Использование NHibernate в случае stateless клаcтера
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 13.01.11 13:47
Оценка:
Здравствуйте, Syleiman, Вы писали:

S>Простите, а как привязать сессию NHibernate к HTTP-сессии?

HTTP — это я случайно написал, вы же не описывали, какой у вас протокол. В Google вбейте "nhibernate session per request", найдете решение для вашего окружения.
Re[4]: Использование NHibernate в случае stateless клаcтера
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 13.01.11 14:01
Оценка:
Здравствуйте, rsn81, Вы писали:

S>>Простите, а как привязать сессию NHibernate к HTTP-сессии?

R>HTTP — это я случайно написал, вы же не описывали, какой у вас протокол. В Google вбейте "nhibernate session per request", найдете решение для вашего окружения.
Я может быть слишком умно выразился. Имелось в виду, что время жизни сессии совпадает со временем жизни запроса.
Re[5]: Использование NHibernate в случае stateless клаcтера
От: Syleiman  
Дата: 13.01.11 15:12
Оценка:
Здравствуйте, rsn81, Вы писали:

R>Здравствуйте, rsn81, Вы писали:


S>>>Простите, а как привязать сессию NHibernate к HTTP-сессии?

R>>HTTP — это я случайно написал, вы же не описывали, какой у вас протокол. В Google вбейте "nhibernate session per request", найдете решение для вашего окружения.
R>Я может быть слишком умно выразился. Имелось в виду, что время жизни сессии совпадает со временем жизни запроса.
Спасибо за ответ, буду копать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.