온-프레미스 배포의 경우 ASP.NET 세션 상태는 세 가지 기본 제공 저장소 옵션(InProc, StateServer 및 SqlServer)과 네 번째 "사용자 지정" 옵션을 제공합니다. 처음 두 가지 기본 제공 옵션(InProc 및 StateServer)에는 확장성 문제가 있는 반면 SqlServer 옵션에는 성능 및 확장성 문제가 모두 있습니다.
훨씬 더 나은 전략은 "사용자 지정" 옵션과 플러그인을 사용하는 것입니다. NCache ASP.NET 세션 상태 공급자로. NCache .NET용으로 매우 빠르고 확장 가능한 오픈 소스 분산 캐시입니다. 런타임에 더 많은 캐시 서버를 추가하고 선형적으로 확장할 수 있도록 하여 극심한 트랜잭션 로드를 처리합니다. NCache 또한 지능형 캐시 복제를 제공하므로 웹 서버나 캐시 서버가 다운되는 경우 ASP.NET 세션 상태가 손실되지 않습니다.
우선, 사용하는 데 필요한 프로그래밍이 없습니다. NCache ASP.NET 세션 상태 공급자로. web.config를 수정하고 지정하기만 하면 됩니다. NCache 세션 상태 공급자(SSP)로. 자세한 내용 보기 ASP.NET 세션 상태 공급자 구성 NCache. 다음은 사용에 대한 몇 가지 이점입니다. NCache ASP.NET 세션 상태 공급자로:
고가용성: NCache 있다 자가 치유 피어 투 피어 클러스터링 아키텍처 단일 실패 지점이 없습니다. 이는 비즈니스 크리티컬 애플리케이션에 매우 중요한 ASP.NET 세션 상태 스토리지에 100% 가동 시간을 제공합니다.
선형 확장성: NCache 당신은 할 수 있습니다 캐시 클러스터를 선형으로 확장 클러스터에 더 많은 캐시 서버를 추가하여 이렇게 하면 트랜잭션 용량과 저장 용량이 늘어납니다. 즉, ASP.NET 세션 상태 저장소는 트랜잭션 로드가 많을 때 응용 프로그램에 병목 현상이 발생하지 않습니다.
지능형 세션 복제: NCache 풍부한 캐싱 토폴로지(Mirrored Cache, Replicated Cache 및 Partition-Replica Cache)를 제공합니다. 지능형 세션 복제 성능과 확장성을 타협하지 않습니다. 이렇게 하면 웹 서버 또는 캐시 서버가 다운될 때 세션 데이터가 손실되지 않습니다.
빠른 컴팩트 직렬화: NCache 를 제공합니다 빠른 컴팩트 직렬화 이는 일반 .NET 직렬화보다 빠르고 사용할 프로그래밍이 필요하지 않습니다. .NET 클래스를 등록하기만 하면 됩니다. NCache 직렬화 소스 코드를 생성하고 애플리케이션이 캐시에 연결할 때 런타임 시 메모리 내에서 컴파일한 다음 모든 후속 직렬화에 이 컴파일된 코드를 사용합니다.
NCache 여러 지역(데이터 센터)에서 실행되는 응용 프로그램의 ASP.NET 세션 상태를 관리하고 여러 지역에서 세션 일관성을 유지하는 두 가지 방법을 제공합니다. 그들은:
ASP.NET 세션 상태의 WAN 복제: NCache 를 제공합니다 브리지 토폴로지 전체 ASP.NET 세션 상태 저장소(분산 캐시)를 WAN을 통해 다른 지역(데이터 센터)에 복제할 수 있습니다. 이렇게 하면 세션이 항상 여러 지역(데이터 센터)에 존재합니다. 활성-수동(재해 복구용) 또는 활성-활성 모드에서 사용할 수 있습니다. 활성-활성에서는 여러 지역(데이터 센터) 간에 트래픽을 로드 밸런싱할 수도 있습니다. 이 모든 것은 구성 변경을 통해 수행됩니다.
다중 지역 ASP.NET 세션 상태: 대역폭 소비 비용 때문에 WAN을 통해 ASP.NET 세션 상태를 복제하지 않으려면 이것을 사용하도록 선택할 수 있습니다. 다중 사이트 ASP.NET 세션 상태 특징 NCache. 여기에서 ASP.NET 세션 상태는 사이트 간에 복제되지 않고 대신 생성 위치에 유지됩니다. 그러나 한 지역(데이터 센터)에서 다른 지역으로 트래픽을 이동하면 ASP.NET 세션 상태도 함께 이동합니다.
이를 통해 두 개 이상의 활성 영역(데이터 센터)을 가질 수 있고 대부분의 트래픽을 자체 데이터 센터로 유지하지만 원하는 경우 때때로 다른 데이터 센터로 오버플로할 수 있습니다. 또한 다른 데이터 센터에서 세션에 액세스할 수 있으므로 사용자를 방해하지 않고 하나의 데이터 센터를 중단할 수도 있습니다.
NCache ASP.NET 세션 상태 공급자는 모든 표준 ASP.NET 세션 상태 공급자 기능을 구현합니다. 또한 응용 프로그램의 복잡한 상황을 처리할 수 있는 다양한 고급 기능을 제공합니다.
앱 도메인에서 세션 공유: 여러 앱 도메인을 사용 중이고 각 앱 도메인에 대해 별도의 web.config 파일이 있는 경우 다음에서 동일한 값을 지정합니다. sessionAppId=>"NCacheApp1"
그러면 해당 앱 도메인 간에 세션이 공유됩니다. 다른 세션 앱 ID를 사용하는 경우 세션은 앱 도메인 간에 공유되지 않습니다.
오류 로깅: 웹 서버의 로그 파일에 오류 로깅을 활성화할 수 있습니다(INSTALL_DIR\NCache\log-files\SessionStoreProvider 폴더)를 지정하여 enableLogs = "true"
. 다음을 지정하여 Windows 이벤트 로그에 대한 오류 로깅을 활성화할 수도 있습니다. writeExceptionsToEventLog = "true"
.
표준 세션 잠금: 표준 ASP.NET 세션 잠금 동작은 세션이 잠긴 경우 해당 세션에 대한 다른 요청이 90초(구성 가능) 동안 대기하고 마지막에 강제로 세션 잠금을 해제하는 것입니다. 이 옵션을 다음과 같이 지정할 수 있습니다.
enableSessionLocking = "true" sessionLockingRetry = "-1" emptySessionWhenLocked = "false"
향상된 세션 잠금: 로봇이 데이터를 스크랩하고 동시에 수백 또는 수천 개의 요청에 대해 동일한 세션 ID를 사용할 수 있는 트래픽이 많은 ASP.NET 응용 프로그램이 있는 경우 90초 동안 기다리면 사용 가능한 모든 소켓이 묶일 수 있으므로 표준 세션 잠금 옵션을 사용할 여유가 없습니다. 대신 요청을 신속하게 반환하여 실패를 나타내기를 원합니다. 다음과 같이 지정할 수 있습니다.
enableSessionLocking = "true" sessionLockingRetry = "5" emptySessionWhenLocked = "false"
이렇게 하면 5초 간격으로 XNUMX번 재시도한 다음 실패를 나타내기 위해 빈 세션을 반환합니다. 여기에 예외를 던지는 것조차 비용이 많이 듭니다. 이것이 빈 세션이 구현되는 이유입니다. 이 동작은 원래 트래픽이 많은 항공사 웹사이트의 요청에 따라 구현되었습니다.