大名鼎鼎的RPC和MQ到底有啥区别和联系

RPC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制。

RPC框架

知名度较高的有Thrift(FB的)、dubbo(阿里的)。

RPC的一般需要经历4个步骤:

1、建立通信

首先要解决通讯的问题:即A机器想要调用B机器,首先得建立起通信连接,主要是通过在客户端和服务器之间建立TCP连接。

2、服务寻址

要解决寻址的问题,A服务器上如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称是什么。

3、网络传输

1)序列化

当A服务器上的应用发起一个RPC调用时,调用方法和参数数据都需要先进行序列化。

2)反序列化

当B服务器接收到A服务器的请求之后,又需要对接收到的参数等信息进行反序列化操作。

4、服务调用

B服务器进行本地调用(通过代理Proxy)之后得到了返回值,此时还需要再把返回值发送回A服务器,同样也需要经过序列化操作,然后再经过网络传输将二进制数据发送回A服务器。

通常,一次完整的PRC调用需要经历如上4个步骤。

MQ(消息队列)

消息队列(MQ)是一种能实现生产者到消费者单向通信的通信模型,一般来说是指实现这个模型的中间件。

典型的MQ中间件:

RabbitMQ、ActiveMQ、Kafka等

典型的特点:

1、解耦

2、可靠投递

3、广播

4、最终一致性

5、流量削峰

6、消息投递保证

7、异步通信(支持同步)

8、提高系统吞吐、健壮性

典型的使用场景:秒杀业务中利用MQ来实现流量削峰,以及应用解耦使用。

RPC和MQ的区别和关联

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

2.同步调用:对于要立即等待返回处理结果的场景,RPC是首选。

3.MQ 的使用,一方面是基于性能的考虑,比如服务端不能快速的响应客户端(或客户端也不要求实时响应),需要在队列里缓存。

另外一方面,它更侧重数据的传输,因此方式更加多样化,除了点对点外,还有订阅发布等功能。

4.而且随着业务增长,有的处理端处理量会成为瓶颈,会进行同步调用改造为异步调用,这个时候可以考虑使用MQ。

原文地址:https://www.cnblogs.com/cangqinglang/p/11683247.html

时间: 2024-10-08 22:55:08

大名鼎鼎的RPC和MQ到底有啥区别和联系的相关文章

[科普] 4G和3G到底有什么区别?

在开发多线程的程序的时候接触了.NET里面的自旋.这个自旋可以将线程暂停指定的时间,而使用Sleep的话,则是让线程执行无意义的内耗循环. 如下图: Threading.Thread.Sleep 1000 ------------[开始Sleep]---CPU在该线程上循环执行空指令,并且检查时间是否达到延时设定---------------[时间到达,接触延时,继续执行程序]--------------- 这个整个过程,CPU资源都在都在执行本程序. Threading.SpinWait.Sp

Union和Union All到底有什么区别

以前一直不知道Union和Union All到底有什么区别,今天来好好的研究一下,网上查到的结果是下面这个样子,可是还是不是很理解,下面将自己亲自验证: Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union All:对两个结果集进行并集操作,包括重复行,不进行排序: 下面进行简单的测试(因为是测试,所以sql代码写的很简单,没有什么很严格的规范,只是为了理解这两者之间的区别) 严格的标准写法应该先判断数据库是否存在,表是否存在等等约束 第一步,建库: view

print、print_r、echo到底有什么区别?

echo和print都可以做输出,不同的是,echo不是函数,没有返回值,而print是一个函数有返回值,所以相对而言如果只是输出 echo 会更快,而print_r通常用于打印变量的相关信息,通常在调试中使用.echo 不是函数,没有返回值print 是打印字符串print_r 则是打印复合类型 如数组 对象print.print_r.echo到底有什么区别?

来说一说chrome扩展和chrome插件到底有什么区别?

想讨论chrome扩展和chrome插件区别这个话题很久了!但是迟迟没有写.因为我自己也没有搞清楚这两者之间的区别!回想当初是因为需要寻找番羽墙插件才想到去搜索到chrome插件. 想讨论chrome扩展和chrome插件区别这个话题很久了!但是迟迟没有写.因为我自己也没有搞清楚这两者之间的区别!回想当初是因为需要寻找番羽墙插件才想到去维护一个类似的插件网.我甚至问过身边很多程序员这两者之间的区别,说实话能说清楚的也没有几个.今日在论坛里看到有热心的网友推荐这个chrome网,甚是欣慰.但是看到

minSdkVersion、targetSdkVersion、maxSdkVersion、target API level四个数值到底有什么区别

在AndroidMenifest.xml中,常常会有下面的语句: <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="10" android:maxSdkVersion="10" /> 在default.properties中,会看到下面的语句: target=android-10 如果是使用Eclipse的话,还可能会看到这样的警告:Attribute minS

4G和3G到底有什么区别

同学的同学提出一个疑问:"4G和3G到底有什么区别?"我们整个宿舍哑口无言,唯一的回答是:"速度快--"(废话,速度快,这还用你说?!) 这是件多么令人惭愧的事啊,当非专业同学兴致勃勃地向我们请教一些专业问题时,许多情况下都得不到像样的回答,最终被"我们不学这个"搪塞过去.这些还都不是什么高深的问题,仅仅处于用户应用和体验层面. 于是我有了这样的念头,要把这些当初没有回答出来的问题好好回答一下,并且尽量用非专业的通俗语言.观众不在多少,至少是自己

England,Britain和UK到底有什么区别

最佳答案 UK: 联合王国,范围最大,英国全称.包括大不列颠及北爱尔兰群岛. Britain: 不列颠. Great Britain: 大不列颠,包括England英格兰,Scotland苏格兰,及Wales威尔士. England: 英格兰. 类似中国,中国大陆,香港,澳门,台湾之间的故事. 其他回答 England: 广义指英国,狭义指英格兰. Great Britain: 大不列颠,包括英格兰,威尔士及苏格兰. The UK(The United Kingdom缩写)大不列颠及爱尔兰联合王

服务监听在127.0.0.1和0.0.0.0上,到底有什么区别呢?

服务监听在127.0.0.1和0.0.0.0上,到底有什么区别呢?给个实际的例子,大家看看 今天发现在nb1380的mysql从nb1381连不上? 1.使用grant加权限,失败 mysql> select user,host,password from mysql.user; 11 rows in set (0.00 sec) mysql> grant all privileges on *.* to 'root'@'nb1381' identified by '  ' with gran

MVC和MVP到底有什么区别呢?

MVC和MVP到底有什么区别呢? MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写 MVP 全称:Model-View-Presenter :MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示. 而MVP则是对MVC的进一步改造,以Andorid为例,实际上在MVC中很难区分Activity到底应该处于V还