2012-11-18 4 views
49

현재 나는 일부 배경 작업 (주로 이메일을 보내고 무겁게 데이터베이스 업데이 트를 구현할 필요가 파이썬 프로젝트에서 일하고 있어요. 저는 Redis를 태스크 브로커에 사용합니다. 그래서이 시점에서 저는 두 명의 후보자가 있습니다 : CeleryRQ. 이러한 작업 대기열에 대한 경험이 있지만이 도구를 사용하는 경험을 공유하도록 요청하고 싶습니다. 그래서.장점과 단점 셀러리 대 RQ

  1. 셀리 대 RQ를 사용하는 것이 장단점.
  2. 셀러 리 대 RQ를 사용하기에 적합한 프로젝트/태스크의 모든 예제.

셀러리는 꽤 복잡하게 보이지만 그것은 완전한 기능을 갖춘 솔루션입니다. 사실 나는이 모든 기능이 필요하다고 생각하지 않습니다. 다른 측면 RQ는 (예를 들어, 구성, 통합) 매우 간단하지만, 몇 가지 유용한 기능이 부족 보인다에서 (예를 들어, 작업 취소하는 코드를 자동으로 다시로드)

+2

불행히도 이런 종류의 질문은이 사이트의 형식에 맞지 않습니다. [FAQ # dontask]를 참조하십시오. 이와 같은 질문은 모호한 답변으로 이어지는 경향이 있습니다. 모호한 답변도 매우 빠르게 구식입니다. 특정 문제에 대해 도움을 줄 수 있다면 다른 질문을 자유롭게 게시 할 수 있습니다! –

+0

BTW는 내가 rq- 대시 보드 –

답변

60

정확하게 똑같은 질문에 답하는 동안 내가 발견 한 바가 있습니다. 아마도 포괄적 인 것은 아니며 어떤 점에서는 부정확 할 수도 있습니다.

간단히 말해서 RQ는 모든 곳에서 더 단순하게 설계되었습니다. 셀러리는보다 견고하게 설계되었습니다. 둘 다 훌륭합니다.

  • 문서. RQ's documentation은 복잡하지 않고 포괄적이며 프로젝트의 전반적인 단순성을 반영합니다. 분실 또는 혼란스러워하지 않습니다. Celery's documentation은 포괄적이지만, 먼저
  • 감시를 내면화 너무 많은 옵션이 있기 때문에 일을 설정하는 때를 꽤 많이 다시 방문 할 것으로 예상된다. Celery's FlowerRQ dashboard은 설치가 매우 간단하며 원하는 정보의 90 % 이상을 제공합니다.

  • 중개인 지원. Celery는 확실한 승자이며, RQ는 Redis 만 지원합니다. 즉, "브로커 란 무엇인가"에 대한 문서가 줄어들지 만, Redis가 더 이상 작동하지 않는다면 나중에 브로커를 전환 할 수 없다는 것을 의미합니다. 예 : Instagram considered both Redis and RabbitMQ with Celery. 브로커마다 보증이 다르므로 중요합니다. Redis 수 없습니다 (서면으로) 귀하의 메시지가 배달 보장 100 %.

  • 우선 순위 대기열. RQ 우선 순위 대기열 모델은 간단하고 효과적입니다 - workers read from queues in order. Celery는 여러 대기열에서 소모하도록 여러 작업자를 회전시켜야합니다. 두 접근법 모두 작동합니다.

  • OS 지원. RQ는 fork을 지원하는 시스템에서만 실행되기 때문에 셀러리가 확실한 수상자입니다. 유닉스 시스템

  • 언어 지원. Celery는 한 언어에서 다른 언어로 작업을 보낼 수 있지만 RQ는 Python 만 지원합니다.

  • API.셀러리는 매우 유연합니다 (다중 결과 백엔드, 멋진 구성 형식, 워크 플로우 캔버스 지원). 당연히이 힘은 혼란 스러울 수 있습니다. 반대로 RQ API는 간단합니다.

  • 서브 태스크 지원. 셀러리는 하위 작업 (예 : 기존 작업 내에서 새 작업 만들기)을 지원합니다. RQ가 맞는지 모르겠다.

  • 커뮤니티 및 안정성. 샐러리는 아마도 더 확립되어 있지만, 둘 다 활발한 프로젝트입니다. RQ가있는 동안 글을 쓰는, 셀러리는 ~ 2000 ~ Github에서에 3500 별을 가지고 있으며, 두 프로젝트는 내 의견으로는 적극적인 개발

을 보여, 셀러리는 명성을 믿고 당신을 이끌 수있는만큼 복잡하지,하지만 당신은 것입니다 RTFM해야합니다.

그래서 왜 RQ에 셀렉트 (아마도 더 많은 기능을 갖춘) 셀러리를 기꺼이 교환 할 수 있습니까? 내 마음 속에서 모든 것이 단순함에 달려 있습니다. Redis + Unix로 자체를 제한함으로써 RQ는 더 간단한 문서화, 간단한 코드베이스 및 더 간단한 API를 제공합니다. 즉, 작업 메모리에 작업 대기열 시스템에 대한 세부 정보를 보관할 필요없이 관심있는 코드에만 집중할 수 있습니다. 우리 모두는 한 번에 얼마나 많은 세부 정보를 얻을 수 있는지에 한계가 있으며 작업 대기열 세부 정보를 유지해야하는 필요성을 제거함으로써 RQ는 관심있는 코드로 돌아갈 수 있습니다. 이러한 단순성은 언어 간 작업 대기열, 광범위한 OS 지원, 100 % 신뢰할 수있는 메시지 보장 및 메시지 브로커 전환 기능과 같은 기능을 희생시키면서 발생합니다.

1

셀러리가 복잡하지 않습니다. 의 핵심, 당신은 tutorials에서 단계 구성으로 단계를 수행 한 후 my_task.delay(*args, **kwargs)으로 작업을 실행 @celery.task와 기능을 장식하는 celery 인스턴스를 만듭니다. 자신의 평가에서 판단

, 당신이 (키) 기능이 부족하거나 주위에 약간의 초과 매달려를 가진 사이에서 선택해야 할 것 같다. 그것은 내 책에서 너무 열심히 선택하지 않습니다.

+16

으로도 작업을 취소 할 수있는 것처럼 보입니다. 나는 귀하의 평가에 완전히 동의하지 않습니다. 나는 문서와 많은 블로그 게시물을 많이 읽은 후에도 데비안 서버에서 Celery를 성공적으로 운영하기 위해 2 주 동안 고생했습니다. 내가 가지고있는 주된 문제는 당신이 당신의 설정에서 뭔가 잘못되었을 때 Celery는 그 문제가 무엇인지에 대한 피드백을 제공하지 않는다는 것입니다. 그리고 마침내 제대로 작동하게되었을 때 셀러 리 스택에 OSError 유형이 들어가기 시작했습니다. Github에 문제를 게시했지만 아무도 도움을 줄 수 없습니다. 나는 셀레 리에 10 피트 극으로 다시는 건드리지 않을 것이다. – William

관련 문제