1 消息队列讲解
1.1 定义
MQ(Message Queue)消息队列,即符合“先进先出”的逻辑。将所要传输的数据/消息放到队列中,实现消息传递。
生产者将消息放到队列,然后由消费者处理。消费者可以到置顶的队列拉取消息,或者订阅响应的队列,由MQ服务端推送消息。
1.2 消息队列的作用
消息队列中间件是分布式系统中重要的组件,主要解决应用解耦、异步消息、流量消峰等问题,实现了高性能、高可用、高伸缩和最终一致性架构。
1.2.1 解耦
定义:一个业务需要多个模块共同实现,或者一条消息由多个系统处理,只需要主业务完成后,发送一条MQ,然后其余模块负责消费MQ消息,即可实现业务,降低模块间的耦合。
1.2.2 异步
主业务执行结束后,充数业务通过MQ,异步执行,减少业务的响应时间,提高用户体验。
1.2.3 削峰
在高并发情况下,业务异步处理。
1.3 消息队列的缺点
1、系统可用性降低:依赖服务越多,服务越容易垮掉,需要考虑MQ瘫痪的情况。
2、系统复杂性提高:需要考虑消息丢失。消息重复消费。消息传递的顺序性。
3、一望无垠一致性:主业务和从属业务一致性的处理。
2 RPC讲解
2.1 rpc是什么?
RPC(Remote Procedure Call)远程过程调用协议,是一种通过网络从远程计算机上请求的服务,而不需要了解底层网络技术的协议。
通俗理解:实现像调用本地方法一样,调用远程的进程。
3 消息队列MQ与RPC对比
3.1 MQ
区别:面向数据、生产者与消费者、有缓冲节点、异步、系统级/模块级通信
选型:RabbitMQ、ActiveMQ/Apollo、ZeroMQ、memcacheQ、Redis、MSMQ、kafka/jafka
场景:
1、消息的发送者和消费者要解耦的情况
2、发送者并不明确谁是消费者
3、发送者并不关心谁在消费信息
4、各个消费者可以从不同的角度入手处理信息
5、消费者的处理结果不返回给发送者
6、消息的发送是异步的
7、消息的关注者不止一个
3.2 RPC
区别:面试动作、请求响应模式、同步、对象级/函数级通信
场景:
1、客户端调用哪个服务器比较明确
2、调用需要立即得到返回结果
3、架构简单
参考地址:
https://www.cnblogs.com/unreal/p/6631977.html
<h2><a id="1__0"></a>1 消息队列讲解</h2>
<h3><a id="11__2"></a>1.1 定义</h3>
<p>MQ(Message Queue)消息队列,即符合“先进先出”的逻辑。将所要传输的数据/消息放到队列中,实现消息传递。</p>
<p>生产者将消息放到队列,然后由消费者处理。消费者可以到置顶的队列拉取消息,或者订阅响应的队列,由MQ服务端推送消息。</p>
<h3><a id="12__8"></a>1.2 消息队列的作用</h3>
<p>消息队列中间件是分布式系统中重要的组件,主要解决应用解耦、异步消息、流量消峰等问题,实现了高性能、高可用、高伸缩和最终一致性架构。</p>
<h4><a id="121__12"></a>1.2.1 解耦</h4>
<p>定义:一个业务需要多个模块共同实现,或者一条消息由多个系统处理,只需要主业务完成后,发送一条MQ,然后其余模块负责消费MQ消息,即可实现业务,降低模块间的耦合。</p>
<h4><a id="122__16"></a>1.2.2 异步</h4>
<p>主业务执行结束后,充数业务通过MQ,异步执行,减少业务的响应时间,提高用户体验。</p>
<h4><a id="123__20"></a>1.2.3 削峰</h4>
<p>在高并发情况下,业务异步处理。</p>
<h3><a id="13__24"></a>1.3 消息队列的缺点</h3>
<p>1、系统可用性降低:依赖服务越多,服务越容易垮掉,需要考虑MQ瘫痪的情况。</p>
<p>2、系统复杂性提高:需要考虑消息丢失。消息重复消费。消息传递的顺序性。</p>
<p>3、一望无垠一致性:主业务和从属业务一致性的处理。</p>
<h2><a id="2_RPC_32"></a>2 RPC讲解</h2>
<h3><a id="21_rpc_34"></a>2.1 rpc是什么?</h3>
<p>RPC(Remote Procedure Call)远程过程调用<strong>协议</strong>,是一种通过网络从远程计算机上请求的服务,而不需要了解底层网络技术的协议。</p>
<p>通俗理解:实现像调用本地方法一样,调用远程的进程。</p>
<h2><a id="3_MQRPC_48"></a>3 消息队列MQ与RPC对比</h2>
<h3><a id="31_MQ_50"></a>3.1 MQ</h3>
<p>区别:面向数据、生产者与消费者、有缓冲节点、异步、系统级/模块级通信</p>
<p>选型:RabbitMQ、ActiveMQ/Apollo、ZeroMQ、memcacheQ、Redis、MSMQ、kafka/jafka</p>
<p>场景:<br />
1、消息的发送者和消费者要解耦的情况<br />
2、发送者并不明确谁是消费者<br />
3、发送者并不关心谁在消费信息<br />
4、各个消费者可以从不同的角度入手处理信息<br />
5、消费者的处理结果不返回给发送者<br />
6、消息的发送是异步的<br />
7、消息的关注者不止一个</p>
<h3><a id="32_RPC_65"></a>3.2 RPC</h3>
<p>区别:面试动作、请求响应模式、同步、对象级/函数级通信</p>
<p>场景:<br />
1、客户端调用哪个服务器比较明确<br />
2、调用需要立即得到返回结果<br />
3、架构简单</p>
<p>参考地址:<br />
https://www.cnblogs.com/unreal/p/6631977.html</p>
留言