openstack为什么使用rabbitmq作为rpc的底层协议

openstack rpc执行流程

https://www.rabbitmq.com/tutorials/tutorial-six-java.html

  1. 消费者发送mq消息到rabbitmq服务器,其中消息包括调用的方法、参数、reply_to topic。其中重点是reply_to topic,这个topic用于生产者存放结果,消费者消费结果。
  2. 多个生产者(分布式)消费消息,某个生产者消费消息后,其余生产者便不能再消费同一个消息。

  3. 生产者动态执行响应方法,取得结果,并将结果放到reply_to topic中,供消费者使用。此过程消费者一直在阻塞等待结果。

问题猜想

  1. 在整个过程中,消费者和生产者不需要感知到对方的存在
  2. 生产者只能消费一次rpc消息,因此可部署多个相同服务,用于做负载
  3. rabbitmq充当服务注册中心,网关,和负载均衡,简化了分布式系统的复杂度
  4. rabbitmq即为消息队列,那么消息队列的一些优点在这里也可以体现出来,如削峰,异步没有那么明显

rabbitmq的高可用特性,方便的横向扩展特性,以及其他的一些优点,共同促成了openstack分布式系统架构的简洁性。

总结后就是使用rabbitmq作为rpc底层信息传输协议,可以在一定程度上降低分布式系统的复杂度。

01-06 07:18
查看更多