2011-05-02 4 views
2

백그라운드 작업이 시작되면 작업자가 처리하는 대기열의 뒤로 보내집니다. 작업이 삭제되고 다른 작업이 시작됩니다. 어떤 경우에는 그 실용적인 측면을 이해하지 못한다는 것을 제외하고는 이걸 가지고 있다고 생각합니다. 물론 지연된 일자리를 사용하여 일주일에 한 번 15,000 통의 뉴스 레터를 보내는 회사라면 완벽한 의미를 갖습니다. 그러나 100 명 정도의 사용자가있는 애플리케이션의 경우 백그라운드 작업이 필요한 작업 (예 : 이메일 전송/가져 오기와 같은 작업이 1 분 정도 소요될 수 있음)이 충분하면 다른 사용자가 삭제되는 동안 각 사용자가 줄을 서서 기다려야합니다 한 명의 노동자가있는 경우).많은 사용자를 다룰 때 지연된 백그라운드 작업의 실제 사용

이것은 내가 올바르게되고 있는지 잘 모르겠다. 나는 동일한 직업에 대해 이야기하고 있지만 각 사용자에 대해 개별적으로 이야기하고 있습니다. 사용자 당 직업으로 간주됩니까? 100 명의 사용자가있는 경우 각 프로세스마다 100 명의 직원을 묶어서 묶지 않아도됩니까?

시뮬레이션을 위해 delayed_job을 사용해 보았습니다. 실제로 다른 계정으로 로그인 할 때까지 다른 사용자의 이메일이 전송 될 때까지 기다려야합니다. 플러그인은 신속하고 간단하게 작업 할 수 있지만 여기서는 올바른 방법이 아니라고 생각합니다.

나는 또한 Ajax를 사용해 보았지만 HTTP 요청이기 때문에 서버에서 응답을 얻을 때까지 브라우저를로드 모드로 묶는다 (async: true 포함). 내가 이것을 너무 빨리 다 판결했는지는 확실치 않지만, 나는 더 우아한 서버 솔루션을 찾고 있었다.

이렇게 백그라운드 작업을 수행 할 수있는 방법이 있습니까? (대기 시간이 거의 없음을 알 수있는 상업용 솔루션과는 다른 것으로 들었지만 사용자 간 대기열을 완전히 제거하는 데 관심이 있습니다.) 그렇지 않다면 응답을 기다리지 않고 아약스 요청을하는 방법이 있습니까? 내 질문은 모두 크게 다르다는 것을 알고 있지만이 문제에 대한 적절한 해결책 인 것 같습니다.

답변

0

Resque은 여러 대기열을 지원할 수있는 백그라운드 처리 엔진입니다.

방법이를 사용할 수 있습니다

  1. 그룹 당신의 작업을 우선 순위에 의미를 큐에. 빠른 응답 시간이 필요한 경우 '포 그라운드'대기열에서 사용하십시오. 느린?(이메일을 수신/송신 등)
  2. 사용자 당 하나의 큐를 가지고이 SO 질문도 use delayed_jobs with multiple queues/tables 할 수있는 방법을 제공합니다

(이 많은 많은 노동자가 필요합니다)가 '배경'큐에있을 수 있습니다

+0

출처를 보내 주셔서 감사합니다. Resque는 지금 당장 필요로하는 것보다 더 많은 중장비, 특히 redis 설치의 오버 헤드 중 b/c라고 생각합니다. 내가 말했던 것처럼 delayed_job을 사용하고 있었기 때문에 dj로 여러 대기열을 사용하면 트릭을 할 수 있습니다. . – Gal

0

delayed_job 및 다른 메시지 대기열의 목적은 핵심 응용 프로그램 외부의 작업을 비동기 적으로 처리하는 것입니다. 나는 외부 애플리케이션 (때로는 gmail과 같은 제 3 자 API)을 보내서 보낼 수 있기 때문에 항상 이메일을 보내는 대기열을 사용하며 사용 가능 및 운영 효율성을 보장 할 수 없습니다.

매우 적은 사용자라도 사용을 위해 delayed_job으로 이메일을 오프로드하는 것이 좋습니다. 이것은 프론트 엔드 (아약스)의 속도를 높이고 실패시 다시 시도 할 것입니다. 대기열을 처리하기 위해 여러 명의 작업자를 불러올 수 있지만 메일을 보내려는 호출이 정말 오랜 시간 (몇 초 이상 걸리지 않는 경우)까지는 필요하지 않습니다.

예, 대부분의 경우 메시지가 동일 할 수도 있지만 각 사용자에 대해 별도의 작업을 만듭니다. 이메일 응용 프로그램/API가 대량 전송을하고 몇 번의 호출로 큰 페이로드를 보내서 전화 수를 크게 줄일 수 있다면 내가 함께 처리 할 수있는 유일한 시간입니다.

+0

이메일을 보내고받습니다. 나는. 약 1 분이 걸립니다. 그래서 값이 싸고 사용자를 대기열에 넣지 않는 솔루션을 찾고있었습니다. – Gal

+0

보내기 및 받기 작업을 분리하여 개별 작업으로 수행 할 수 있습니까? 일당 1 분이 길어 보인다. 자신이 연주에 만족할 때까지 여러 DJ 프로세스를 실험 해보십시오. 멀티 스레드 솔루션을 찾는 것처럼 들리지만 사실 Ruby에서는 다소 복잡합니다. 다중 프로세스 (다중 DJ 작업자) 솔루션은 잘 작동해야합니다. 또한 큐가 의미하는 바를 조금 혼란스럽게 생각할 수도 있습니다. 본질적으로 대기열에 대해 느린 것은 없습니다. 사용자가 즉시 응답 할 수 있도록 작업을 비동기 프로세스로 보냅니다 (http 응답). –

관련 문제