2014-04-16 4 views
2

AWS의 탄성 환경 (자동 확장 기능이있는 Ec2 인스턴스)에서 실행될 응용 프로그램을 개발 중입니다. 모든 응용 프로그램은 PHP로 개발 중입니다.작업 대기열을 사용하여 AWS S3 버킷에 업로드

앱의 핵심은 S3 버킷에 파일을 안전하게 저장하는 것을 기반으로합니다. 사용자는 저장 위치를 ​​알 필요가 없기 때문에이 저장소를 EC2 인스턴스에 임시로 저장 한 다음 대기열 복제를 피하기 위해 작업 대기열 (Amazon SQS)을 사용하여 비동기 적으로 S3으로 이동할 수 있다고 생각했습니다. 시간과 s3 문제에 대한 더 나은 지원 (일반적인 것은 아니지만 일어날 수 있음).

내 질문은 :

  1. 이 방법은 좋은 소리합니까 아니면 내가 뭔가를 놓친거야?
  2. 큐에서 작업을 처리 할 때 작업자 인스턴스는 원래 s3 인스턴스에 연결하여 파일을 검색 한 다음 s3에 업로드해야합니다.
  3. 자동 축소 기능을 사용할 때 문제가 발생하지 않도록하려면 어떻게해야합니까? S3 버킷에 파일을 저장하기 전에 인스턴스를 삭제할 수 있습니다.
+0

예상되는 파일의 크기는 어느 정도입니까? ec2 인스턴스와 s3 사이의 대역폭은 대부분의 사용자 및 s3보다 훨씬 높습니다. 일반적으로 업로드 할 때 파일을 직접 전송합니다. 파일에서 발생해야하는 모든 후 처리 작업을 위해 작업을 사용합니다. – datasage

+0

그들은 15MB보다 커서는 안됩니다. 하지만 SQS 대기열을 사용하여이 작업을 수행하면 s3 가동 중지 시간이나 문제를 처리 할 수 ​​있습니다. –

+1

SQS를 추가하면 SQS가 실패하거나 작업이 선택되지 않거나 인스턴스가 종료되어 파일을 전송할 수 있습니다. 15MB는 크지 않습니다. 업로드시 s3으로 전송할 수없는 경우 단순히 업로드가 실패했거나 불완전하다고 생각합니다. 해당 크기의 파일에 대해 s3으로 업로드하는 데는 몇 초 밖에 걸리지 않습니다. – datasage

답변

3

이상적으로는 파일 업로드 (앱 서버와 S3 이후 모두) 중에 주 앱 서버를 연결하지 않는 것이 좋습니다.

CORS (Cross Origin Resource Sharing) 정확하게 존재하지 않도록하십시오. 클라이언트 측에서 직접 S3에 파일을 업로드 할 수 있으며 아마존은 동시 사용자의 여러 업로드를 처리하는 것에 대해 걱정할 수 있습니다. 이를 통해 앱 자체가 업로드에 대해 걱정할 필요없이 최선을 다할 수 있습니다.

This SO question 같은 문제에 대해 설명하고 진행률 표시 줄과 함께이 문제를 포장 할 수 밖에 미세 업 로더 등

이 완전히 큐의 모든 종류의 사용을 만들 필요가 없어 같은 몇 가지 사용자 정의 플러그인이있다. 업로드 후에 특정 부기 작업을 수행해야하는 경우 업로드가 완료된 후 파일 정보 등으로 서버에 대한 ajax 호출을 수행하면 자동 축소로 인해 인스턴스가 제거 될 때 발생할 수있는 모든 문제를 해결해야합니다. 모든 것이 클라이언트 측이기 때문에.

+0

매우 유용한 통찰력 감사합니다. – nicodjimenez

관련 문제