消息中间件(一)

前言

我们知道订单系统堪称整个电商交易平台的核心,它需要与很多内部模块、外部第三方系统打交道。其实从下订单到支付完成这个过程中,需要完成很多额外的步骤:

  • 为用户积分
  • 发放红包卡券
  • 库存扣减
  • 通知物流系统
  • 发送短信通知

本文就以订单系统为基础,看完后相信你会对消息中间件的原理有更清晰的认识。本文将会从以下几个方面来讲述相关知识,相信大家耐心看了之后肯定有收获,码字不易,别忘记点赞哦。

  • 什么是消息中间件,消息中间件的作用
  • 实现三高(高并发、高可用、高性能)的策略
  • 消息中间件的种类
  • 如何选择合适的消息中间件

正文

 

01 什么是消息中间件

对于一个电商APP而言,每卖掉了一个商品,就要扣减掉商品的库存,而且一旦用户成功支付了,还需要将订单的状态更新成待发货。

在完成这些最核心的功能后,其实是有很多事情要做的,比如上图红色的部分。如果这些动作都以同步方式来完成,根据线上系统的一般统计,多个子步骤全部执行完毕,加起来大概需要1秒~2秒的时间。

有时候在高峰期并发量特别大,服务器的磁盘、IO、CPU的负载会很高,执行SQL语句的性能也会有所下降。因此有的时候甚至需要几秒钟的时间完成上述几个步骤。

那么影响是什么呢?

想象一下,如果你是一个用户,在支付完一个订单之后,界面上会有一个圈圈不停的旋转,让你等待好几秒之后才能提示支付成功。对用户来说几秒钟的时间,会让人非常不耐烦的!

所以首先针对子步骤过多、速度过慢、让用户支付之后等待时间过长的问题,就是订单系统亟需解决的问题!

而解决这个问题的一大利器就是消息中间件,英文全称“Message Queue”,简称MQ。

 

在引入消息中间件以后,系统A和系统B之间就由同步变为异步通信,而完成这样的一个核心概念就是“消息”

系统A发送消息给MQ后,就认为已经完成了自己的任务;然后系统B根据自己的情况,可能会在系统A投递消息到MQ之后的1秒内,也可能是1分钟之后,也可能是1小时之后,多长时间都有可能。

反正不管是多长时间后,系统B会根据自己的节奏从MQ里获取到一条属于自己的消息,再根据消息的指示完成自己的工作。

在“异步调用”的整个过程中,系统A仅仅是发个消息到MQ,至于系统B什么时候获取消息,有没有获取消息,系统A是不管的。

02 消息中间件的作用

顺着这个思路,我们再重新思考一下订单系统。由于支付订单流程中,过多的子步骤如红包发放、短信push通知、积分等等导致性能很差。

在引入MQ后,我们可以让订单系统仅仅完成最核心的功能,然后发送消息到MQ。比如需要进行减库存,就发送一个消息到库存消息队列中,然后库存系统从这个MQ里获取消息再进行处理就可以,把这些很耗时的步骤慢慢执行,从而也实现了系统之间的解耦

在双11大促活动的时候,同样可以让瞬间涌入的大量下单请求到MQ里去排队,然后让订单系统在后台慢慢的获取订单,以数据库可以接受的速率完成操作,避免瞬间请求量过大击垮数据库。

这也是MQ的另一重要功能:削峰填谷,我会在接下来的文章更加详细的以秒杀场景进行介绍。

所谓消息中间件,就是一种系统,它自己本身也是独立部署的,通过消息的收发,是多个系统之间不局限于同步调用,通过异步调用更好地实现解耦。

03 实现三高的策略

具体来说,消息中间件,也就是MQ只是一种概念和模式。在真正使用的时候,我们要考虑如何正确使用MQ来满足我们的需求。简单来看,可以从以下几个维度进行思考:

(1)MQ的性能表现怎么样?

(2)假如机器硬件条件相同,比如互联网公司最为常见的2G4核或者4G8核,能抗住多少QPS,每秒几千QPS或几万QPS,什么程度会到达性能瓶颈?

(3)性能有多高,比如向MQ发送消息需要2毫秒还是20毫秒?

(4)能够高可用吗,如果部署的一台服务器宕机了怎么办,有没有自动修复的机制?

(5)可靠吗,会不会丢失数据?

(6)支持线性的集群扩展吗,添加更多机器的机制复杂吗?

(7)功能性满足吗,比如经常需要使用的功能:延迟消息、事务消息、消息累积、消息回溯、死信队列等等?

(8)官方文档是否完整且清晰,社区活跃吗,如果遇到技术问题我们是否方便地找到解决办法?

(9)在工业中是否已经被广泛使用了,已经被大公司验证过它的质量?

(10)它是用什么语言写的,如果有个性化的需求,是否可以对源码进行修改?

借着这个机会,我们可以对MQ有一个基本的了解,把这些事情都搞清楚了,你会发现消息中间件技术并没你想的那么难。

04 消息中间件的种类

目前业界使用最广泛的是Kafka、RabbitMQ以及RocketMQ这三种消息中间件,因此我们主要针对它们来进行调研对比。接下来我们从性能、可靠性、功能性等多方面维度,来分析一下它们的优势和劣势。

                                                                        需要更多教程,微信扫码即可

                                                                              

                                                                                         👆👆👆

                                                        别忘了扫码领资料哦【高清Java学习路线图】

                                                                     和【全套学习视频及配套资料】
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值