이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 2945|회답: 0

Nginx 부하 분산은 백엔드 SESSION 단일 지점 문제를 해결합니다

[링크 복사]
게시됨 2023. 1. 10. 오후 8:38:39 | | | |
요구사항: Nginx를 사용해 리버스 프록시를 구축하고, 모든 요청을 스케줄링하는 역할을 하며, 백엔드는 ASP.NET MVC가 개발하고 여러 서버에 배포하여 백엔드 클러스터를 형성합니다세션 정보는 공유할 수 없어 일부 요청이 제대로 처리되지 않을 수 있습니다。 다음과 같은 문제들이 발생할 것입니다:





ASP.NET 웹사이트는 다음과 같이 언급할 수 있습니다:

asp.net 세션 공유 (StateServer를 통해)
https://www.itsvse.com/thread-6613-1-1.html

. 넷 분산 아키텍처: Redis 기반 세션 공유
https://www.itsvse.com/thread-5189-1-1.html

일반적으로 사용되는 해법은 다음과 같습니다:

SESSION을 저장하려면 데이터베이스를 사용하세요

각 서버가 동일한 세션을 사용해야 하므로 세션을 같은 데이터베이스에 저장할 수 있습니다. 접근할 때마다 데이터베이스에 들어가 이 세션이 존재하는지, 세션이 만료되었는지 확인한 후 여러 서버의 세션을 동기화할 수 있습니다;

장점:이 방법은 간단하고 편리하며 시작하기도 쉽습니다;

결점:세션을 동기화하기 위해 데이터베이스를 사용하면 데이터베이스의 IO가 증가하고 데이터베이스의 부담이 증가합니다. 동시에 각 접근은 요청을 가로채고 데이터베이스를 조회해야 하므로 추가 접근 계층과 데이터베이스 세션 시간 낭비가 발생합니다.


Memcache나 Redis와 같은 캐싱 메커니즘을 사용하여 SESSION을 저장하세요

memcache나 redis와 같은 분산 캐싱 메커니즘을 사용해 세션 데이터를 저장하는 것은 많은 대규모 프로젝트에서 부하 분산 및 동기식 세션에 인기 있는 해결책입니다. 이 프로젝트의 원리는 memcache 또는 redis 캐시를 같은 장소에 사용하고, 사용자가 로그인하면 세션이 캐시에 저장되며, 프로젝트의 어느 서버에 접근하든 세션 캐시가 같은 장소에서 얻어져 세션 동기화가 쉽게 이루어진다는 점입니다;

장점:캐시를 사용해 세션을 동기화하는 것은 데이터베이스에 부담을 주지 않으며, 세션의 존재 여부를 수동으로 판단할 필요도 없어 일부 비즈니스 로직을 없앨 수 있습니다.

결점:멤캐시 또는 레디스는 메모리를 여러 저장 블록 명세로 나누며, 크기가 있는 블록도 존재합니다. 이는 멤캐시나 레디스가 메모리를 완전히 활용하지 못해 메모리 단편화를 유발하며, 저장 블록이 부족하면 메모리 오버플로우도 발생합니다.

Nginx의 ip_hash 패턴을 활용하세요

이 기법은 세션 키핑이라고도 하며, nginx에서 다음과 같은 ip_hash 기술을 가능하게 합니다특정 IP 주소로부터의 요청은 동일한 백엔드 애플리케이션 서버에 핀 고정됩니다이 IP를 가진 클라이언트와 백엔드가 안정적인 세션을 구축할 수 있도록 합니다.

(하지만 사업자의 네트워크가 더 변동성이 크고 불안정할 경우,이그레스 IP는 동적입니다네, 이 방법에는 문제가 있을 수 있습니다. )

테스트 방법은 도커를 기반으로 두 개의 사이트를 여는 것입니다./data/testsite/a와 /data/testsite/b 디렉터리 아래에 새 index.html 파일을 만들어야 합니다, 명령어는 다음과 같습니다:

아래에 표시된 브라우저를 통한 접근:



ip_hash 기술을 사용하지 않고 Docker를 기반으로 새로운 nginx 컨테이너를 생성하면, 아래 그림과 같이 요청이 서로 다른 백엔드 서버로 전송될 수 있습니다:



ip_hash 기술을 사용하여 다음과 같은 구성으로 새로운 /data/testsite/nginx.conf 파일을 생성합니다:

도커 시작 명령은 다음과 같습니다:




쿠키 기반 세션 유지는 고정 모듈에서 확인할 수 있으나 생략되었습니다

Nginx 구성:하이퍼링크 로그인이 보입니다.

(끝)




이전의:【실질적 행동】Docker를 사용해 Gitlab 개인 저장소를 구축하세요
다음:IIS URL 리라이트 모듈 규칙 해제
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com