2011-12-02 3 views
0

클라우드 응용 프로그램을 디자인 중이며 작업을 위해 내 데이터베이스를 검색하는 작업자 프로세스가 필요합니다.사용자 지정 클라우드 작업자를 구현하는 방법

내가 클라우드의 백그라운드 작업 주제에서 찾는 대부분의 정보는 일종의 스케줄러 및/또는 대기열 시스템과 관련됩니다.

나는 "5 분마다이 작업을 실행하십시오"또는 "나중에 실행될 대기열에 추가하십시오"모델에 맞지 않습니다. 내 문제의 가장 큰 차이점은 근로자가 정기적 인 스케줄러 또는 작업을 생성하는 외부 프로세스에 의해 할당되기보다는 작업을 찾는다는 점입니다.

  1. job :

    는 내가 가지고있는 것은 기본적으로 각 항목은 세 개의 필드가 거대한 테이블을 수행 할 수있는 작은 작업을, 그것은의 트위터 계정에 저장을에서 마지막 메시지를 가져옵니다 말할 수 데이터베이스

  2. interval 해당 작업을 수행 할 위치 : 매 5 분마다, NB 간격은 테이블
  3. 의 각 항목에 대한 임의과 다른 마지막 date 작업이

난이 무한 루프가있는 근로자를하는 것입니다 구현하는 것이 방법을 수행 할 때. 루프에 들어가면 데이터베이스를 탐색합니다. a) date + interval < currentTime 인 항목을 찾고, b) 발견하면 date = currentTime을 설정 한 다음 c) 작업을 실행합니다. 작동하는 ATM이 없으면 몇 초 동안 잠자기 한 다음 다시 시도합니다.

나는 많은 병렬 근로자가 동시에 데이터베이스를 수색 할 것이기 때문에 나는 위의 단락에서 b)와 c)를 먼저해야한다. 평행 작업자가 있기 때문에, 작업 a)와 b)는 작업이 복제되지 않도록 데이터베이스에서의 원자 적 작업입니다. 근로자가 a)와 b) 후에 충돌을 일으켰지 만 작업을 끝내기 전에 큰 문제는 아니며 근로자는 다음 간격으로 작업을 수행 할 수 있습니다. 그 이유는 시간에 영향을받지 않는 시스템에서 작업이 수행되지 않기 때문에 실패한 작업의 백 로그 시나리오는 정확한 간격으로 작업을 수행해야하므로 아무런 이점이 없으므로 간격이 일정하지 않은 것보다 1 간격을 건너 뛰는 것이 좋습니다 그 사이에 작업이 실행되었습니다.

제 질문은 이것이 합당한 구현 전략인지 여부입니다. 그렇다면 어떻게 클라우드에서이 프로세스를 수행 할 수 있습니까? (나는 Heroku를 사용하고 있지만 향후 EC2로 전환 할 수 있습니까?) 아직 다른 코드를 작성하지 않았으므로 (큐 시스템의 유스 케이스/응용 프로그램을 오해했을 수도 있음) 다른 제안을 환영합니다.

+0

대기열을 밀고 싶지 않은 이유에 대해 명확하지 않습니다. 이는 대기업과 거의 동일하게 들리지만 직원들이 듣기보다는 끌어 당기 길 원합니다. 푸시 대신 끌어 당기는 이유는 무엇입니까? –

+0

본질적으로 많은 crontab이 무엇인지에 대한 데이터베이스가 있기 때문에. 다른 반복 간격으로 실행해야하는 많은 다른 항목. 이런 종류의 아키텍처에 대한 제안이 있습니까? – lms

답변

0

이것은 예상치 못한 일을하는 것처럼 느껴지기도합니다. 몇 초에 한 번씩 작업을 예약 할 수없는 이유는 없습니다.

그러나 작업을 찾는이 아이디어는 사납게 들립니다. 두 명의 근로자가 동일한 작업이 동시에 실행되는 경우 어떻게됩니까? 또한 작업이 필요하다는 것을 나타낼 수있는 트리거가 응용 프로그램에 있습니까? 당신이 '일하기'라는 코드를 가지고 있다는 것이 이상하게 보입니다.

간단한 주기적 백그라운드 작업으로 매우 긴 시간을 할애 할 수 있으므로 자신의 작업을 롤업하기 전에 해당 영역의 모든 가능성을 다 소진 할 것입니다.

관련 문제