Post

跨进程程序通信是用RPC还是MQ?

笔者接触分布式系统后,经常遇到需求需要配合其他进程的服务才能完成,跨进程通信是多进程配合的基础,也是分布式系统实现的核心。最常用的跨进程通行的方式有两种:RPC(Remote Procedure Call)和MQ(Message Queue)。笔者也是经常疑惑面对何种需求时使用何种跨进程通信方式,这篇文章做出一些自己的心得。

先简单介绍一下RPC和MQ的区别点:

  • 耦合关系:RPC中A和B是紧耦合的,调用方强依赖于被调用方;MQ中通过引入第三方MQ使得A和B解耦,但是二者同时依赖于MQ。
  • RPC依赖于同步调用,调用端依赖于被调用端的响应;MQ依赖于异步消息传递,调用端不需要等待被调用端的响应。

下面思考下跨进程通信的本质是什么?

跨进程通信的本质实现协同能力。什么是协同能力?协同能力分为三种:

  • 控制:调用方主动支配被调用方的行为,控制被调用方执行某个操作。强依赖、强一致性,失败需要明确反馈调用方。
  • 通知:发送方广播状态变化,不关心接收方如何处理。弱依赖、最终一致性,允许延迟。
  • 交换:双向的数据共享或同步,可能包含请求和响应或批量传输。

判定原则: 如果被调用方关注执行结果,则使用RPC;如果不关注执行结果使用MQ

This post is licensed under CC BY 4.0 by the author.