0

파일 처리를 처리하는 웹 서비스를 만들고 있는데 (시간이 많이 걸릴 수 있음) 웹 서버가 너무 많아지지 않도록 나중에 증명하려고합니다. 한 번에 메모리에 파일.장기 실행 웹 서비스 작업 호스팅

이 작업을 수행하려면 사용자가 파일을 업로드하도록 허용하고 즉시 Azure BLOB 저장소에 넣고 사용자에게 해당 파일의 ID를 제공합니다.

파일이 백그라운드에서 처리 대기열에 추가되는 동안 (별도의 응용 프로그램에서 처리됨) 완료되면 출력 파일을 하늘색으로 추가하고 완료된 작업을 반영하도록 데이터베이스를 업데이트합니다.

사용자가해야 할 일은 내가 파일을 성공적으로 업로드 할 때 부여한 ID를 사용하고 웹 서비스를 호출하여 "내 파일이 준비 되었습니까? 그렇다면 제공하십시오. 나에게".

이 방법을 사용할 수 있습니까?

처음에는 사용자가 전체 작업이 완료 될 때까지 기다려야했기 때문에 훨씬 더 깔끔하게 정리할 수 있었지만 잘 확장되지 않는 것처럼 느꼈습니다.

내가 생각한 이유는 파일 처리 구성 요소를 요청에서 분리하고 파일이 처리 대기열에 들어가면 즉시 처리 될 수 있지만 몇 분이 걸릴 수도 있다는 것입니다. 웹 서비스 가져 오기 - 최악의 시나리오, 자동 확장을 구현하지 않으면 몇 시간이 걸릴 수 있음), 웹 요청을 잠재적으로 매우 오랫동안 기다려야한다는 우려가있었습니다.

이 기술을 사용하고 있습니까? 아니면 현명한 접근입니까?

+1

이것은 현명한 접근 방법입니다. –

답변

1

이것은 매우 합리적인 접근법입니다. 실제로 REST는 202 Accepted 응답 코드를 사용하여이 문제를 해결합니다.

자세한 내용은 Asynchronous REST을 참조하십시오.

은 요약하면 : 사용자가 원래 요청을 제출하면 바로 그들에게 파일에 대한 ID, 반환 상태 코드 202 Accepted를 제공하지 않습니다,

  1. 을 임시 자원의 URI에 위치 헤더를 설정 그들이 요청이 빌려 경우는
  • '진행', 또는 그냥 완료 ETA를 포함 할 수 있습니다이 임시 자원에서 요청 상태를
    1. 몸을 얻기 위해 폴링 할 수 있습니다 이 URI는 위치 헤더가 실제로 파일을 얻을 수있는 URI로 설정된 303 See Other을 반환해야합니다.