>백엔드 개발 >PHP 튜토리얼 >분산 시스템의 세션 처리

분산 시스템의 세션 처리

WBOY
WBOY원래의
2016-07-29 08:58:221435검색

서버 독립 세션

아래 그림과 같습니다.
서버 독립적 세션에서는 각 사용자 요청이 동일한 응용 프로그램 서버에서 작동되어야 하며, 이를 위해서는 로드 밸런싱 서버가 사용자 요청을 매번 동일한 주소의 서버로 보내야 합니다.
첫 번째 사용자가 처음 접속하는 1번 서버는 로드 밸런싱 서버에 의해 사용자 세션 내내 1번 서버로 지정되어야 합니다. 다른 서버에서는 1번 사용자의 세션 정보를 저장하지 않습니다.

요즘 로드밸런싱 서버에는 일반적으로 이 기능(nginx)이 있습니다
Session 在分布式系统中的处理

그러나 다음과 같은 상황이 발생하면
Session 在分布式系统中的处理

이때 서버 1이 다운되면 로드 밸런싱 서버는 사용자 1을 서버 2 또는 3으로 리디렉션하지만 사용자는 서버 2와 3에 안전한 컨텍스트가 없으며 서버는 사용자에게 다시 로그인하도록 알립니다. 이 사용자 경험은 분명히 영향을 받을 것입니다. 그리고 사용자 데이터 손실이 발생할 가능성이 매우 높습니다.

각 서버가 모든 세션을 유지합니다

각 서버가 모든 사용자 세션을 유지합니다. 이는 애플리케이션 서버 간의 세션 동기화 문제와 관련이 있으며 실시간 요구 사항이 상대적으로 높습니다. 이 방법을 사용하면 다음 그림과 같이 위 서버의 독립 세션에서 발생하는 문제를 피할 수 있습니다.

Session 在分布式系统中的处理

장점

이 방법은 첫 번째 방법이 발생합니다. 이 경우 1번의 세션 정보는 2번과 3번 서버에도 저장됩니다. 로드 밸런싱 서버에 장애가 발생하여 1번 사용자를 2번과 3번 서버로 리디렉션하면, 서버는 사용자 번호 1의 보안 컨텍스트도 찾습니다. 다시 로그인할 필요 없이 계속 액세스할 수 있습니다.

단점

그러나 이 방법에도 단점이 있습니다. 즉, 애플리케이션 서버의 세션 동기화에 대한 실시간 요구 사항이 상대적으로 높고 추가적인 크로스 밴드 오버헤드가 발생한다는 것입니다. 세션이 멀리 있을 때 상황이 바뀌면 동기화가 필요합니다. 세션의 정보량이 상대적으로 크면 상당한 메모리를 소비하게 됩니다.

서버 공유 세션

서버 공유 세션 정보 :

Session 在分布式系统中的处理

장점

각 사용자의 세션 정보가 저장됩니다. 애플리케이션 외부의 다른 서버(데이터베이스 또는 KV 스토리지 서비스일 수 있음)에 저장하므로 애플리케이션 서버는 각 사용자의 세션 정보를 저장할 필요가 없으므로 많은 메모리 오버헤드가 절약됩니다.

서로 다른 애플리케이션 서버가 세션 정보를 사용해야 할 경우 공유 세션 서버로 이동하여 정보를 얻습니다.

이렇게 하면 로드 밸런싱 서버가 사용자를 고정 서버에 할당할 필요가 없고, 서버 간 세션 정보를 복사할 필요도 없습니다. 세션 정보가 변경되면 애플리케이션 서버가 해당 서버로 이동하게 됩니다. 공유 서버를 수정하려면 정보가 충분합니다.

단점

공유 서버에 더 의존하거나 공유 서버 클러스터에 문제가 발생하면 사용자에게 큰 영향을 미칩니다.

쿠키로 세션 데이터를 전송합니다.

쿠키에 사용자 정보를 저장하면 불안정한 요인을 제거할 수 있지만, 쿠키에는 여전히 보안상의 위험성이 숨어 있고, 쿠키에도 길이 제한이 있습니다.

').addClass('사전 번호 매기기').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

위 내용은 분산 시스템에서의 세션 처리에 대한 내용을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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