ASP.NET Core 확장 가능한 웹 애플리케이션을 구축하는 데 사용되는 오픈 소스 프레임워크입니다. 크로스 플랫폼 기능을 제공하며 마이크로 서비스 건축물. 그리고, 의 출현으로 .닷넷 6.0, 성능과 개발 경험 면에서 점점 더 좋아지고 있습니다. 그러나 진정한 잠재력을 가로막는 특정 병목 현상이 여전히 존재합니다.
이러한 병목 현상 중 하나는 데이터베이스 읽기 시간이며 이 병목 현상은 애플리케이션이 한 번에 수십만 명의 사용자에게 서비스를 제공해야 할 때 특히 두드러집니다. ASP.NET Core 세션 저장소는 메모리 내 데이터 저장소를 사용하여 이러한 문제를 완화하는 데 도움이 될 수 있습니다. 그러나 기본 세션 저장소 공급자에는 몇 가지 제한 사항이 있습니다. 이것들은:
- 세션 손실: 애플리케이션 서버가 다운되면 세션이 손실됩니다.
- 메모리 제한: 애플리케이션 프로세스의 메모리 공간에 데이터가 저장되기 때문입니다.
- 세션 복제 없음: 어떤 이유로 인해 트래픽이 다른 서버로 다시 라우팅되면 세션이 이월되지 않습니다.
- 고정 세션: 웹 팜 환경에서는 고정 세션을 사용해야 하므로 로드 밸런싱의 목적을 달성하지 못합니다.
다행히도 NCache 이 모든 문제와 그 이상을 해결하기 위해 여기 있습니다. 다음 섹션에서 더 자세히 살펴보겠습니다.
NCache 세부 정보 다운로드 NCache ASP .NET Core 세션 저장 전략
처음에 분산 세션 스토리지를 사용하는 이유는 무엇입니까?
정의에 따르면 HTTP는 상태 비저장 프로토콜입니다. 즉, 여러 요청에서 정보가 유지되지 않습니다. 타사 메커니즘은 일반적으로 정보를 전달하는 데 사용됩니다. 그러한 메커니즘 중 하나는 세션 스토리지입니다. ASP.NET Core 데이터를 캐시에 백업하는 세션 저장소를 제공합니다. 따라서 데이터베이스로 직접 이동하는 대신 응용 프로그램은 먼저 캐시에 정보가 저장되어 있는지 확인하고, 그렇다면 응용 프로그램에서 해당 정보를 반환하고 그렇지 않은 경우에만 데이터베이스를 쿼리합니다.
그러나 세션 데이터는 임시 데이터로 간주됩니다. 애플리케이션은 빈 세션 캐시에 관계없이 계속 작동해야 합니다. 세션 데이터는 성능 최적화가 필요한 경우에만 사용해야 합니다. ASP.NET Core 세션 캐싱을 위한 두 가지 옵션을 제공합니다.
이 두 옵션 모두 매우 빠르며 대부분 작업을 완료합니다. 그러나 기본 구현에는 동일한 단점이 있습니다. 둘 다 단일 실패 지점이 있는 독립 실행형 캐시를 제공하며 서버가 다운될 경우 데이터 복제 옵션이 없습니다. 많은 수의 사용자가 동시에 리소스를 요청하고 세션 데이터 손실이 선택사항이 아닌 미션 크리티컬 애플리케이션의 경우 분산 캐시를 사용하는 것이 좋습니다.
NCache?
NCache .NET에서 기본적으로 개발된 오픈 소스 인메모리 분산 캐시이며 .NET Core. 일부 타사 호스팅 플랫폼뿐만 아니라 로컬에서도 작동하도록 구성할 수 있습니다. 게다가, NCache 매우 적은 코드 변경으로 세션 저장을 위한 백업 저장소로 설정할 수 있으며 고유한 분산 특성으로 인해 다음 문제가 해결됩니다.
- 메모리 제한: 캐시 자체는 이제 실제 웹 응용 프로그램과 별도의 프로세스에 있으므로 더 이상 메모리 제한이 없습니다.
- 더 나은 신뢰성: 캐시 클러스터는 훨씬 더 나은 안정성을 달성하기 위해 완전히 별도의 시스템 세트에 있을 수도 있습니다.
- 캐싱 토폴로지: NCache 4 가지 다른 제공 캐싱 토폴로지. 확장성, 고가용성 또는 데이터 복제(메모리 사용 비용)를 우선시하는지 여부에 관계없이 요구 사항에 따라 둘 중 하나를 선택할 수 있습니다.
- 데이터 복제: 애플리케이션 서버가 나가더라도 세션 데이터는 안전하게 유지됩니다.
- 멀티-지역 세션 저장: NCache 이벤트 다중 지역 세션 공유 또한. 세션은 WAN을 통해 원활하게 복제됩니다. 따라서 사용자를 다른 위치로 다시 라우팅해야 하는 경우 해당 세션은 그대로 유지됩니다.
NCache 세션 저장을 위한 두 가지 전략을 제공합니다. 하나는 세션 스토리지 제공자 다른 하나는 NCache의 IDistributedCache 구현. 다음 섹션에서는 기술적인 세부 사항으로 이동합니다. NCache ASP의 세션 저장을 도울 수 있습니다..NET Core.
NCache 세부 정보 ASP .NET Core 세션 저장 전략 ASP.NET Core 캐싱
다음을 사용하는 세션 스토리지 NCache
설정 NCache 세션 저장을 위한 백업 저장소로서 매우 간단합니다. 에서 제공하는 두 가지 접근 방식을 살펴보겠습니다. NCache:
방법 1: 세션 저장소 공급자
이 방법을 사용하려면 다음을 설치해야 합니다. AspNetCore.세션.NCache NuGet 패키지. 이 패키지를 설치한 후 다음을 포함해야 합니다. Alachisoft.NCache.Web.SessionState
네임스페이스 Startup.cs 응용 프로그램 파일을 추가하고 NCache 서비스 컬렉션의 서비스로:
1 2 3 4 5 6 7 8 9 10 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheSession(configuration => { configuration.CacheName = "demoCache"; configuration.EnableLogs = true; configuration.SessionAppId = "demoApp"; configuration.SessionOptions.IdleTimeout = 5; configuration.SessionOptions.CookieName = "AspNetCore.Session"; }); } |
그게 다야, 당신은 성공적으로 설정했습니다 NCache 세션 저장소 공급자로. 에 대한 자세한 내용은 NCache, 당신은 볼 수 있습니다 NCache 프로그래머 가이드.
방법 2: IDistributedCache 구현
이미 구현을 사용하고 있는 경우 IDistributedCache
, 이 접근 방식을 사용할 수 있습니다. 그냥 설치 NCache.Microsoft.Extensions.Caching NuGet 패키지. 그리고 ASP에 대한 서비스를 구성할 때.NET Core 응용 프로그램은 다음 코드를 추가하기만 하면 됩니다.
1 2 3 4 5 6 7 8 9 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheDistributedCache(configuration => { configuration.CacheName = "demoCache"; configuration.EnableLogs = true; configuration.ExceptionsEnabled = true; }); } |
그리고 짜잔, 이제 사용할 수 있습니다. NCache의 구현 IDistributedCache
.
다음을 사용하는 다중 영역 세션 저장소 NCache
다양한 캐싱 토폴로지에서 제공하는 데이터 복제 기능 외에도 NCache 또한 별도의 캐시 클러스터 간에 완전한 세션 공유를 제공합니다. 이는 지역마다 다른 데이터 센터가 있고 불가피한 상황으로 인해 트래픽을 한 지역에서 다른 지역으로 다시 라우팅해야 하는 상황에서 매우 유용할 수 있습니다.
다른 지역 간에 세션 공유를 쉽게 설정할 수 있습니다. 한 지역의 세션은 WAN을 통해 다른 지역으로 원활하게 복제됩니다. 세션 데이터는 기본 캐시에서 하나 이상의 보조 캐시로 복제됩니다. 다중 지역 세션 공유를 사용하려면 다음을 사용해야 합니다. NCache 세션 저장소 공급자 및 다음 변경 사항만 귀하의 Startup.cs 파일 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheSession(configuration => { configuration.CacheName = "LondonCache"; configuration.EnableLogs = true; configuration.SessionAppId = "demoApp"; configuration.SessionOptions.IdleTimeout = 5; configuration.SessionOptions.CookieName = "AspNetCore.Session"; configuration.EnableLocationAffinity = true; configuration.AffinityMapping = new CacheAffinity[] { new CacheAffinity { CacheName = "LondonCache", CachePrefix = "LDNC" }, new CacheAffinity { CacheName = "NewYorkCache", CachePrefix = "NYKC" }, new CacheAffinity { CacheName = "TokyoCache", CachePrefix = "TKYC" } }; }); } |
참고: 명심해야 할 한 가지는 다중 지역 세션 공유를 사용하려면 위치 선호도를 활성화해야 한다는 것입니다.
캐시 이름은 configuration.CacheName
필드가 기본 캐시가 되는 반면 나머지 모든 캐시는 configuration.AffinityMapping
보조 캐시가 됩니다. 그만큼 CachePrefix
이 접두사는 세션 ID에 연결되므로 중요합니다. 이 접두사는 세션 데이터가 저장되는 위치를 식별합니다. 따라서 요청이 캐시에 도착하고 캐시 접두사가 현재 캐시의 접두사와 다른 경우 세션 데이터에 대해 실제 캐시에 연결됩니다(데이터가 아직 없는 경우). 현재 캐시에 세션 데이터가 있으므로 모든 후속 요청은 이제 이 캐시에서 로컬로 제공됩니다.
NCache 세부 정보 ASP .NET Core 세션 저장 전략 다중 지역 세션 공유
결론
이 블로그에서 세션 스토리지가 ASP의 강력한 기능인 이유를 살펴보았습니다..NET Core 응용 프로그램의 성능을 획기적으로 향상시키는 방법. 우리는 또한 어떻게 NCache 분산 캐싱의 도움으로 세션 스토리지를 크게 향상시킬 수 있으며 더 나은 안정성이 필요한 경우 항상 선택할 수 있습니다. NCache최고 수준의 사용자 경험을 위한 의 다중 지역 세션 공유 기능.