什么是MQ?
消息队列(Message Queue),是基础数据结构中先进先出的一种数据结构。一般用来解决应用解耦、异步消息、流量削峰等问题,实现高性能、高可用、可伸缩和最终一致性架构。作用
异步能提高系统的响应速度,吞吐量服务之间的解耦可以服务之间的影响,提高系统整体的稳定性与扩展性解耦可以实现数据分发。生产者发送一个消息,可以有一个或多个消费者消费,并且消费者的增加或者减少对生产者没有影响削峰可以以稳定的系统资源应对突发的流量冲击缺点
系统可用性降低系统引入外部应用增多,系统的稳定性变差,一旦mq宕机,对业务会产生影响,这就需要如何保证mq的高可用
系统复杂度提高用mq后系统的复杂度会大大提高,以前服务之间可以进行同步的服务调用,引用mq后会变为异步调用数据的链路会变得复杂。会带来很多其他的问题:消息丢失、重复调用、顺序消费等
消息一致性问题A系统处理完业务交由B、C系统做后续处理,若B系统处理成功,C系统处理失败怎么办
几大mq的产品比较
什么是rpc
RPC(Remote Procedure Call)— 远程过程调用,是一个很大的概念, 它是一种通过 从远程计算机程序上跨语言跨平台的请求服务,rpc能省略部分接口代码的开发,可以跨机器之间访问对象(Java rmi),可以有更方便的加密和更高效的数据传输性能, 而不需要了解底层 技术的协议, RPC不仅可以走HTTP/HTTPS, 也可以自定义 tcp 协议, 从而省略HTTP繁杂的规则和冗余信息。
RPC架构
先说说RPC服务的基本架构吧。一个完整的RPC架构里面包含了四个核心的组件,分别是Client ,Server,Client Stub以及Server Stub,这个Stub大家可以理解为存根。分别说说这几个组件:
1)客户端(Client),服务的调用方。
2)服务端(Server),真正的服务提供者。
3)客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成 消息,然后通过 远程发送给服务方。
4)服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的 。
RPC主要是用在大型企业里面,因为大型企业里面系统繁多,业务线复杂,而且效率优势非常重要的一块,这个时候RPC的优势就比较明显了。实际的开发当中是这么做的,项目一般使用maven来管理。比如我们有一个处理订单的系统服务,先声明它的所有的接口(这里就是具体指Java中的interface),然后将整个项目打包为一个jar包,服务端这边引入这个二方库,然后实现相应的功能,客户端这边也只需要引入这个二方库即可调用了。为什么这么做?主要是为了减少客户端这边的jar包大小,因为每一次打包发布的时候,jar包太多总是会影响效率。另外也是将客户端和服务端解耦,提高代码的可移植性。
什么是WebService
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的 通过 Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。从深层次 看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,你可以用任何 你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。
WebService接口实际上就是RPC调用的一种实现,只考虑RPC的stub层实现, soap restfull都是固定走HTTP/HTTPS, 都有定义了自己的规则和实现(xmll和json等), 规定了server能够提供的服务(web service),也是跨语言跨平台的。
三者比较
mq
rpc
webservice
mq主要做延时通信,异步消息处理,注重性能
rpc主要是实时通信,同步处理
同rpc