2011-01-31 10 views
7

메모리 내 세션 복제/클러스터링을 방지하고 세션을 데이터베이스에 저장하는 방법을 찾고 있습니다. 서버 메모리를 절약하기 위해 데이터베이스에 비활성 세션 만 저장하기 때문에 Tomcat의 JDBCStore를 사용하면 유용하지 않습니다. 제안 사항이 있으십니까? 자신의 세션 객체를 개발 -Tomcat : 데이터베이스에 세션 저장

덕분에 당신이 그것을 사용하도록되어 방식으로 세션을 사용하지 않으려면 파비안

+1

아마존의 Elastic Beanstalk에서 보았습니까? 그들은 끈적 거리는 세션을 제공합니다. – stepanian

답변

5

, 그때 전혀 사용하지 않는 선행. HttpSession을 계속 구현할 수 있으며 HttpSession 구현에서 확장 할 수도 있습니다.

Filter을 사용하여 요청을 래핑하여 표준 세션 개체가 아닌 세션 개체를 반환 할 수 있습니다. 세션에서 물건을 메모리가 아닌 DB에 저장할 수 있습니다.

DB에 쓰는 대신 Hazelcast을 사용할 수 있습니다. 분산 컬렉션을 제공합니다. 하지만 세션 복제를 구성하는 것과 동일한 노력이 필요하다고 생각합니다. 세션 복제는 모든 컨테이너에서 지원되는 것이 아닙니다.

이것은 대략적인 지침이므로 작업은 간단하지 않습니다. 그리고 표준 세션 사용 패턴을 고수하고 실제로 필요한 경우에만 DB에 저장하는 것이 좋습니다.

복제 필요성을 피하려면 고정 세션을 사용하십시오. 즉 사용자가로드 밸런서에 의해 서버로 연결될 때 해당 사용자의 각 후속 요청은 동일한 서버로 전송됩니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 내 의도는 Microsoft Azure에서 여러 Tomcat을 실행하는 것입니다. 고정 세션의 문제점은 Azure의로드 밸런서가 지원하지 않는다는 것입니다. 이 클라우드 환경에서 세션 복제를 달성하는 가장 쉬운 방법은 세션을 db에 저장하는 것입니다. HttpSession 확장 및 필터에 대한 코드 샘플이 있습니까? 답변 주셔서 감사합니다 – Fabe

+0

@Fabe - 저는 예제가 없습니다, 미안 해요. – Bozho

3

this project을보고 싶을 수도 있습니다. DB가 아닌 memcached에 세션을 저장하는 편이 좋을 것입니다.

+0

체크 아웃이 매우 흥미 롭습니다.하지만 끈적이지 않은 세션 버전은 제작 준비가되어 있지 않습니다. ( – Fabe

+0

재미있는 프로젝트, +1 – Bozho

+1

btw, memcached-session-manager 1.4가 출시되었습니다. – MartinGrotzke