>백엔드 개발 >PHP 튜토리얼 >통합 세션 공유 문제

통합 세션 공유 문제

小云云
小云云원래의
2017-11-09 13:27:381233검색

2.1 클라이언트 쿠키 저장

소개

쿠키 암호화 방식으로 클라이언트 측에 저장되는 장점은 세션 정보가 클라이언트 측에 기록된 후 서버 측에 전달되는 부담을 줄이는 것입니다. 브라우저를 통해 다시 서버에 접속합니다. 클러스터 내 두 서버에서 두 요청이 완료되더라도 세션 공유에 도달할 수 있다.

이 솔루션의 장점은 세션 정보를 서버 측에 저장할 필요가 없어 서버에 대한 부담이 크게 줄어든다는 것입니다. 또 다른 장점은 단일 실패 지점을 방지하여 클러스터의 여러 서버에서 세션의 두 개 이상의 요청을 완료할 수 있다는 것입니다. 현재 Taobao는 이 솔루션을 채택하고 있습니다.

몇 가지 단점이 있습니다. 첫째, 쿠키를 전달할 때 http 정보 헤더의 길이 제한으로 인해 쿠키에 사용자 정보의 일부만 저장할 수 있습니다. 둘째, 세션 정보를 암호화하려면 추가 작업이 필요합니다. 이런 방식으로 웹사이트의 2차 도메인 이름을 방문할 때마다 쿠키 형태로 저장된 세션 정보가 http 정보 헤더에 포함되어 최종적으로 일정량의 대역폭을 차지하게 됩니다. 이 방법은 클라이언트에 정보를 저장하므로 사용자는 완전히 쿠키를 비활성화하거나 쿠키를 삭제할 수 있지만 이는 그다지 신뢰할 수 없습니다.

2.2 서버 간 세션 동기화

소개

마스터-슬레이브 서버 아키텍처를 사용하여 사용자가 마스터 서버에 로그인하면 세션 정보가 스크립트 또는 데몬 프로세스를 통해 각 슬레이브 서버로 전송됩니다. 사용자가 다른 슬레이브 서버에 접속하면 세션 정보를 읽을 수 있습니다.

단점: 느린 속도, 불안정성 등. 또한 세션 정보 전송이 마스터->슬레이브 단방향인 경우 몇 가지 위험이 있습니다. 예를 들어 메인 서버가 다운되면 다른 서버가 이를 얻을 수 없습니다. 세션 정보

2.3 클러스터 사용 세션 통합 관리

소개

세션 공유 정보를 저장하는 클러스터를 제공합니다. 다른 응용 프로그램은 세션 정보를 세션 클러스터 서버 그룹에 저장합니다. 응용 프로그램 시스템에 세션 정보가 필요할 때 세션 클러스터 서버에서 직접 읽습니다. 현재 대부분은 Session을 저장하기 위해 Memcache를 사용합니다.

현재 Memcache를 사용하여 세션 공유를 구현하는 두 가지 인기 있는 구현 솔루션이 있습니다. 이 두 가지 솔루션을 주로 아래에 소개합니다.

2.3.1 필터 메소드 사용

이 메소드는 필터 메소드를 사용하여 httpRequest 객체를 다시 패키징하고 memcached 클라이언트를 추가합니다. 이 방법의 장점은 사용이 간단하고 필터를 구성하기만 하면 된다는 것입니다. , 클라이언트에서 구현되기 때문에 구성이 유연하고 서버 독립적입니다. 서블릿을 지원하는 모든 컨테이너에 배포할 수 있습니다.

2.3.2 memcached-session-manager (MSM)

memcached-session-manager는 일반적으로 MSM으로 알려져 있으며 분산 Tomcat 환경에서 세션 공유 문제를 해결하는 데 사용되는 오픈 소스 솔루션입니다. 구현 원리는 tomcat 플러그인으로 서버에 배포하고, 서블릿 컨테이너 코드에서 세션 관련 코드를 수정한 뒤 memcached에 연결하고, memcached에서 세션을 생성 및 업데이트하는 것이다. MSM에는 다음 기능이 있습니다.

Tomcat6, Tomcat7 지원

고정 및 비고정 세션 지원

단일 실패 지점 없음

Tomcat 장애 조치 처리 가능

memcached 장애 조치 처리 가능

플러그인 세션 직렬화

허용 응답 속도 향상을 위한 세션 비동기 저장

세션이 수정된 경우에만 세션이 memcached에 다시 기록됩니다

JMX 관리 및 모니터링

MSM(memcached-session-manager)은 Value(Tomcat)를 사용하여 tomcat6 및 tomcat7을 지원합니다. 밸브) 요청을 추적합니다. 요청 요청이 도착하면 memcached에서 세션이 로드됩니다. 요청 요청이 끝나면 Tomcat 세션이 memcached로 업데이트되어 세션 공유 목적을 달성합니다.

장점: 개발자는 더 이상 세션 공유 문제를 고려할 필요가 없으며 프로그램 개발에 집중하고 일반 세션처럼 사용할 수 있습니다. 코드를 명시적으로 작성할 필요는 없으며 이를 사용하도록 서버를 구성하기만 하면 됩니다.

단점: 세션 정책을 변경하려면 각 서버의 서블릿 컨테이너를 다시 배포해야 합니다.

자세한 내용은 다음을 참조하세요. http://code.google.com/p/memcached-session-manager/

2.4 데이터베이스에 세션 유지

소개

이 세션 공유 방법은 세션 정보를 데이터베이스를 사용하는 경우 다른 응용 프로그램은 데이터베이스에서 세션 정보를 확인할 수 있습니다. 현재 이 솔루션을 사용할 때 사용되는 데이터베이스는 일반적으로 mysql입니다.

세션을 공유하기 위해 데이터베이스를 사용하는 솔루션에는 특정 실용성이 있지만 다음과 같은 단점도 있습니다. 첫째, 세션의 동시 읽기 및 쓰기가 데이터베이스에서 완료되며, 두 번째로 MySQL의 경우 상대적으로 높은 성능이 필요합니다. 세션 제거 논리 코드를 추가로 구현합니다. 즉, 데이터베이스 테이블의 세션 정보를 정기적으로 업데이트 및 삭제하므로 작업 부하가 증가합니다.


2.5 사용자의 세션이 하나의 서버에서 정기적으로 완료될 수 있도록 로드 밸런싱 서버를 구성합니다. 세션 정보를 슬레이브에 백업합니다. 한 서버가 다운된 후 사용자의 요청은 밸런싱 서버를 통해 클러스터의 다른 서버로 투명하게 전달됩니다. 이때 백업 세션 정보는 슬레이브에서 읽어야 합니다. .


위 내용은 통합 세션 공유 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.