为什么要使用mq,如何对mq进行技术选型

你为是什么要使用mq

在我们使用一门新技术,总是为了解决一系问题,如果我们不知道为什么,如果只是知道领导让用就用,外面人用我也跟着用,那么你一定是一个不合格的技术人

思考我们系统存在哪些问题

拿最经典的电商项目下订单来说,在我们不引入mq系统目前是有什么问题呢?
一个典型的订单流程我们来看看
我们下一个订单,支付完成后,需要调用各种其他系统,比如物流系统派单、优惠系统发送优惠券、调用库存系统扣减库存等等,一个订单业务核心流程太多,导致性能急剧下降,各系统之间的耦合性高,如果有秒杀场景系统需要为了适应一段时间的高并发而部署过多的机器。如果使用mq这些问题就会迎刃而解,唯一的缺点可能就是系统可用性降低,一旦mq挂了,整个系统之间的通信就都断了,所以我们在使用mq一定要保证mq的高可用

总结:
使用mq能解决的问题:

  1. 解耦:系统A或B比如直接调用接口可能A系统接口改了,B系统也需要跟着改。如果使用mq后系统B不需要管系统A接口如何改动,只需要从mq获取消息即可

  2. 异步:比如用户一次请求到系统A,系统A需要调用系统B才能返回结果
    在这里插入图片描述
    这样同步处理必须要要等到系统B完成后才能返回结果给用户,耗时较长
    引入mq后,系统A可以直接把消息发送到mq,然后返回结果给用户
    在这里插入图片描述

  3. 削峰:比如我们在秒杀高并发场景有系统突然每秒有1W QPS,此时系统A需要调用系统B,系统A、B都部署多台机器能抗住1W QPS,但是因为系统B处理依赖数据库,数据库本身不适合高并发,只能抗6000 QPS,那么如果B系统直接处理这1W QPS数据库就直接会挂
    在这里插入图片描述
    引入MQ后,我们系统B处理请求可以慢慢从mq获取消息,从而达到削峰
    在这里插入图片描述

调研mq

在确定我们需要使用mq后我们就需要对市面主流的mq进行调研,到底该使用哪一种mq呢

现在市面上主流的mq:
activeMQ、rabbitMQ、kafka、RocketMQ

对于以上mq我们一一分析

  1. activeMQ
    activeMQ是几年前的技术,目前很少有公司在用,没有经过高并发的考验,我们不用过多考虑
  2. rabbitMQ
    优势:
  • 高可用,支持集群部署
  • 数据可以保证不丢失
  • 官方文档详细全面
  • 社区活跃
    劣势:
  • 相对其他mq吞吐量相对较低,每秒几万QPS
  • 集群扩展麻烦
  • 开发语言为erlang,国内少有精通erlang语言工程师,无法阅读源代码修改其源码
    适用范围:中小型公司,无高并发场景,无修改源码需求
  1. kafka
    优势:
  • 高吞吐,每秒几十万QPS
  • 高可用,支持集群部署,部分宕机不影响其他机器使用
  • 低延迟,发送消息都是毫秒级
  • 官方文档详细全面
  • 社区活跃
  • 分布式存储
    劣势:
  • 数据丢失,kafka解释消息写入磁盘缓存区,不会写入硬盘,机器宕机会导致磁盘缓冲区数据直接丢失
  • 功能过于简单
  • 如果实现数据0丢失导致吐吞量急剧下降
    适用场景:大数据领域的日志传输,高吞吐,允许数据丢失
  1. RocketMQ
    优势:
  • 高吞吐,每秒几十万QPS
  • 高可用,支持集群部署,部分宕机不影响其他机器使用
  • 功能齐全。支持延迟消息,事务消息,消息回溯,死信队列,消息积压
  • java语言开发,符合大多数公司技术栈
  • 社区活跃
  • 分布式存储
    劣势:官网文档相对简单

总结

总体来说我们可以对上面的mq有一个清晰的认识,如果是中小型公司,没有特别大的并发,不需要修改mq源码适应自己业务可以使用rabbitmq,如果是海量数据需要高吞吐,不用过与担心消息丢失,可以使用kafaka。如果是中大型公司,可以使用RocketMQ,既是高吞吐,又是java语言开发,能修改其源码,出了问题也好查看源码定位问题

关于我

觉得文章不错请扫码关注我吧

weichat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值