MQ-消息中间件简介

547 阅读2分钟

1 消息中间件与RPC的区别

我们只从架构上进行区别,事实上,这也是 RPC 与消息中间件实现的本质区别:

RPC 及消息中间件都可以提供远程服务调用功能,不同的是,RPC 远程调用类似于本地调用,系统之间只要建立好 TCP 链接,将需要调用的服务接口所需的所有信息序列化后进行传输,便可以在不同系统间进行接口调用服务。RPC 最大的特点就是同步调用,可以保证系统之间的强一致性;消息中间件则是在 RPC 的基础上在调用过程中添加了一个类似于“消息队列”的节点,有了这样一个数据(也就是消息)传输的中转站,消息中间件便可提供比 RPC 强大的多的功能。

2 消息中间件的功能

  • 解耦:消息中间件及 RPC 需要解决的本质问题。如果程序或系统之间耦合性太高,则系统的健壮性(一个服务挂则全挂)及扩展性(如果要添加新功能或去掉旧功能,需要对整个代码进行修改,容易牵一发而动全身)都将非常差,后期不易维护。并且,由于如今软件系统的功能越来越复杂,加之对性能的要求,很多企业级软件都为分布式应用,RPC 及消息中间件在企业级应用中便必不可少;
  • 异步:消息中间件既可以提供异步调用也可以提供同步调用,而 RPC 只能提供同步调用;
  • 错峰流控:同异步调用一样,也是消息中间件提供的强大功能之一。最典型的应用场景应为“秒杀系统”。如果上下游系统间的处理能力有较大差异,便可将消息中间件作为一个消息缓存的地方,在服务端有能力去处理请求时,再将消息 push 给对应消费者;
  • 最终一致性:最常见的应用为金融服务中的交易系统。两个系统间的数据在最终必须保持一致,如 A 扣钱给 B 加钱操作。消息中间件可以提供这种保证,具体内容暂时不做介绍;
  • 广播:RPC 实际是一种点对点的服务,消息中间件则提供点对点及发布-订阅两种模式。