2013-06-13 3 views
0

나는 heroku에 REST 서버가있다. REST 서비스에는 N-dynos를, 근로자에게는 N-dynos를 갖습니다.결과가있는 비동기 작업 대기열에 올바른 접근 방식은 무엇입니까?

본질적으로 장기간 휴식 요청이 있습니다. 이러한 것들이 들어 오면 나는 그것들을 작업자 중 한 명에게 위임하고 클라이언트에게 작업을 폴링하고 결국 작업 결과를 반환하는 리디렉션을 제공하려고합니다.

나는 이것을 위해 RedisToGo의 JEDIS/REDIS를 사용할 것이다. 제가 할 수있는 한 두 가지 방법이 있습니다.

  1. 필자는 PUB/SUB 기능을 사용할 수 있습니다. 게시자에게 작업 결과에 대한 고유 ID를 만들고이를 리디렉션 URI로 REST 클라이언트에 반환하도록합니다.
  2. 기본적으로 PUB/SUB 대신 RPUSH/BLPOP을 사용합니다.

# 1의 이점이 무엇인지 잘 모르겠습니다. 예를 들어, LongMathOperation이라는 작업이 있다면 간단히이 목록을 가질 수있는 것처럼 보입니다. list 요소는 수학 연산 인수뿐만 아니라 결과를 배치해야하는 위치에 대해 REST 서버에서 생성 된 UUID를 갖는 JSON 객체입니다. 그러면 모든 작업자 dynos는 BLPOP 호출을 차단하고 첫 번째 호출에서 작업을 처리하고 처리하며 UUID의 키를 사용하여 REDIS에 결과를 저장합니다.

의미가 있습니까? 그래서 내 질문은 "왜 PUB/SUB를 사용하면 이것보다 더 좋을까요?"입니다. PUB/SUB는 내가 누락 된 테이블에 무엇을 가져다 주나요?

감사합니다.

답변

0

pubsub 메시지가 지속되지 않기 때문에 목록도 사용합니다. 구독자가없는 경우 메시지는 손실됩니다. 다른 말로하면, 어떤 이유로 든 듣는 근로자가 없다면 고객은 제대로 봉사하지 못할 것입니다. 목록은 다른 한편으로는 지속됩니다. 그러나 pubsub는 동일한 이유로 분명히 목록만큼 많은 메모리를 차지하지 않습니다. 저장할 것이 없습니다.