클러스터형 WEB 애플리케이션은 다소 세션 문제에 직면하게 됩니다. 여러 서버의 경우 세션의 키 저장으로 인해 몇 가지 문제가 발생하고 사용자 경험에 영향을 미칠 수 있습니다.
클라이언트가 고정 서버에 바인딩되도록 ip_hash
과 같은 Nginx 로드 정책을 구성하여 최종 사용자가 액세스하는 시스템이 고정되도록 session
이 로컬에 저장되도록 합니다. 사용자 사용에는 영향을 미치지 않습니다. 하지만 두 가지 주요 단점이 있습니다.
ip_hash
배포가 고르지 않고, 특히 ip_hash
에 사용된 Nginx가 프론트 엔드가 아닌 경우 이 전략을 사용할 수 없습니다
로드 밸런스 문제를 고려하지 않으면 여전히 존재하는 문제는 백엔드 머신이 다운되면 <에 기록된 사용자 데이터가 이 머신의 모든 session
을 잃게 된다는 것입니다. 🎜> 인증 상태인 경우 사용자는 미인증 상태가 됩니다session
브로드캐스트를 수행합니다. 이 방법의 문제점은 클러스터 규모가 확장되면 브로드캐스트 성능이 매우 저하된다는 점입니다. 일반적으로 session
사용을 권장하지 않습니다. 🎜 >
나 session
의 구체적인 사용법을 다루지 않습니다. redis
를 사용하는 방법도 매우 간단합니다. 🎜> 저장소 구현을 위해 교체하여 사용할 수도 있습니다. memcached
의 redis
또는 session
구현을 동적으로 수정하려면 redis
메서드를 사용하세요. 중앙 집중식 저장소가 (로컬 저장소와 비교하여) 성능에 특정 영향을 미친다는 점을 제외하면 나머지는 거의 완벽합니다. 구현 코드는 충분히 강력합니다 HttpServletRequestWrapper
session
memcached-session-manager
spring-session
저도 잘못된 방법을 생각해 냈는데 그것은 단지 아이디어일 뿐이고 한번도 사용한 적이 없습니다.
session
session
위의 방법 외에도 다른 방법도 있을 텐데요, 관심 있으신 분들은 오셔서 토론해 보세요
,
등과 같은 타사 저장소에 직접 저장할 수 있으며 이는 session
공유 솔루션이지만 상대적으로 더 급진적입니다. servlet
여기서 말하는 세션의 절대적인 부분은 로그인 정보를 저장하는 부분이겠죠?
그렇다면 통합 로그인 서비스도 해결책이 되어야 합니다