ASP.NET 분산 세 션 을 통 해 성능 향상

7136 단어 분포 식Session
세 션 을 사용 하고 있다 면 고성능 확장 가능 한 ASP.NET 사 이 트 를 구축 하려 면 분포 식 세 션 구 조 를 해결 해 야 합 니 다.단일 서버 의 세 션 처리 능력 이 곧 성능 병목 이 발생 하기 때 문 입 니 다.이런 문 제 는 세 션 동기 화 라 고도 합 니 다.마이크로소프트 는 자신의 분포 식 Session 솔 루 션 을 가지 고 있 습 니 다.그것 이 바로 Session State Server 입 니 다.참고 할 수 있 습 니 다.
ASP.NET Session State Partitioning  http://blog.maartenballiauw.be/post/2008/01/23/ASPNET-Session-State-Partitioning.aspx  
ASP.NET load balancing and ASP.NET state server  http://blog.maartenballiauw.be/post/2007/11/ASPNET-load-balancing-and-ASPNET-state-server-(aspnet_state).aspx  
그러나 본 고 는 하나의 방안 을 바 꾸 려 고 한다.그것 은 바로 Memcached 를 사용 하여 분포 식 SESSION 의 구조 에 도착 하 는 것 이다.Memcached 는 분포 식 캐 시 서버 로 서 사이트 건설 에 광범 위 하 게 응용 되 었 다.
 
1.Session 의 메커니즘
세 션 은 사용 자 를 대상 으로 하 는 것 이 고 브 라 우 저 를 대상 으로 하 는 것 으로 이해 할 수 있 습 니 다.브 라 우 저가 ASP.NET 웹 페이지 를 처음 방 문 했 을 때(웹 페이지 가 session 기능 을 닫 지 않 았 음)클 라 이언 트 에 다음 과 같은 HTTP 헤드 를 보 냅 니 다.
image
브 라 우 저 는 위의 HTTP 헤드 를 받 은 후 이 유일한 SESSIONID 를 자신의 COOKIE 에 저장 합 니 다.브 라 우 저가 서버 에 다시 접근 을 요청 할 때 요청 HTTP 헤더 에 다음 과 같은 표 지 를 추가 합 니 다.이 SESSIONID 가 바로 위의 SESSIONID 입 니 다.
http://www.cnblogs.com/fish-li/archive/2011/07/31/2123191.html
브 라 우 저 와 서버 간 에는 이러한 메커니즘 을 통 해 사용자 세 션 을 확보 하 는 것 이다.
클 라 이언 트 브 라 우 저 에서 쿠키 를 사용 하지 않 으 면 어떻게 되 는 지 알 수 있 습 니 다.브 라 우 저 Set-Cookie 를 새로 고 칠 때마다 다 르 고 요청 헤더 에 쿠키 표시 가 나타 나 지 않 습 니 다.이 럴 때 세 션 이 효력 을 잃 었 다 는 것 을 알 게 될 것 입 니 다.(물론 마이크로소프트 는 이러한 상황 을 방지 하기 위해 session State 에 cookieless="true"를 설정 하고 URL 로 sessionid 를 전달 할 수 있 습 니 다.)
2:Memcached Providers
제 가 사용 하 는 Memcached 클 라 이언 트 는 Memcached Providers 입 니 다.다운로드 가 끝나 면 Memcached Providers 가 분포 식 Session 에 대한 지원 기능 을 제공 한 것 을 발견 할 수 있 습 니 다.만약 당신 이 아직 Memcached Providers 를 사용 하지 않 는 다 면,이 글 을 참고 하 세 요imageMemcached Providers 가 제공 하 는 예 는 SESSION 을 데이터베이스 에 직접 저장 하 는 것 입 니 다.우 리 는 설정 을 통 해 SESSION 지원 을 분포 식 SESSION 메모리 에 저장 할 수 있 습 니 다.즉,다음 dbType 을 SQL 에서 none 으로 수정 할 수 있 습 니 다.
Memcached Tip 1:Memcached 공급 자 사용 하기
Memcached Providers 가 제공 하 는 분포 식 Session 을 사용 하 는 것 은 특별한 점 이 없습니다.Memcached Providers 가 제공 하 는 Session State Provider 형식 은 ASP.NET 의 Session State Store Provider Base 라 는 추상 적 인 클래스 를 실현 하기 때 문 입 니 다.설정 파일 에 Session 의 처리 클래스 가 Session State Provider 라 고 지정 되 어 있 기 때문에 ASP.NET 은 클 라 이언 트 의 요청 을 받 은 후에모든 SESSION 을 자각 적 으로 Session State Provider 로 처리 합 니 다.바로 이 클래스 입 니 다.SESSION 을 Memcached 에 읽 고 저장 합 니 다(SQL 이 설정 되 어 있 으 면 SQLSERVER 데이터베이스 에 동기 화 됩 니 다).
SESSION 의 설정 과 읽 기 는 전통 과 다 를 바 가 없습니다.읽 기:
      Session["sname2"] = "sluminjxxi";
      Session.Timeout = 2;
취하 다
 
SQL 설정
전통 적 인 SESSION 의 단점 은 dbType 만 none 으로 설정 할 때 존재 합 니 다.만약 Memcached 의 메모리 가 상한 선 에 도 달 했 을 때 어떻게 합 니까?Memcached 는 LRU 탈락 알고리즘(가장 오래 사용 되 지 않 음)을 사용 합 니 다.여기 서 우 리 는 이 알고리즘 이 Memcached 내부 에서 어떤 메커니즘 인지 자세히 연구 할 필요 가 없습니다.우 리 는 메모리 가 부족 할 때 SESSION 시간 이 되 지 않 아 도 Memcached 가 그것 을 제거 할 수 있다 는 것 만 알 아야 합 니 다.그래서 보험 의 방법 은 Memcached 에 SQLSERVER 의 지속 적 인 저장 을 더 하 는 것 이다.캐 시 에 명중 하면 캐 시 를 직접 가 져 옵 니 다.캐 시 에 명중 하지 않 으 면 데이터베이스 에 다시 확인 하 십시오.물론 성능 손실 을 가 져 올 수 있 지만 더 안전 한 방법 이다.
Memcached Providers 가 제공 하 는 다운로드 파일 에서 SESSION 을 초기 화 하 는 스 크 립 트 를 제공 합 니 다.정확하게 실행 하면 다음 표 tblSessions 와 몇 가지 저장 과정 을 생 성 합 니 다.
image
tblSessions 는 단독 Session 을 저장 합 니 다.다음 과 같 습 니 다.
image
 
넷 째:Memcached Providers 의 BUG
현재 Memcached Providers(1.2 버 전)에서 Session State Provider(29520-TRUNK)에 관 한 BUG(codeplex 에 제출 되 었 습 니 다.다음 버 전 은 수정 할 수 있 을 것 이 라 고 믿 습 니 다)가 있 습 니 다.만약 우리 가 SESSION 의 실효 시간 을 테스트 한다 면,한 번 의 리 셋 을 거 친 후에 영원히 20 분(즉,기본 값)이라는 것 을 발견 할 수 있 습 니 다.이것 은 Release ItemExclusive 라 는 리 셋 방법 에서 비롯 되 었 습 니 다.(이 방법 은 세 션 데이터 저장 소 에 있 는 항목 의 잠 금 을 해제 하 는 데 사 용 됩 니 다)세 션 의 재 저장 에 만 료 시간 을 추가 하지 않 았 습 니 다.다음 과 같 습 니 다.
image
주석 이 떨 어 진 것 은 Memcached Providers 가 제공 한 소스 코드 이 고 정확 한 것 은 제 가 수정 한 이전 것 입 니 다.수 정 된 DLL 을 사용 하여 모든 것 이 원만 해 졌 습 니 다.
 
5.데이터베이스 로 SESSION 을 저장 하 는 확장 가능 한 문제
방 문 량 이 계속 증가 함 에 따라(물론 이 정도 면 사이트 가 성공 적 으로 만 들 었 다 는 것 을 의미한다.대부분의 사 이 트 는 이 단 계 를 고려 할 필요 가 없다)우리 가 Memcached 를 캐 시 로 사용 하 더 라 도 단일 한 SQLSERVER 를 사용 하여 SESSION 을 저장 하 는 것 은 아직도 성적 인 문 제 를 가 져 왔 다.이런 상황 에서 우 리 는 데이터 베이스 에 대한 디자인 은 수평 구역 의 구 조 를 사용 할 수 있다.즉,어떤 알고리즘(SESSIONID 나 사용자 이름 등에 따라)에 따라 SESSION 을 다른 데이터베이스 에 저장 할 수 있 습 니 다.이 럴 때,만약 우리 가 여전히 Memcached Providers 를 사용한다 면,원본 코드 를 좀 더 수정 해 야 합 니 다.원래 단일 SQLSERVER 서버 를 지원 하고,프로 그래 밍 은 여러 서버 를 지원 합 니 다.물론 SQLSERVER 가 마음 에 들 지 않 으 면 mysql,mongodb,사용자 정의 KEY-VALUE 프레임 워 크 등 으로 수정 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기