2019独角兽企业重金招聘Python工程师标准>>>

系统结构

RPC系统结构:+----------+     +----------+
| Consumer | <=> | Provider |
+----------+     +----------+
Consumer调用的Provider提供的服务。Message Queue系统结构:+--------+     +-------+     +----------+
| Sender | <=> | Queue | <=> | Receiver |
+--------+     +-------+     +----------+
Sender发送消息给Queue;Receiver从Queue拿到消息来处理。

功能特点

在架构上,RPC和Message的差异点是,Message有一个中间结点Message Queue,可以把消息存储。

消息的特点

  • Message Queue把请求的压力保存一下,逐渐释放出来,让处理者按照自己的节奏来处理。
  • Message Queue引入一下新的结点,让系统的可靠性会受Message Queue结点的影响。
  • Message Queue是异步单向的消息。发送消息设计成是不需要等待消息处理的完成。

所以对于有同步返回需求,用Message Queue则变得麻烦了。

PRC的特点

  • 同步调用,对于要等待返回结果/处理结果的场景,RPC是可以非常自然直觉的使用方式。
  • 由于等待结果,Consumer(Client)会有线程消耗。

如果以异步RPC的方式使用,Consumer(Client)线程消耗可以去掉。但不能做到像消息一样暂存消息/请求,压力会直接传导到服务Provider。

适用场合说明

  • 希望同步得到结果的场合,RPC合适。
  • 希望使用简单,则RPC;RPC操作基于接口,使用简单,使用方式模拟本地调用。异步的方式编程比较复杂。
  • 不希望发送端(RPC Consumer、Message Sender)受限于处理端(RPC Provider、Message Receiver)的速度时,使用Message Queue。

随着业务增长,有的处理端处理量会成为瓶颈,会进行同步调用到异步消息的改造。

这样的改造实际上有调整业务的使用方式。

比如原来一个操作页面提交后就下一个页面会看到处理结果;改造后异步消息后,下一个页面就会变成“操作已提交,完成后会得到通知”。

不适用场合说明

RPC同步调用使用Message Queue来传输调用信息。 上面分析可以知道,这样的做法,发送端是在等待,同时占用一个中间点的资源。变得复杂了,但没有对等的收益。

对于返回值是void的调用,可以这样做,因为实际上这个调用业务上往往不需要同步得到处理结果的,只要保证会处理即可。(RPC的方式可以保证调用返回即处理完成,使用消息方式后这一点不能保证了。)

返回值是void的调用,使用消息,效果上是把消息的使用方式Wrap成了服务调用(服务调用使用方式成简单,基于业务接口)。

链接

RPC和MQ各自适合的应用场景

远程调用服务(RPC)和消息队列(Message Queue)对比及其适用/不适用场合分析

转载于:https://my.oschina.net/u/3421984/blog/1800633

RPC和MQ对比及其适用/不适用场合相关推荐

  1. 远程调用服务(RPC)和消息(Message Queue)对比及其适用/不适用场合

    在阿里的平台技术部参与开发了Dubbo(远程调用服务)和Napoli(消息解决方案),又给网站应用支持这2个产品很长一段时间,了解了这2个产品的实现及应用对这两个产品的用法. 大部分情况下," ...

  2. MQ对比之RabbitMQ Redis

    消息队列选择:RabbitMQ & Redis RabbitMQ RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,Rabb ...

  3. 架构面试精讲第三节 分布式技术RPC、MQ、Redis、Mysql、restful详解

    07 RPC:如何在面试中展现出"造轮子"的能力? 我们知道,很多应用系统发展到一定规模之后,都会向着服务化方向演进,演进后的单体系统就变成了由一个个微服务组成的服务化系统,各个微 ...

  4. RPC和MQ各自适合的应用场景

    RPC比较适合- 客户端调用哪个服务器比较明确 调用需要立即得到返回结果 架构简单   在一个由多个微服务构成的大系统中,某些关键服务间的调用应当在较短的时间内返回,而且各个微服务的专业化程度较高,同 ...

  5. 主流消息队列MQ对比

    本文将从多个维度综合对比Kafka.RabbitMQ.RocketMQ.ActiveMQ这4款当前最主流的MQ消息中间件产品,希望能为您的下一次产品的架构设计和MQ消息中间件选型提供参考依据. 特点 ...

  6. Redis 队列和MQ 对比

    简介 为了保障基础服务的稳定,需要对MQ进行灾备,这个灾备主要是防患MQ突然不可能,基础服务依然可以调用其他队列来继续正常运行.第一想法是引入其他MQ中间件来做灾备,这样只需要实现一套生产者消费者就好 ...

  7. MQ理论介绍与主流MQ对比

    1.什么是MQ? MQ(Message Queue)消息队列,是基础数据结构中"先进先出"的一种数据结构.指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递--生产者产生 ...

  8. ibm linux mq 发送消息_RabbitMq、ActiveMq、Kafka和Redis做Mq对比

    一.RabbitMq RabbitMQ是一个Advanced Message Queuing Protocol(AMQP)的开源实现,由以高性能.可伸缩性出名的Erlang写成.RabbitMQ Se ...

  9. RPC 和 RESTful对比

    RPC vs RESTful 在微服务中,使用什么协议来构建服务体系,一直是个热门话题. 争论的焦点集中在两个候选技术: (binary) RPC or Restful. 以Apache Thrift ...

最新文章

  1. 2022-2028年中国高等职业教育产业投资分析及前景预测报告
  2. java数组子类型_[改善Java代码]数组的真实类型必须是泛型类型的子类型
  3. Codeforces Round #327 (Div. 2) B Rebranding
  4. ASP.NET Core:CMD命令行+记事本 创建Console程序和Web Application
  5. 微信OAuth2.0网页授权设置一个域名需多个域名使用的问题
  6. OptaPlanner - 把example运行起来(运行并浅析Cloud balancing)
  7. 代码 拉取_Git 利用 Webhooks 实现代码的自动拉取
  8. 论文小综 | Pre-training on Graphs
  9. PyODPS DataFrame:统一的数据查询语言
  10. Spring----Bean装配
  11. C++11之 Move semantics(移动语义)(转)
  12. EXCEL IFS函数的使用
  13. win7电脑误删鼠标键盘驱动_快速恢复win7系统因驱动冲突导致鼠标键盘用不了的详细步骤...
  14. cactiez服务器的系统日志,cactiEZ syslog无数据
  15. 蔡学镛:KPI心理学
  16. 腾讯校招都会问些什么?| 五面腾讯(Java岗)经历分享
  17. 7.13 编写一个程序,将两个字符串连接起来,不要用strcat函数。
  18. Linux下使用icq(转)
  19. mapbox+threejs实现三维气泡球体专题图
  20. 【FPGA——工具篇】32个FPGA开源网站

热门文章

  1. 软工实践第八次作业(软件工程实践总结)
  2. macOs 使用Homebrew升级到MySQL 8系列之后,php无法连接解决方法
  3. PLL与PHY的连接:通道绑定或者不绑定
  4. JEESITE快速开发平台(二)环境搭建
  5. DirectX 9.0 SDK安装
  6. ASP.NET URL重写浅析
  7. 数据结构上机实践第七周项目4 - 队列数组
  8. 数据结构上机实践第三周项目2 - 建设“顺序表”算法库
  9. docker中容器与宿主机之间的网络关系
  10. centos 卸载_9个Linux发行版本,教你如何分别使用命令行卸载安装包