3 개의 Tomcat 서버와 'sticky sessions'을 사용하지 않고 요청을 보내는 Load Balancer를 갖습니다.
서버간에 세션 데이터를 공유하려고합니다. DB에서 세션 데이터를 유지하려고합니다. 내 서버 앞에있는 레이어로 memcached을 사용하여 더 빨리 요청을 처리하고 don't put my db under heavy load으로 보내고 싶습니다.
나는 그것을하기 위해 투명한 방법을 보지 못하는 순간에 세션 데이터를 DB에 저장/유지하기 전에 memcached를 사용하는 사용자 정의 된 Tomcat Manager를 제공 할 생각입니다. 다시 다른 앱 서버로 전환하는 경우).
이 방법이 좋은 해결책입니까 아니면 더 나은 방법이 있습니까?톰캣 인스턴스 간의 세션 공유 (끈끈한 세션 사용 안 함)
답변
Google 애플리케이션 (Weblogic, 그러나 상관 없습니다)에서 비슷한 세션 키가 브라우저에 쿠키로 저장되어 있습니다. 이 키는 각 요청시 데이터베이스에서 관련 세션 데이터를 복원하는 데 사용됩니다.
이 원칙을 사용하면로드 밸런서를 사용하여 다른 서버로 전환 할 수 있습니다. 그 외에도 사용자 세션과 관련된 항목은 저장하지 않고 브라우저의 많은 숨겨진 필드와 함께 작업합니다 (로드 밸런서는 URL 암호화 및 양식 값 보호를 지원하므로 안전한쪽에 있습니다 ...) .
나는 Terracotta Web Sessions을 원한다고 생각합니다.
응용 프로그램 서버 (귀하의 경우 Tomcat) 외부에 세션 상태를 저장하는 것은 대규모 웹 사이트에 매우 일반적이며 권장되는 구성입니다. 이것은 일반적으로 Shared Nothing이라는 아키텍처 스타일을 추구하여 수행됩니다.
db, memcached, 상업용 복제 된 캐시 등 여러 다른 장소에 상태를 저장할 수 있습니다. 이들은 모두 서로 다른 트레이드 오프의 조합으로 작동합니다. 개인적으로 memcached를 통해 큰 성공을 거두었습니다. Memcached는 매우 빠르고 안정적입니다.
일반적으로 N Memcache 서버를 N> 1, 2로 사용합니다. 사용자가 로그인 할 때 앱 서버는 동전을 뒤집어 사용자가 저장하는 서버 저장소를 결정합니다. 브라우저로 전송 된 쿠키에는 이후에 라우팅 할 Memcache 서버를 알 수있는 정보가 들어 있습니다. 브라우저의 후속 요청은 각 요청에 대해 적절한 memcache 서버에서 상태를 가져옵니다. memcache 서버가 실패하면 사용자는 새로운 서버를 다시 선택하기 때문에 다시 로그인해야하지만 매우 드뭅니다.
데이터베이스의 세션을 지속하면 확장 성이 제한됩니다. 확장 성이 그다지 중요하지 않은 경우 (db + memcached) 유효한 접근 방식입니다.
비 정적 세션을 사용할 때 염두에 두어야 할 사항 중 하나는 동시 요청입니다. (동시에/동시에 실행되는) Ajax 요청 (서로 끈적 거리지 않음으로 인해)이 서로 다른 톰캣에 의해 서비스되고 따라서 동시에 세션에 액세스합니다. 세션을 수정할 수있는 동시 요청이있는 한 일종의 동기화/세션 잠금을 구현해야합니다.
아마도 이것은 당신에게 중요합니다. 최적의 성능과 무제한의 확장 성을 목표로 memcached-session-manager을 만들었습니다. memcached 호환 백엔드 (예 : memcachedb, membase 등 또는 memcached)와 함께 작동 할 수 있습니다. 원래는 끈적 세션 방식을 위해 제작되었지만 이미 branch for nonsticky-sessions이 있고 how/that 작동을 보여주는 sample app이 있습니다. 지금은 thread on the mailing list on further improvements for nonsticky-sessions (동시 요청 처리 및 단일 지점 오류 방지)이 있습니다.
그냥 메모가 여기에 있습니다. 그냥 비 스티커 세션 지원 (및 tomcat7 지원)을 사용하여 memcached-session-manager를 릴리스합니다. 비 끈끈한 세션과 관련된 세부 정보 : http://groups.google.com/group/memcached-session-manager/t/612891b0ae10649d – MartinGrotzke
아약스 요청에 대한 좋은 지적. 동일한 흐름 내에서 서버에 대한 여러 요청이있을 수 있습니다. – vsingh
- 1. 레일 : 동적 세션 도메인 및 하위 도메인 간의 공유 세션
- 2. JSP 용 Tomcat 6에서 세션 사용 안 함
- 3. 도메인과 하위 도메인 간의 공유 세션
- 4. 응용 프로그램 간의 레일 세션 공유
- 5. Node.js 앱과 Rails 앱 간의 세션 공유
- 6. Magento와 Symfony 간의 사용자 세션 변수 공유
- 7. BlazeDS 서블릿과 Http 서블릿 간의 세션 공유
- 8. OC4J에서 .jsp 페이지 간의 세션 값 공유
- 9. 클래스 인스턴스 메서드 사용 안 함
- 10. 자바, 톰캣, 세션 - JSessionId가 사라짐
- 11. 톰캣 6 클러스터링 - 인증 된 세션 복제
- 12. 전역 적으로 캐시 사용 안 함 .NET
- 13. PHP ASP 공유 세션
- 14. PHP로 서블릿 세션 공유
- 15. 공유 세션 쿠키
- 16. UIPickerView 사용 안 함
- 17. 알림 사용/사용 안 함
- 18. Word/Sharepoint 통합 사용 안 함
- 19. 내보기에서 세션 변수 사용
- 20. 브라우저 프로세스 간의 세션 쿠키
- 21. active_record_store와 cookie_store 간의 세션 차이
- 22. 여러 사이트 간의 HTTP 세션
- 23. 레일에서 악의적 인 사용자 간의 세션 공유 중지하기
- 24. AJAX를 통해 호출 된 컨트롤러 간의 공유 세션 상태 액세스
- 25. 세션 객체가 null을 반환 함
- 26. 끈끈한 세션/세션의 장점과 단점 친밀로드 blancing 전략?
- 27. IE7에서 세션 간 쿠키 공유
- 28. 사이트간에 세션 데이터를 공유 하시겠습니까?
- 29. 고정 세션 대 공유 위치
- 30. 도메인 전체의 PHP 공유 세션
@ 루카스 Eder와 비슷한 설정이 있는데, 차이점은 세션 저장소로 Memcached를 사용한다는 것입니다. – Nishant
일부 응용 프로그램의 경우 "중요하지 않습니다"(즉, 세션 데이터는 인증 된 사용자와 관련하여 민감하지 않을 수 있지만) 원칙적으로 "세션"데이터를 앞뒤로 "숨겨진"필드로 물론 HTML 페이지의 어떤 필드도 사용자로부터 숨겨져 있지 않습니다.) 또는 이러한 목적을 위해 만들어진 쿠키는 실용적이지 못합니다. 앱의 클라이언트 측에서이 데이터가 필요하지 않으면 브라우저에 노출되어서는 안됩니다. –
@DanFarrell : 숨겨진 필드는 민감한 데이터가 아니며 양식 값 보호 기능을 사용하면 조정할 필요가 없습니다. 그래서 저는 그것이 안보 적 관점에서 어떻게 나쁜 행동이 될지 보지 못합니다. 물론 많은 데이터 전송 오버 헤드가있었습니다. –