Celery RPC与AMQP结果后端对比

12
rpc结果后端与amqp结果后端有什么不同?在 changelog中看到它已经替代了amqp,但是虽然它被写成协议(带有),底层协议仍然是amqp,正确吗?
例如,result_backend = 'rpc://'result_backend = 'amqp://'。如果我将rpc用作后端,当将broker_use_ssl标志设置为true时,它是否也使用SSL?

3
芹菜文档对此并不清晰。我记得曾经在某个地方看到过,使用amqp作为后端可能会引入性能开销。我不记得那个链接了。我添加了一个赏金,希望有内部知识的人可以解释rpc和amqp之间的区别,并如何在它们之间进行选择。 - Cheok Yan Cheng
1个回答

33
考虑这样一个情况,4个客户端需要排队执行100个任务。
如果使用 amqp 后端,则会创建400个独立的队列并将结果存储在这些队列中。
如果使用 rpc 后端,则只会创建4个队列(每个客户端1个),并在每个队列中存储100个结果,这样可以显著提高性能,因为不需要为每个任务都创建队列。
由于这个原因,amqp 后端已被弃用,并将在下一个版本中完全删除。 rpc 后端使用与 amqp 相同的发布/消费机制。如果将 broker_use_ssl 设置为 True,则将使用 SSL。

您介意进一步解释一下在celery上下文中SSL是什么吗?它和“安全套接字层”是一样的吗?我们应该如何决定是否启用broker_use_ssl - Cheok Yan Cheng
@CheokYanCheng 是的,没错。是否启用取决于您的客户端和服务器如何连接,传输的数据是否机密,或者是否需要遵循一些标准,如HIPAA等。 - Chillar Anand
你能解释一下它们结果持久化的行为是否不同吗?我遇到了一个类似的问题,就像 https://dev59.com/QJLea4cB1Zd3GeqP348T, 我无法使用rpc启用result_persistent。 - Jzou
@JialinZou 在启用它时是否遇到任何错误?如果启用了 result_persistent,它将持久化。参考链接:http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-result_persistent - Chillar Anand
@ChillarAnand 没有错误,我可以在amqp和rpc中都启用result_persistent。不同之处在于,当我使用amqp时,我可以通过AsyncResult(task_id)在另一个Python解释器中检索结果。但是使用rpc时,这仅适用于同一解释器内部。不确定这是错误还是设计如此。我在Celery文档中没有找到答案。 - Jzou
RPC后端将支持和弦吗?它似乎缺少功能,我还遇到了使用RPC后端返回链接任务状态的问题。 - KillerKode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接