SpringSession+Redis 클 러 스 터 세 션 공유 방법
기술 이 지금까지 발전 하면 서 군집/부하 균형 이 상대 적 으로 간단 해 졌 다.다음은 통속 적 인 언어 로 갓 입문 한 학생 들 에 게 이 두 가지 개념 을 소개 한다.
한 KFC 가 문 을 열 었 을 때 주문 창구(Tocmat 서버 한 대,비용 절감 가능)만 대외 적 으로 주문 서 비 스 를 제공 했다.일상적인 주문 에 문제 가 없 었 다.식사 입 이나 주말 에 한 창 이 길 게 줄 을 섰 다.고객 들 의 불평(요청 시간 이 길 고 사용자 체험 이 좋 지 않다)뿐만 아니 라 종업원 들 도 힘 들 었 다.결국 어느 날 그 는 지 쳐 쓰 러 졌 다(Tomcat 이 끊 었 다).
이때 측면 에 창(Tomcat 서버 한 대 추가)을 추가 하여 주문 서 비 스 를 제공 하지만 많은 고객 들 이 새 창 을 모 르 고 기 존 창 에 길 게 줄 을 서 있 습 니 다(사용 자 는 여전히 원래 의 Tomcat 에 방문 합 니 다).이 럴 때 는 한 사람 이 문 앞 에 서서 창문 마다 줄 을 서 있 는 상황 에 따라 고객 에 게 어느 창구 로 가서 주문 하 는 지 안내 해 야 한다.이 사람 은 각 창구 의 주문 인원 이 대체적으로 같 고 바 쁘 거나 한가 하지 않도록 하 는 역할 을 한다.고객 이 늘 어 나 면서 주문 창구 도 그 만큼 증가한다(Tomcat 이 점점 많아 진다).
WEB 부하 균형 방안 이 매우 많 습 니 다.
Nginx + Tomcat
자주 사용 하 는 방안 중 하나 입 니 다.Nginx 는 부하 이퀄 라이저 로 서 모든 Tomcat 의 부하 상황 에 따라 분류 합 니 다.1)WEB 응용 프로그램 구축
WEB 애플 리 케 이 션 을 준비 하고 두 개의 Tomcat 로 배치 합 니 다.테스트 할 때 요청 이 어떤 Tomcat 에서 처리 되 는 지 구분 할 수 있 도록 Tomcat 포트 번 호 를 결과 로 되 돌려 줍 니 다.
/**
* Tomcat
*/
@RequestMapping("/port/get")
@ResponseBody
public String getPort(HttpServletRequest request) {
return String.valueOf(request.getLocalPort());
}
이 예 에 서 는 각각 5677,5688 두 포트 를 사용 하여 이 프로젝트 를 배치 합 니 다.방문/port/get
은 결 과 를 Tomcat 의 포트 번호 로 되 돌려 달라 고 요청 합 니 다.http:// localhost:5677/port/get
http:// localhost:5688/port/get
2)Nginx 부하 균형 설정
Window 아래 Nginx 설치 가 간단 합 니 다.설치 할 줄 모 르 는 학생 자체 바 이 두 는 Nginx 설정 파일:nginx.conf 를 간단하게 소개 합 니 다.
# Nginx
worker_processes 1;
events {
#
worker_connections 1024;
}
# Nginx HTTP
# http ,
http {
# ,
# Nginx 88,89,90 , server
server {
# , 88 server
listen 88;
#
server_name localhost;
# URL, URL location
# / 88
location / {
# ,
# : /a.html, D:/a.html
root D:/;
}
}
}
위 설정 파일 의 가장 기본 적 인 Nginx 설정 은 우리 가 접근http://localhost:88할 때 Nginx 에서 처리 합 니 다.다음은 Nginx 의 부하 균형 을 설정 합 니 다.설정 1)에서 정 의 된 두 개의 tomcat 는 http 노드 에 다음 과 같은 코드 를 추가 합 니 다.
#
# upstream , springsession
# server , ( tomcat)
# server , ip:
# weight , 4 3 5688, 1 5677
upstream springsession {
server localhost:5677 weight=1;
server localhost:5688 weight=3;
}
Nginx 에 접근 할 모든 요청 을 두 서버 로 전송 하도록 설정 합 니 다.
location / {
# root D:/;
# springsession upstream
proxy_pass http://springsession;
}
3)부하 균형 테스트접근http://localhost:88/port/get,Nginx 는 두 대의 tomcat 중 하나 로 전송 요청 을 처리 합 니 다.반환 요청 결과 가 다른 것 을 발견 할 수 있 습 니 다.
1 번 창구 에서 주문 할 때 열 쇠 를 이 창구 에 잠시 보관 하 세 요.다음 에 주문 할 때 2 번 창구 나 다른 창구(1 번 창구 로 배 치 될 수도 있 습 니 다)로 배 치 될 수도 있 습 니 다.다른 창구 에서 열 쇠 를 찾 는 것 은 분명 통 하지 않 습 니 다.다른 창 에는 열쇠 가 없 기 때 문 입 니 다.이 럴 때 는 1 번 창구 로 빠르게 배 치 될 수 있 기 를 기도 할 수 있 습 니 다.
열 쇠 를 저장 하 는 동작 이 SESSION 에 정 보 를 저장 하 는 것 으로 바 뀌 면 요청 이 Tomcat 1 에 의 해 처 리 될 때 Tomcat 1 은 SESSION 을 생 성 합 니 다.SESSION 에 정 보 를 설정 하고 다음 요청 은 Tomcat 2 에 배정 되 었 습 니 다.Tomcat 2 는 또 하나의 SESSION 을 생 성 합 니 다.이것 은 두 개의 독립 적 이 고 공유 되 지 않 는 SESSION 입 니 다.따라서 Tomcat 2 에서 Tomcat 1 에 저 장 된 정 보 를 얻 을 수 없습니다.
로그 인의 원 리 는 바로 SESSION 에 로그 인 상 태 를 저장 하 는 것 입 니 다.위의 분석 에 따 르 면 클 러 스 터 에 로그 인 한 서비스 에서 효력 을 잃 습 니 다.Tomcat 1 에 로그 인 하고 다음 에 Tomcat 2 를 방문 합 니 다.이때 SESSION 을 통 해 로그 인 상 태 를 판단 한 것 은 로그 인 하지 않 은 것 이 고 다시 로그 인 해 야 합 니 다.사용자 가 미 쳤 습 니 다.미 쳤 습 니 다.사장 님 도 미 치 겠 습 니 다.
만약 공용 위치 에서 물건 을 보관 하 는 데 사용 된다 면 모든 주문 창 이 공용 위치 에서 고객 의 물품 을 액세스 하면 위의 문 제 는 쉽게 해 결 될 것 이다.
이것 이 바로 본 고의 중점 이다.클 러 스 터 에서 각 WEB 가 응용 하 는 SESSION 을 통일 적 으로 관리 하 는 것 이다.
Spring Session 의 기능 에 깊 은 인상 을 남기 기 위해 서 는 Spring Session 이 없 을 때 우리 의 클 러 스 터 애플 리 케 이 션 이 SESSION 을 어떻게 처리 하 는 지 테스트 해 보 겠 습 니 다.
균형 잡 힌 WEB 애플 리 케 이 션 에 컨트롤 러 방법 을 추가 하여 매번 SESSION ID 를 출력 합 니 다.
/**
* SESSION ID
*/
@RequestMapping("/sessionid/get")
@ResponseBody
public String getPort(HttpServletRequest request, HttpSession session) {
int port = request.getLocalPort(); //
String sessionId = request.getSession().getId(); // SESSION ID
return "port: " + port + ", session id: " + sessionId;
}
프로젝트 시작,여러 번 방문http://localhost:88/sessionid/get두 번 모두 같은 Tomcat 아래 에 있 는 SESSOIN ID 는 변 하지 않 습 니 다.
서로 다른 Tomcat 아래 에 두 번 방문 하 는 SESSION ID 는 달라 집 니 다.
다른 Tomcat 을 방문 한 후 같은 Tomcat 을 다시 방문 할 때 도 SESSION ID 가 달라 집 니 다.
상기 상황 이 발생 한 원인 은 다음 과 같다.
4)통일 세 션 관리
다음은 웹 애플 리 케 이 션 의 세 션 을 Spring Session 으로 관리 해 보도 록 하 겠 습 니 다.
1)레 디 스 설치 및 오픈
문장 참조https://www.jb51.net/article/145704.htm
2)스프링 세 션 의존 도 추가
// Spring Session
"org.springframework.session:spring-session-data-redis:2.0.5.RELEASE",
// Redis
"io.lettuce:lettuce-core:5.0.4.RELEASE"
3)스프링 세 션 필터 설정웹.xml 에 Spring Session 에서 제공 하 는 필 터 를 설정 합 니 다.이 필 터 는 Tomcat 에서 생 성 된 SESSION 을 Redis 에 저 장 된 SESSION 으로 대체 합 니 다.
<!-- Spring Session -->
<!-- WEB Tomcat SESSION Redis SESSION -->
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4)SpringSession/Redis 설정Spring 프로필 에 Spring Session 설정 과 Redis 설정 추가
beans {
xmlns context: "http://www.springframework.org/schema/context"
//
context.'annotation-config'()
// Spring Session
// Web.xml Spring Session
// Tomcat Session Redis Session
sessionConfig(RedisHttpSessionConfiguration)
// Redis
// 6379
lettuce(LettuceConnectionFactory)
}
5)테스트프로젝트 를 시작 하고 여러 번 방문http://localhost:88/sessionid/get하 며 SESSION ID 를 방문 하 는 것 은 같 습 니 다.
동시에 Redis 에 도 현재 SESSION 의 기록 이 나 타 났 다.
Spring Session 을 사용 한 후 클 러 스 터 에 있 는 WEB 애플 리 케 이 션 을 방문 할 때 SESSION 처리 과정:
이때 우 리 는 SESSION 을 통일 적 으로 관리 하 는 것 을 실현 했다.어떤 TOMCAT 를 방문 하 더 라 도 똑 같은 SESSION 을 찾 을 수 있다.
우리 의 응용 이 클 러 스 터 를 한 후에 SESSION 을 통일 적 으로 관리 하 는 것 은 필수 적 인 일이 다.SESSION 을 통일 적 으로 관리 하 는 방식 이 매우 많다.본 고 는 그 중의 한 가지 방식 일 뿐이다.학생 들 에 게 SESSION 을 통일 적 으로 관리 하 는 중요성 과 그의 기본 원 리 를 이해 하 게 하 는 데 중심 을 둔다.
예제 코드 주소:https://github.com/atd681/alldemo
예제 항목 이름:atd 681-springsession
총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 SpringSession+Redis 가 클 러 스 터 세 션 공 유 를 실현 하 는 방법 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.