AMQP或HTTP
一点背景。
非常大的单片Django应用程序。 所有组件都使用相同的数据库。 我们需要分离服务,以便我们可以独立升级系统的某些部分而不影响其余部分。
我们使用RabbitMQ作为Celery的经纪人。
现在我们有两个选择:
我的团队倾向于HTTP,因为这是他们所熟悉的,但我认为使用RPC而非AMQP的优势远大于它。
AMQP为我们提供了轻松添加负载平衡和高可用性的功能,并保证消息传递。
而使用HTTP,我们必须创建客户端HTTP包装器以使用REST接口,我们必须放入负载均衡器并设置该基础架构以便具有HA等。
使用AMQP,我可以产生另一个服务实例,它将连接到与其他实例相同的队列,并且实现高可用性和负载均衡。
我对AMQP有什么想法吗?
首先,
pickle
,它应该比JSON或任何其他格式更快。 因此,如果您选择使用什么:HTTP + REST或AMQP + RPC,则答案确实是基础结构复杂性和资源使用的主题。 没有任何特定的要求,两种解决方案都可以正常工作,但我宁愿做一些抽象以便能够透明地在它们之间切换。
你告诉你的团队熟悉HTTP但不熟悉AMQP。 如果开发时间是你获得答案的重要时间。
如果你想以最小的复杂度构建高可用性基础架构,我想AMQP协议就是你想要的。
我对他们两人都有一定的经验,而且RESTful服务的优势在于:
基于AMQP解决方案的优势:
请注意,您可以在基于AMQP的API上为RESTful API提供第三方服务,而REST不是协议而是范例,但您应该考虑构建您的AQMP RPC api。 我这样做是为了向外部第三方服务提供API,并为那些在旧代码库上运行的基础架构部分或无法添加AMQP支持的部分提供API访问。
如果我是对的,你的问题是如何更好地组织软件不同部分之间的通信,而不是如何为最终用户提供API。
如果你有一个高负载项目RabbitMQ是一个很好的软件,你可以轻松地添加任何数量的工作在不同的机器上运行。 它也具有镜像和集群功能。 还有一点,RabbitMQ建立在Erlang OTP的基础之上,这是一个高可靠性,稳定的平台...(bla-bla-bla),不仅适用于市场营销,也适用于工程师。 当nginx日志将所有磁盘空间放在RabbitMQ运行的同一分区上时,我只有一次RabbitMQ的问题。
解决方案OP不得不接受的一个讽刺就是,AMQP或其他MQ解决方案通常用于隔离来电者不受纯HTTP服务固有的不可靠性 - 提供某种级别的超时&重试逻辑和消息持久性,因此呼叫者不会“不得不实现自己的HTTP绝缘代码。 通过可靠的AMQP核心的非常薄的HTTP网关或适配器层,可以选择使用更可靠的客户端协议(如JSONRPC)直接访问AMQP,这通常是此场景的最佳解决方案。
链接地址: http://www.djcxy.com/p/34211.html上一篇: AMQP or HTTP
下一篇: How to synchronously consume raw byte messages from RabbitMQ using EasyNetQ?