4 ms·
I have yet to dig deeper, but the fact that it uses Thrift and already has worker implementations in C++ and Java is a huge plus. Celery is a Python lock-in and
by jokull 12y ago
I have yet to dig deeper, but the fact that it uses Thrift and already has worker implementations in C++ and Java is a huge plus. Celery is a Python lock-in and makes it non-trivial to split your enqueue code and worker code. Celery on the other hand, since it is Python all the way down, let’s you orchestrate the execution of dependant tasks. In my experience these features contribute to a more complex codebase that is harder to maintain, test and understand.
Celery has flexibility for message backends, but prefers RabbitMQ which comes with its own operations overhead, and does not have real horizontal scaling built in (it has failover techniques). RabbitMQ is great for mission critical messaging that survive system restarts.
My biggest worry is relying on Redis or MySQL. What happens if workers stop consuming tasks, wouldn’t that balloon the redis memory consumption pretty quickly? I suppose memory consumption is a factor of load and task bytesize. MySQL on the other hand feels like the wrong tool for this job.
- asksol 12y agoCelery can very well handle 100k tasks/sec. Celery is not locked in to Python, but you are right it's not a drop in solution for other languages as it doesn't support them natively (yet, but that will change soon). You can write simple workers for Celery in other languages too, and there is one in active development for Java. But then Redis is not really a good choice, AMQP is more convenient for interoperability. Have no idea if pinterest evaluated Celery, because they have not been in contact. If they did there are several pitfalls they could have gotten wrong at this scale, but I'm pretty confident it would have been more than suitable. It could have been a benefit for all of us and chances are they have underestimated the effort needed to maintain a custom solution.