2010-03-06 5 views
2

내가 여러 파일을 업로드에 대한 질문의 톤을 볼 수 있지만, 그래서 여기에 여러 서버에 하나의 파일 업로드에 대해 아무것도 간다에... 여러 서버

을 파일 업로드 그 것이다 ASP.NET 응용 프로그램이 부하가 분산 된 두 대의 서버에서 실행 중이며 사용자가 파일을 업로드하여 두 서버에서 모두 종료하도록 허용하고 싶습니다. 가장 확실한 방법은 무엇입니까? IIS 6 btw를 사용하고 있습니다. 마음에 와서

몇 가지 아이디어가 있습니다 :

1) 두 서버가 액세스 할 수있는 공유 위치를 가리키는 가상 디렉터리를 사용합니다. 응용 프로그램이 네트워크 서비스에서 실행되는 경우 액세스 문제가 있습니까? 응용 프로그램을 공유 위치 시스템에있는 사용자 계정으로 실행해야한다고 가정합니다. 어떻게이 권한을 설정해야합니까?

2) jQuery를 통해 내 서버에 요청을 게시하고 포트 번호로 참조 할 수 있으면 좋을 것입니다. 서버가 동일한 도메인에 있더라도 동일한 오리진 정책을 위반합니다. 맞습니까?

또 다른 해결책이 있습니까? 다른 사이트는 어떻게합니까?

답변

1

이 문제를 좀더주의 깊게 생각하고 싶습니다. 한 쌍 이상의 서버를 사용하면 일부는 시간이 많이 걸릴 수 있습니다 (적어도 가끔 재부팅하는 경우).

모든 서버가 온라인 상태가 아닌 경우 업로드가 모든 서버에 즉시 전송 될 수 없으므로 중개 서버 (고 가용성 자체가 아니면 실패 할 수 있음) 어떤 파일이 어디에 있었는지 "기억"하고 관련 서버가 복원되었을 때 파일을 전송하는 대기열 시스템.

또한 백업 시스템과 클러스터에 새로 프로 비전 된 서버를 추가하는 방법이 필요합니다. 또한 동기화되지 않을 경우를 대비하여 이러한 파일을 모니터하는 방법이 필요합니다. 귀하의 아키텍처는 신중하게 생각해야합니다. 대답이 없습니다.

0

이 NAS에 파일을 읽고 쓸 수있는 응용 프로그램 풀의 자격 증명을 사용하여이 문제를 해결했습니다. 핫 스왑 W/RAID, 다중 어레이 컨트롤러, 전원 공급 장치 등과 같은 단일 장애 지점을 방지하기 위해 NAS가 고 가용성으로 설정되었는지 확인하십시오.

특정 디렉토리를 유지하는 서버에 폴더 모니터링 소프트웨어를 넣을 수도 있습니다 동기화. 이 솔루션을 권장하지 않습니다.

1

가장 깨끗한 접근 방법은 실제로 서버 측에서 파일을 전달하는 것입니다. 자바 스크립트를 통해 두 번의 업로드를 강제하면 XSS 보호 장치를 사용하는 것에 대해 걱정할 필요가 없을뿐 아니라 사용자가 매우 제한된 업스트림 대역폭을 각 파일에 대해 두 번 사용하도록 할 것입니다.

어쨌든 클라이언트에 그런 종류의 세부 정보를 제공하면 안됩니다. 브라우저는 파일이 어디서 끝나는 지, 누가 파일을 보낼지를 알 필요가 없습니다. 논리를 서버 쪽에서 유지하면 세부 정보를 숨기고 (따라서 오류 및 악용 가능성을 줄이는 것은 물론) 프로세스를보다 잘 제어 할 수 있습니다. 여러 백엔드 저장소를 처리하는 게이트웨이 서비스를 나중에 만들 수 있으며 실패한 서버를보다 잘 처리 할 수 ​​있습니다. 실패한 업로드를 대기열에 넣고 다시 시도 할 수 있습니다. 이 모든 것은 서버 측에서 수행하는 경우 비용이 매우 적게 들지만 클라이언트 측에서 안정적으로 작동하도록 만드는 고통입니다.

백 엔드 로직을 백 엔드에 보관하십시오. 로드 밸런싱은 사용자에게 숨겨져 있어야하므로 파일을 정확히 보내는 위치를 알려주지 않아도됩니다.원하는 경우 선택 사항으로 만들고 동작을 숨 깁니다. 게이트웨이 서버 (로드 밸런싱 서버 중 하나 일 수 있음 - 실제로로드 균형 조정이되어야하므로 둘 중 하나와 함께 작동해야 함)에서 파일을 삼키고 다른 서버로 전송하십시오. 거기에서. 서버에서 서버로의 전송도 빨라질 것입니다.

1

NAS가있는 경우 사용할 수있는 최선의 선택입니다. 특정 시스템과 관련이없는 공유 파일 시스템입니다. 그런 다음 클러스터 된 프론트 엔드를 통해 NAS의 가용성을 높이는 데 집중할 수 있습니다.

옵션이 아닌 경우 컴퓨터 중 하나의 폴더를 가리키는 가상 디렉터리를 사용할 수 있지만 중복성은 손실됩니다.

나는 내 작업에서이 같은 도전에 직면 해있다. 내 응용 프로그램은 작지만 가용성이 높아야하지만 NAS는 없습니다. 따라서 각 컴퓨터의 web.config에서 업로드 된 파일을 저장해야하는 모든 UNC 경로 목록을 배치합니다. 임시 폴더에 업로드 한 후 파일을 하나씩 차례대로 복사합니다. 완벽하지는 않습니다 - 컴퓨터가 다운 될 수 있습니다.이 경우 모든 파일이 없을 수도 있습니다 (그리고 누락 된 컴퓨터를 찾기 위해 복사본이 느려질 수 있습니다).하지만 제 상황에서는 업로드가 너무 드뭅니다 그것은 가치있는 개선이 아니라고.

다른 언급했듯이 Javascript가 빠릅니다. 한 번 업로드하십시오.

+0

앱이 각 컴퓨터에 쓸 수 있도록 권한을 어떻게 설정 했습니까? 귀하의 응용 프로그램이 네트워크 서비스로 실행합니까 아니면 각 컴퓨터에 액세스 할 수있는 ID를 가장합니까? – wsanville

+0

파일 복사에 가장을 수행합니다. 우리에게는 도메인 계정이 있지만, 두 개의 서버가 동일한 사용자 이름/암호를 사용할 수있는 경우이를 동일하게 사용할 수 있습니다. 설정 파일에서 암호를 암호화 할 수 있습니다. – roufamatic

관련 문제