2009-04-14 3 views
3

배경 정보 : 파일 복제는 우리가 부하 균형 (8) 다른 IIS에 걸쳐 대규모의 트래픽이 높은 ASP.NET 웹 응용 프로그램을 가지고,서버 별의 web.config는

현재 절름발이 서버. 사이트의 특성상 .aspx 파일과 .ascx 컨트롤의 사소한 변경은 하루 종일 자주 발생하며 테스트를 거쳐 실제 게시 된 후 xcopy 배포를 통해 공개 웹 서버 각각에 복제됩니다. 10 분.

물론 각 서버에 전체 사이트의 중복 사본이 있어야하기 때문에 이것은 매우 비효율적이며 게시 지연 시간을 10 분 단축하고 싶습니다.

가능한 개선 :

공유 스토리지에서 호스팅 우리는 이제 원격 스토리지는 로컬 드라이브라고 믿는 각 서버로, 중앙에서 전체 사이트를 호스팅에 iSCSI 인터페이스를 중앙 저장소를 사용하는 옵션이 있습니다. 게시는 즉각적이고 시스템 전체에 적용됩니다.

참고 : 사이트 구조에 많은 다른 디렉터리가 있으므로 ASP.NET에서 FileSystemWatcher를 사용하여 변경 사항을 모니터링하고 SMB 최대 명령 수를 확인해야하므로 UNC 공유에서 드라이브를 호스팅 할 수 없습니다. 빨리 도달했습니다. 예, MaxCmds 및 MaxMpxCt 레지스트리 설정에 대해 알고 있습니다.

문제점 :의 Web.config 변경 트리거 대규모 재 컴파일

우리가을 forsee 문제는 파일 시스템 구조에 어떤 변화가 발생, 거의 모든 컴파일에서 .aspx가 발생하거나 재 컴파일해야 할의 .ascx 수 있다는 것입니다 대기중인 요청 및 서버가 작동 중지 된 것으로 인식합니다. 대부분의 리소스는 시스템 전체에서 사용되지 않으므로 변경시이를 다시 컴파일하면 리소스가 거의 없어집니다. 사이트의 모든 페이지에서 사용되는 전역 마스터 페이지가이 문제를 일으킬 수 있지만 코드로 쉽게 관리 할 수 ​​있습니다.

주요 원인은 web.config 파일입니다. web.config 파일을 변경하면 전체 웹 응용 프로그램이 재생되고 재 컴파일이 발생합니다. 따라서 현재 web.config 변경 사항을 복제하지 않습니다. web.config를 변경하려면로드 밸런서에서 웹 서버를 가져 와서 변경 사항을 적용 (테스트) 한 다음 정크 요청이로드 밸런서에 다시 배치되기 전에 서버를 예열해야합니다.

그러나 나머지 웹 응용 프로그램의 디렉토리 구조와 마찬가지로 중앙 집중식 저장소에 web.config 파일이있는 경우 파일 사본이 하나뿐이므로 개별 서버를 더 이상 패치 할 수 없으며 예열 될 수 없습니다.

[질문

의 Web.config라는 이름의 파일이 아닌 다른 소스로부터의 행진 주문을하는 ASP.NET 웹 응용 프로그램을 얻을 수있는 방법이 있나요?

  • default.aspx에
  • Global.asax에
  • 웹 ServerA.config
  • 웹 서버 B :

    이상적으로 예를 들어, 서버 당 하나 개의 파일이있을 것입니다.설정

  • ... 이름 "의 Web.config는"어쨌든 정의

  • 웹 ServerN.config? 서버별로 설정할 수있는 레지스트리 설정이 있습니까? 사용할 파일을 지정하기 위해 machine.config 또는 전역 web.config에서 만들 수있는 항목이 있습니까?

    범위의 아웃

    상황이 그냥 그래서 내가 디버그, 테스트에 대해 서로 다른 appSettings는 있고, 사는 방법을 요구하고 있지 않다, 분명히입니다. 이 문제를 다루는 다른 주제가 있으며, 모든 web.config 파일은 대부분 동일하게 유지됩니다. 업데이트가 수행 될 때 유일한 차이점이 필요합니다.

    appSettings 정보에는 web.config가 사용되지 않습니다. 이것은 어셈블리 참조, httpHandler 정의 및 데이터베이스화할 수없는 다른 system.web 설정과 같은 중요한 요소를위한 것입니다.

    업데이트

    난의 Web.config에 대한 레지스트리를 검색했는데, 나는 최근에 내가 분명히 많이 할의 Web.config 파일을 편집했다고 언급 응용 프로그램을 제외하고 아무것도 찾을 수 없습니다. 도움이 안돼.

  • +0

    II6 또는 IIS7을 사용하고 있습니까? –

    +0

    현재 IIS6이지만, IIS7 로의 업그레이드는 장거리 계획에 있습니다. IIS7이 필요한 솔루션은 제 의견으로는 괜찮을 것입니다. –

    답변

    0
    1. , 당신은 어떤 파일 시스템을 사용하고 있습니까? NTFS는 공유 저장소 파일 시스템이 아닙니다. 즉, 한 번에 둘 이상의 노드가 파일 시스템에 쓸 수 없습니다.

    2. IIS 사이트의 가상 디렉터리를 제안합니다. 이렇게하려면 코드의 레이아웃을 약간 재구성해야하지만 너무 중요하지 않아야합니다. 그래서, 당신은 그 머신에 특정한 web.config를 가진 사이트의 루트 홈 디렉토리를 가질 것이고, 당신이 설정 한 공유 파일 시스템 리소스에 맵핑 된 vdir을 가질 것입니다.

    +0

    완벽한 솔루션은 아니지만 실제로는 하나가 아닐 수도 있으므로 답변으로 표시하고 있습니다.특히 가장 자주 업데이트되는 콘텐츠를 특정 가상 디렉터리로 이전 할 수있는 경우 루트가 아닌 거의 변경되지 않는 콘텐츠를 복제 할 수 있습니다. –

    1

    내 첫 번째 질문은 web.config &에서 데이터베이스로 옮길 수 있습니까? 우리는 데이터베이스의 모든 구성 설정을 테이블에 유지하고 machine.config를 사용하여 db 연결 정보를 저장합니다.

    얼마나 많은 재 작성을해야할지 모르지만 문제가되지 않도록하십시오.

    다른 옵션은 구성 파일을 외부 파일에 저장하고 web.config에서 참조하는 것입니다. 그 파일에 대한 변경 사항은 aspnet wp가 재활용 될 때까지 다시 읽지 않지만 설정을 변경 한 다음 IISRESET을 통해 각 서버를 순환시킬 수 있습니다.

    그냥 궁금
    <configuration> 
        <appSettings file="OtherFile.config"> 
    ... 
    
    +0

    이것은 appSettings와는 아무런 관련이 없습니다. 이것은 어셈블리 참조와 httpHandler 정의와 같은 web.config 파일에 있어야하는 항목을위한 것입니다. –

    +0

    아 - 질문을 업데이트 해 주셔서 감사합니다. – Chuck

    +0

    Web.Config에는 AppSettings 섹션이 있습니다.이 작업을 수행하는 데 필요한 부분이라고 생각합니다. 이걸 간과 했니? 문제를 해결하려면 appSettings 섹션을 사용해야합니다. 바퀴를 다시 발명하지 마십시오. – D3vtr0n