关于中间件

1.1消息中间件产生的背景

  •  在客户端与服务器进行通讯时.客户端调用后,必须等待服务对象完成处理返回结果才能继续执行。
  •  客户与服务器对象的生命周期紧密耦合,客户进程和服务对象进程都都必须正常运行;如果由于服务对象崩溃或者网络故障导致用户的请求不可达,客户会受到异常
  •  点对点通信: 客户的一次调用只发送给某个单独的目标对象。

 

如下图所示

在网络通讯中,http请求默认采用同步请求方式,基于请求与响应模式。

客户端想服务器端发送请求的时候,如果服务器端因为网络延迟,不可达情况可能会导致客户端也受到影响。

处理好服务降级、熔断、隔离、限流。

 

 

 

上图是同步的过程,如果会员服务没有及时响应, 订单服务得不到响应,客户端请求订单服务时候也会受牵连。

 

网络通讯采用同步的优缺点:

  优点:及时响应数据给客户端,整个过程同步

  缺点: 可能会导致程序阻塞等待,效率低 

 

如果订单服务调用会员服务不通的情况,如何保证数据一致性问题?

  如果传统的http方式,采用补偿机制(重试一次),存放日志表+定时Job扫描一遍,服务器端考虑网络延迟提交数据幂等性问题(通过全局Id,或者token区分请求)

 

1.2 什么是消息中间件


面向消息的中间件(MessageOrlented MiddlewareMOM)较好的解决了以上问
题。发送者将消息发送给消息服务器,消息服务器将消感存放在若千队列中,在合适
的时候再将消息转发给接收者。

这种模式下,发送和接收是异步的,发送者无需等
待; 二者的生命周期未必相同: 发送消息的时候接收者不一定运行,接收消息的时候
发送者也不一定运行;一对多通信: 对于一个消息可以有多个接收者。

 

消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性框架。

 

目前使用较多的消息队列有 

  • ActiveMQ
  • RabbitMQ 
  • ZeroMQ
  • Kafka
  • MetaMQ
  • RoketMQ

 

posted @ 2018-11-09 17:16  toov5  阅读(166)  评论(0编辑  收藏  举报