>  기사  >  운영 및 유지보수  >  세션 일관성 설계

세션 일관성 설계

大鹏
大鹏원래의
2021-06-25 18:09:37186검색

세션 일관성

세션이란

web-server는 동일한 브라우저에 접속하는 사용자에 대해 자동으로 세션을 생성하고 저장 기능을 제공할 수 있습니다. 일반적으로 사용자 로그인 정보는 세션에 저장됩니다.

세션 일관성 문제는 무엇인가요?

백엔드에 웹 서버가 하나만 있는 경우 모든 http 요청에 대해 올바른 세션을 찾을 수 있습니다. 문제는 고가용성을 충족하지 못한다는 점이다. 서버 한 대가 끊기면 끝난다. 중복성 + 장애 조치, 여러 웹 서버 배포 및 nginx가 다른 웹 서버로 라우팅됩니다. 모든 http 요청은 라우팅되며 동일한 서버로 라우팅된다는 보장이 없으므로 일관성 문제가 발생합니다.

세션 일관성을 해결하기 위한 일반적인 솔루션

일관적인 해시

가장 먼저 떠오르는 솔루션은 동일한 IP가 동일한 웹 서버에 속하도록 클라이언트 IP를 기반으로 해시하는 것입니다. userId, cityId 등 비즈니스 필드 기반의 해시를 사용하면 더욱 유연하게 사용할 수도 있습니다. 그러나 이는 단일성의 원칙을 파괴하고 게이트웨이와 비즈니스를 끈적하게 만드는 것이므로 꼭 필요한 경우가 아니면 사용하지 않는 것이 좋습니다. 장점: 캐시를 저장하고 수평으로 확장할 수 있습니다. 단점: 일부 서비스를 다시 시작하면 세션이 손실되어 일부 사용자가 다시 로그인하게 됩니다. 해시가 수평으로 확장되고 다시 해시 후 세션이 재배포되면 일부 사용자는 세션을 라우팅할 수 없습니다

세션 동기화

여러 웹 서버 간의 세션은 서로 동기화되므로 각 웹 서버에는 모든 세션 정보. 단점: 모든 세션을 포함하기 때문에 메모리에 따라 클러스터 수가 제한되고 확장이 제한됩니다.

클라이언트 저장소

로그인 정보는 클라이언트에 저장되며 각 요청에는 사용자 정보가 전달됩니다. 서버는 완전히 상태 비저장이며 확장이 쉽습니다. 장점: 서버 측에 스토리지가 필요하지 않습니다. 단점: 각 http 요청은 사용자 정보를 전달하므로 트래픽이 낭비되며, 쿠키는 너무 많은 정보를 저장할 수 없습니다.

백엔드 중앙 집중식 스토리지

웹 서버는 세션 정보를 저장하기 위해 통합 스토리지에 연결합니다. 후속 확장을 용이하게 하기 위해 Redis 클러스터에 저장하는 것이 좋습니다. 장점: 정보 유출 위험이 없으며, 수평 확장 시 데이터 손실이 없음, 단점: 추가 네트워크 요청이 추가되고, Redis를 쿼리하려면 비즈니스 코드를 수정해야 함.

위 내용은 세션 일관성 설계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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