关于中间件
1.1消息中间件产生的背景
- 在客户端与服务器进行通讯时.客户端调用后,必须等待服务对象完成处理返回结果才能继续执行。
- 客户与服务器对象的生命周期紧密耦合,客户进程和服务对象进程都都必须正常运行;如果由于服务对象崩溃或者网络故障导致用户的请求不可达,客户会受到异常
- 点对点通信: 客户的一次调用只发送给某个单独的目标对象。
如下图所示:
在网络通讯中,http请求默认采用同步请求方式,基于请求与响应模式。
客户端想服务器端发送请求的时候,如果服务器端因为网络延迟,不可达情况可能会导致客户端也受到影响。
处理好服务降级、熔断、隔离、限流。
上图是同步的过程,如果会员服务没有及时响应, 订单服务得不到响应,客户端请求订单服务时候也会受牵连。
网络通讯采用同步的优缺点:
优点:及时响应数据给客户端,整个过程同步
缺点: 可能会导致程序阻塞等待,效率低
如果订单服务调用会员服务不通的情况,如何保证数据一致性问题?
如果传统的http方式,采用补偿机制(重试一次),存放日志表+定时Job扫描一遍,服务器端考虑网络延迟提交数据幂等性问题(通过全局Id,或者token区分请求)
1.2 什么是消息中间件
面向消息的中间件(MessageOrlented MiddlewareMOM)较好的解决了以上问
题。发送者将消息发送给消息服务器,消息服务器将消感存放在若千队列中,在合适
的时候再将消息转发给接收者。
这种模式下,发送和接收是异步的,发送者无需等
待; 二者的生命周期未必相同: 发送消息的时候接收者不一定运行,接收消息的时候
发送者也不一定运行;一对多通信: 对于一个消息可以有多个接收者。
消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性框架。
目前使用较多的消息队列有
- ActiveMQ
- RabbitMQ
- ZeroMQ
- Kafka
- MetaMQ
- RoketMQ