2011-01-25 2 views
3

우리는 App_Code 내의 정적 변수에 저장된 많은 양의 캐시 된 객체가있는 웹 사이트를 운영합니다. App_Code 변경 사항을 프로덕션 웹 서버로 전송할 때마다 IIS 풀이 재사용되고 캐시가 플러시됩니다. 그러나 .aspx 및 .aspx.cs 파일의 변경 내용을 푸시 할 때 캐시를 플러시하지 않습니다.나머지 폴더와 별도로 컴파일되는 App_Code 섹션을 가질 수 있습니까?

App_Code에서 참조 할 수 있도록 하루에 여러 번 업데이트되는 클래스가 필요합니다. IIS를 순환시키고 캐시를 플러시하지 않고 하루에 여러 번 업데이트하거나 App_Code 외부에서 클래스를 App_Code 외부에서 참조 할 수있는 기능을 제공하는 App_Code 섹션을 원합니다.

내 문제에 맞는 해결책이 있습니까?

+0

왜 하루에 여러 번 코드 변경을 푸시해야합니까? –

+1

앱 풀 재활용에 대한 걱정은 무엇입니까? 첫 페이지로드가 발생하는 데 오랜 시간이 걸립니까? 클라이언트 세션 변수를 잃어 가고 있습니까? –

+1

"바이너리"가 매일 이상으로 자주 수정되어야한다는 사실 때문에 바이너리 자체에 포함되어서는 안되는 데이터를 저장하는 데 익숙해지고 있다고 느낍니다. App_code (또는 그 문제에 대한 bin 디렉토리)에는 그렇게 할 수있는 메커니즘이 없습니다. 별도의 DLL에 저장하더라도 AppDomain을 언로드하지 않고 이전 DLL을 언로드 할 수있는 방법이 없습니다. 즉, 논리 또는 데이터인지 여부에 관계없이 XML 또는 다른 형식의 외부 업데이트를 고려해야합니다. –

답변

4

App_Code로 업데이트하거나/bin/항상 응용 프로그램 풀을 재활용합니다. .aspx.cs 파일 업데이트가 응용 프로그램 풀을 재활용하지 않는 배포 시나리오가 있다고 말하면 페이지 유형 자체를 참조 할 수 있다면 코드를 .aspx로 옮길 수 있습니다. cs 파일을 사용하면 재활용을 방지 할 수 있습니다. 그것은 추한 선택일지도 모른다.

한 가지 제안은 매일 필요한 소스 코드 업데이트 횟수를 줄이기 위해 디자인을 수정하는 것입니다. 아마도 XML 또는 데이터베이스 저장소를 사용하고 응용 프로그램을 좀 더 일반적이고 덜 바이너리 업데이트가되도록 설계하십시오.

또는 응용 프로그램을 몇 개의 작은 가상 응용 프로그램으로 분할하십시오. 이 작업을 수행하는 데 더 많은 노력이 필요할 수 있지만,이 경우 응용 프로그램이보다 구획화되어 있으면 모든 배포마다 전체 응용 프로그램을 재활용 할 필요가 없습니다. 배포의 영향을받은 모듈 만 재활용하면됩니다.

또 다른 제안은 클러스터 된 서버 아키텍처를 설정하는 것입니다. 예약 된 업데이트가 수행되는 동안 다른 노드 만 활성 상태로 유지하고 한 번 노드 업데이트가 완료되면 응용 프로그램 풀이 재활용 된 후 두 번째 노드로 업데이트를 롤아웃하는 배포를 하나의 클러스터 노드에 적용하도록 예약합니다.

또 다른 제안은 가능한 경우 배포 시간을 사용량이 적은 시간으로 변경하는 것입니다.

많은 개발 변경 사항이 발생했기 때문에 자주 업데이트가 발생합니까?

+0

+1, 좋은 제안이 여기에 있습니다. –

+0

기본적으로 우리는 이러한 일련의 수업에 핫 픽스를 수행 할 수 있는지 걱정합니다. 그들은 "핵심"클래스는 아니지만 "핵심"클래스에서 참조 할 수 있기를 바랍니다. 말이 돼? –

+0

흠, 이러한 비 핵심 클래스, 인터페이스 또는 구현 세부 정보에서 일반적으로 변경되는 사항 (즉 공용 인터페이스가 동일하게 유지되도록)? 아마도 WCF/웹 서비스 프록시 계층이 갈 수있는 방법 일 수 있습니다. 이것은 비 핵심 클래스가 핵심 클래스에 종속되지 않았 으면 비 핵심 클래스에 대한 외관이 될 수 있습니다. WCF/웹 서비스 프록시 계층은 별도의 프로세스 공간으로 분할되면이를 완화합니다. –

2

또 다른 각도는 HttpRuntime 캐시 대신 분산 캐시 솔루션을 사용하는 것입니다. 앱 도메인이 재생 될 때 그것은 플러시

1) :

httpRuntime을 캐시는 두 가지 단점이 있습니다. 이것은 기본적으로 App_Code를 수정하지 않더라도 어쨌든 29 시간마다 완료됩니다.

2) 단일 웹 서버에 현지화되어 있습니다. 따라서 웹 서버를 대규모 웹 팜으로 확장해야하는 경우 캐시 항목이 모든 웹 서버에서 동기화되지 않기 때문에 캐시가 점점 더 효과적이지 않게됩니다.

분산 캐시 솔루션은 웹 계층과 백 엔드 데이터 소스 사이에 별도의 캐시 계층을 만들어 이러한 문제를 회피합니다.

예 솔루션 :

  • memcached를
  • 레디 스
  • Oracle Coherence는 물론

, 이것은 더 복잡한 아키텍처가 발생합니다 더 많은 하드웨어 또는 가상 머신이 필요합니다 (상업) .

+0

위대한 답변이기도합니다. 나는 그것에 관해 나의 팀과 말할 것이다. –

관련 문제