RPC和MQ对比及其适用/不适用场合
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对比及其适用/不适用场合相关推荐
- 远程调用服务(RPC)和消息(Message Queue)对比及其适用/不适用场合
在阿里的平台技术部参与开发了Dubbo(远程调用服务)和Napoli(消息解决方案),又给网站应用支持这2个产品很长一段时间,了解了这2个产品的实现及应用对这两个产品的用法. 大部分情况下," ...
- MQ对比之RabbitMQ Redis
消息队列选择:RabbitMQ & Redis RabbitMQ RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,Rabb ...
- 架构面试精讲第三节 分布式技术RPC、MQ、Redis、Mysql、restful详解
07 RPC:如何在面试中展现出"造轮子"的能力? 我们知道,很多应用系统发展到一定规模之后,都会向着服务化方向演进,演进后的单体系统就变成了由一个个微服务组成的服务化系统,各个微 ...
- RPC和MQ各自适合的应用场景
RPC比较适合- 客户端调用哪个服务器比较明确 调用需要立即得到返回结果 架构简单 在一个由多个微服务构成的大系统中,某些关键服务间的调用应当在较短的时间内返回,而且各个微服务的专业化程度较高,同 ...
- 主流消息队列MQ对比
本文将从多个维度综合对比Kafka.RabbitMQ.RocketMQ.ActiveMQ这4款当前最主流的MQ消息中间件产品,希望能为您的下一次产品的架构设计和MQ消息中间件选型提供参考依据. 特点 ...
- Redis 队列和MQ 对比
简介 为了保障基础服务的稳定,需要对MQ进行灾备,这个灾备主要是防患MQ突然不可能,基础服务依然可以调用其他队列来继续正常运行.第一想法是引入其他MQ中间件来做灾备,这样只需要实现一套生产者消费者就好 ...
- MQ理论介绍与主流MQ对比
1.什么是MQ? MQ(Message Queue)消息队列,是基础数据结构中"先进先出"的一种数据结构.指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递--生产者产生 ...
- ibm linux mq 发送消息_RabbitMq、ActiveMq、Kafka和Redis做Mq对比
一.RabbitMq RabbitMQ是一个Advanced Message Queuing Protocol(AMQP)的开源实现,由以高性能.可伸缩性出名的Erlang写成.RabbitMQ Se ...
- RPC 和 RESTful对比
RPC vs RESTful 在微服务中,使用什么协议来构建服务体系,一直是个热门话题. 争论的焦点集中在两个候选技术: (binary) RPC or Restful. 以Apache Thrift ...
最新文章
- 2022-2028年中国高等职业教育产业投资分析及前景预测报告
- java数组子类型_[改善Java代码]数组的真实类型必须是泛型类型的子类型
- Codeforces Round #327 (Div. 2) B Rebranding
- ASP.NET Core:CMD命令行+记事本 创建Console程序和Web Application
- 微信OAuth2.0网页授权设置一个域名需多个域名使用的问题
- OptaPlanner - 把example运行起来(运行并浅析Cloud balancing)
- 代码 拉取_Git 利用 Webhooks 实现代码的自动拉取
- 论文小综 | Pre-training on Graphs
- PyODPS DataFrame:统一的数据查询语言
- Spring----Bean装配
- C++11之 Move semantics(移动语义)(转)
- EXCEL IFS函数的使用
- win7电脑误删鼠标键盘驱动_快速恢复win7系统因驱动冲突导致鼠标键盘用不了的详细步骤...
- cactiez服务器的系统日志,cactiEZ syslog无数据
- 蔡学镛:KPI心理学
- 腾讯校招都会问些什么?| 五面腾讯(Java岗)经历分享
- 7.13 编写一个程序,将两个字符串连接起来,不要用strcat函数。
- Linux下使用icq(转)
- mapbox+threejs实现三维气泡球体专题图
- 【FPGA——工具篇】32个FPGA开源网站