Stateless-сервер на Hibernate: кеширование и вообще
От: Дм.Григорьев  
Дата: 23.07.07 15:39
Оценка:
Всем привет.

По итогам прочтения книжки "Java Persistence with Hibernate" и флейма "Подходы к организации 3-tier"
Автор: Tom
Дата: 04.12.03
, возник сабжевый вопрос. В двух словах то, что меня мучает, может быть сформулировано так:

Вопрос 0: А пригоден ли Hibernate вообще для написания действительно масштабируемых систем (таких, как mamba.ru, крутящаяся на 200 серверах
Автор: Anatolix
Дата: 22.07.07
)?



Допустим, я не испольюу длинных сессий, ограничивая время жизни сессии одним HTTP-запросом. Также не использую detached-объекты, то есть время жизни объектов в памяти ограничено одним HTTP-запросом. В итоге я как бы получаю идеологически чистый stateless.

Кеш первого уровня живёт столько же. В случае многошаговых диалогов, серверный обработчик каждого шага явным образом лезет в базу (или в кеш второго уровня, ежели он имеется... вопросы ниже) для проверки корректности данного шага и, возможно, всех предыдущих шагов внутри сценария.

Вопрос 1: Пока что всё правильно?



Далее про кеши, живущие дольше одного HTTP-запроса (Hibernate's 2nd level cache). IT говорил
Автор: IT
Дата: 07.12.03
, что в stateless-модели в кластере отсутствует необходимость синхронизации кешей нодов, достаточно броадкастить команду сброса кеша. Это решает проблему горизонтального трафика между нодами и, как следствие, масштабируемости. Вопросы следующие:

Вопрос 2: Не слишком ли это круто — сбрасывать весь кеш? На других машинах могут обрабатываться и кешироваться не связанные данные. Как это решается (идеологически, без привязки конкретно к Hibernate)? Лично мне в голову приходит только обмен короткими сообщениями вида "users.12", что означает "сбрось нафиг все данные, имеющие хоть какое-то отношение к пользователю ID=12".

Вопрос 3: Поддерживаются ли эти решения в JBoss Cache (или как там его зовут... кластерный кеш, который может быть задействован в качестве Hibernate 2nd level cache)? Спрашиваю, потому что боюсь лезть в доки, чтобы не случилось memory overflow от изобилия деталей при отсутствии общего понимания.

Вопрос 4: Даже если JBoss Cache обеспечивает вышеупомянутую поддержку для stateless-приложений, то Hibernate 2nd level cache, насколько я понял, всё равно не поддерживает этой радости, т.е. гоняет сериализованные объекты между нодами. Это так? Если да, то как дальше жить?



Возможно, я просто паникёрствую. Авторы книжки утверждают, что при правильной архитектуре всё должно замечательно работать без всяких 2nd level cache. Если кидать в кластерный кеш только редко изменяющиеся данные, то их при случае и сбросить не жалко. Но тем не менее, гложет меня сомнение, что я чего-то недопонимаю... точнее, недо-знаю.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.