2011-10-13 2 views
0

사람들이 이메일로 이미지를 업로드해야하는 작은 애플리케이션을 만들고 있습니다. 그것은 MySQL과 S3와 PHP (프레임 워크 없음)에 내장되어 있습니다.작업 대기열 - cron 작업을 원하십니까?

지금까지 나와 같은 시나리오에서 이메일은 POP3 계정에 저장됩니다. 스크립트는 1 분마다 실행되며, 가장 오래된 이메일을 가져오고, 이미지의 크기를 변경하고, S3에 업로드하고, DB에 경로를 저장하고, 이메일을 삭제합니다.

큰 규모의 경우 어떻게 관리 할 수 ​​있습니까? 크론 작업이 이런 유형의 상황을 처리하는 가장 좋은 방법입니까? 프로세스가 1 분 이상 소요되면 오버랩되고 결국 실패 할 것입니다. 또는 1 분 미만이되면 어떻게됩니까? 나는 더 큰 규모로 한 시간에 60 개 이상의 요청을 할 것이라고 생각하여 불필요한 유휴 시간을 갖게되었습니다. ...

아마도 전자 메일을 처리하기 위해 .forward 파일을 사용해야하지만 다시는 메일 흐름을 제어하지 않아야합니다.

이러한 시나리오가 대부분 작동한다고 생각합니다. 모범 사례와 관련하여 궁금합니다.

감사합니다.

답변

3

약간 수정 된 접근 방식이 될 수 :

  • 분마다 크론에서 스크립트를 실행
  • 스크립트 검사 그것의 또 다른 인스턴스가 이미 실행하고 있는지 경우는
  • 을 존재하는 경우 실행중인 스크립트가 남아있는 대기열을 처리 할 때까지 빈 공간 또는 요소 수 (예 : 최대 10)

고객 디렉토리를 백업하는 백업 절차가있었습니다. ev 마지막으로 완료된 백업이 일정 시간 이상 경과 된 경우. 일부 고객이 너무 많은 기가 바이트의 데이터를 보유하고 스크립트가 백업을 수행하는 데 1 시간 이상 걸릴 때까지는 큰 효과가있었습니다.

체크가 없으면 다음 시간에 스크립트가 동일한 고객을 다시 실행하게되며, 이는 매우 높은 런레벨로 응답이 없어 질 때까지 1 시간 이상 걸릴 것입니다.

내가 구현 한 픽스는 다른 인스턴스가 실행 중이면 설명 된 검사로 끝내고 다음 사이클을 기다립니다. 그 문제를 해결 한 후에 나는 몇 년 동안 문제가 없었습니다.

1

장기 실행 프로세스를 시도해보십시오. 그것은 메일을 확인하고 모든 메일을 처리합니다. 그것이 끝나면 더 이상 메일을 찾을 수 없다면 잠시 잠을 자게됩니다.

안정성에 문제가있는 경우 언제든지 supervise과 같은 것을 사용할 수 있습니다.