NHibernate는 데이터베이스 프로그래밍을 단순화하는 것을 목표로 하는 .NET 애플리케이션을 위한 인기 있는 객체 관계 매핑(ORM) 솔루션입니다. 따라서 많은 트래픽이 많은 애플리케이션에서 이를 사용합니다. 불행히도 이러한 애플리케이션은 데이터베이스 확장성 병목 현상에 직면합니다. 이 문제를 해결하기 위해 클라이언트 애플리케이션에 캐싱 인프라(메모리 내 캐시 스토어)를 제공하여 요청 부하가 너무 높아 데이터베이스가 고갈되는 것을 방지합니다. 이러한 유형의 캐싱에는 1차 및 2차 캐시가 포함됩니다.
주요 요점
세션 격리 문제를 해결합니다: 단일 세션으로 제한되는 기본 1단계(L1) 캐시와 달리, 분산형 2단계 캐시는 모든 사용자 세션과 애플리케이션 인스턴스에서 데이터를 공유합니다.
선형 확장성을 지원합니다: 캐시를 분산 클러스터로 이동하면 NHibernate 애플리케이션은 단일 서버의 리소스에 제한받지 않고 캐시 서버를 추가하여 증가하는 트랜잭션 부하를 처리할 수 있습니다.
데이터 일관성을 보장합니다: 분산형 L2 캐시는 웹 팜 전체의 데이터를 실시간으로 동기화하여 로컬 비분산 캐싱을 사용할 때 발생하는 "오래된 데이터" 문제를 방지합니다.
데이터베이스 병목 현상을 줄여줍니다: 자주 액세스하는 객체를 공유 L2 계층에 저장하면 데이터베이스 트래픽을 최대 90%까지 줄여 애플리케이션 응답 시간을 크게 향상시킬 수 있습니다.
NHibernate 1차 캐시의 한계점은 무엇인가요?
NHibernate 1단계 캐시는 세션 객체와 연관된 기본 독립형(InProc) 캐시를 제공합니다. 이 캐시는 현재 세션에만 제한됩니다. 기본적으로 세션당 데이터베이스의 SQL 쿼리 수를 줄입니다.

그림 1: 1단계 NHibernate 캐시 워크플로
그러나 다음과 같은 몇 가지 제한이 있습니다.
- 각 프로세스에는 다른 캐시와 동기화되지 않은 개별적인 1차 캐시가 있어 데이터 무결성이 어려워집니다.
- 캐시 크기는 프로세스 메모리로 제한되며 확장할 수 없습니다.
- 작업자 프로세스를 재활용하면 캐시가 지워지고, 데이터를 다시 로드해야 하며 애플리케이션 성능이 저하됩니다.
NHibernate 2차 캐싱에 분산 캐시를 사용하는 이유는 무엇일까요?
NHibernate Second Level Cache는 Session Factory 레벨에 존재하며, 이는 여러 사용자 세션이 공유 캐시에 액세스할 수 있음을 의미합니다. 또한 플러그형 아키텍처를 갖추고 있어 애플리케이션이 코드를 변경하지 않고도 타사 분산 캐시를 통합할 수 있습니다. 따라서 관련 NCache 2차 캐시로서의 공급자.

그림 2: 2단계 NHibernate 캐싱 NCache
비교: NHibernate 1차 캐시 vs. 2차 캐시(L2)
| 제품 특장점 | NHibernate 1단계(L1) | NHibernate 2단계(L2) – 분산형 |
|---|---|---|
| 범위 | 세션별 (프로세스 내 메모리) | 애플리케이션 전체(클러스터 전체에서 공유) |
| 주기 | 수명이 짧음; 회의에서 처리됨 | 수명이 길고 여러 세션에 걸쳐 지속됩니다. |
| 데이터 공유 | 아니요, 각 세션이 자체적으로 데이터를 가져옵니다. | 예, 데이터는 모든 웹/앱 서버에서 공유됩니다. |
| 확장성 | 단일 서버 리소스로 제한됨 | 캐시 노드를 추가함으로써 선형적으로 확장 가능합니다. |
| 데이터베이스 트래픽 | 더 높음(세션당 반복 가져오기 횟수) | 훨씬 낮아짐 (데이터가 L2 캐시에 유지됨) |
| 이용 가능 여부 (Availability) | 프로세스가 재시작되면 데이터가 손실됩니다. | 높은 가용성; 데이터가 여러 노드에 복제됩니다. |
| 구성 | 기본적으로 활성화됨 | 외부 공급업체가 필요합니다(예: NCache) |
당신이 사용할 수 NCache 다음과 같은 방법으로 NHibernate 애플리케이션에서:
1 단계 : Web.config의 다음 구성을 추가합니다. 꼬리표:
|
1 2 3 4 |
<configSections> <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" /> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> |
2 단계 : 다음으로 설치 NCache 없는 애플리케이션용 NuGet 패키지 NCache Visual Studio 내의 패키지 관리자 콘솔에서 다음 명령을 사용하여 선택한 설치(Enterprise, Professional, Open Source)에 따라 설치합니다.
|
1 |
Install-Package NHibernate.NCache |
3 단계 : 구성 NCache cache.provider_class 속성을 추가하여 NHibernate의 2차 캐시 제공자로 만듭니다. .
4 단계 : 아래에 표시된 대로 cache.use_second_level_cache 속성을 True로 설정하여 애플리케이션에서 2차 캐시를 사용하도록 설정합니다.
|
1 2 3 4 5 6 |
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="cache.provider_class">Alachisoft.NCache.Integrations.NHibernate.Cache.NCacheProvider, Alachisoft.NCache.Integrations.NHibernate.Cache</property> <property name="cache.use_second_level_cache">true</property> </session-factory> </hibernate-configuration> |
5 단계 : 에 대한 애플리케이션 ID 지정 NCache NHibernate 공급자 NCacheNHibernate.xml.
|
1 2 3 |
<appSettings> <add key="ncache.application_id" value="myapp" /> </appSettings> |
6 단계 : 다음으로, 캐시 가능한 객체를 다음과 같이 구성할 수 있습니다.
|
1 |
<cache usage="read-write" region ="AbsoluteExpirationRegion"/> |
캐시 가능한 객체를 구성하는 데 사용되는 태그에 대해 자세히 알아볼 수 있습니다. 여기에서 확인하세요.
의 장점 NCache NHibernate 2차 캐시로서
또한, 사용 NCache 이런 방식으로 다음과 같은 장점이 있습니다.
- NCache 여러 프로세스와 서버를 동기화하여 캐시 일관성을 보장하고 데이터 무결성 문제를 방지합니다.
- OutProc 분산 캐시에서 애플리케이션 프로세스는 상태 비저장이므로 애플리케이션 프로세스 재활용은 캐시에 영향을 미치지 않습니다.
- NCache 모든 캐시 서버의 메모리를 한데 모아 사용자가 클러스터에 서버를 추가하여 캐시 크기를 수백 기가바이트, 심지어 테라바이트까지 늘릴 수 있도록 합니다.
- 더 큰 거래 부하를 처리하기 위한 선형 확장성 NCache 선형적으로 확장되며 데이터베이스 트래픽을 최대 90%까지 줄여줍니다.
- NCache InProc 클라이언트 캐시에 대한 지원을 제공합니다. 즉, 작업자 프로세스 내에서 실행되는 캐시 위의 캐시로, 애플리케이션 내에서 성능을 높일 수 있습니다.
맺음말
분산 캐시 사용 NCache NHibernate 30차 캐시를 사용하면 NHibernate를 사용하고 다중 서버 구성에서 애플리케이션을 실행할 수 있으므로 애플리케이션을 확장하고 높은 트랜잭션 부하를 처리할 수 있습니다. 완벽하게 작동하는 XNUMX일 평가판을 다운로드하고 등록하세요. NCache 기업에서 직접 사용해 보세요.
자주 묻는 질문 (FAQ)
질문: 분산형 L2 캐시를 사용하려면 NHibernate 소스 코드를 수정해야 합니까?
A: 아니요. 고성능 분산 캐시는 다음과 같습니다. NCache 플러그인 제공업체로 통합됩니다. 2차 캐시를 활성화하고 지정하기 위해 NHibernate 구성 파일(hibernate.cfg.xml)만 업데이트하면 됩니다. NCache 제공자 클래스.
질문: NHibernate 쿼리 캐싱을 분산 캐시와 함께 사용할 수 있습니까?
A: 네. 분산 L2 캐시를 활성화하면 NHibernate 쿼리 캐싱도 활성화할 수 있습니다. 이를 통해 비용이 많이 드는 데이터베이스 쿼리 결과를 분산 클러스터에 저장하여 데이터베이스 부하를 더욱 줄일 수 있습니다.
질문: 캐시 서버 중 하나에 장애가 발생하면 L2 캐시는 어떻게 되나요?
A: 1차 레벨 캐시나 로컬 InProc 캐시와는 달리, 분산 캐시는 다음과 같습니다. NCache 데이터 복제를 통해 높은 가용성을 제공합니다. 한 노드에 장애가 발생하더라도 클러스터의 다른 노드에서 데이터에 계속 액세스할 수 있으므로 NHibernate 애플리케이션의 성능 저하나 데이터 손실이 발생하지 않습니다.
질문: 웹 팜에 1차 캐시(L1 캐시)가 충분하지 않은 이유는 무엇입니까?
A: L1 캐시는 "프로세스 내" 캐시이며 특정 세션에 연결되어 있습니다. 웹 팜에서 사용자의 다음 요청이 다른 서버로 라우팅되면 L1 캐시는 해당 데이터를 공유할 수 없습니다. 분산형 L2 캐시는 팜 내 모든 서버에서 접근 가능한 통합 데이터 저장소를 제공합니다.
Q : 않습니다 NCache 데이터베이스와의 데이터 동기화를 지원합니까?
A : 네. NCache 이 기능은 데이터베이스 종속성(Database Dependency)과 같은 기능을 제공하여 SQL 데이터베이스에서 해당 데이터가 변경될 경우 캐시된 NHibernate 객체를 자동으로 무효화하거나 업데이트함으로써 L2 캐시가 항상 최신 상태를 유지하도록 합니다.






