RocketMQ消息中间件(六上)-订单系统的问题分析解答,MySQL中的binLog日志是什么?和大数据团队数据传输有什么关系呢?

前言

在rocketMQ一中,分析了很多图文说明订单系统可能会遇到的一些问题,这次继续来分析和解决这些问题,或者是换句话讲,引入了MQ对叮当系统进行了哪些质一样的改变?

一个订单系统中存在的问题:

1、下单核心流程环节太多,性能比较差。
2、订单退款的流程可能面临退款失败的风险。
3、关闭过期订单的时候,存在扫描大量订单数据的问题。
4、跟第三方物流系统耦合在一起,性能存在抖动的风险。
5、大数据团队要获取订单数据,存在不规范直接查询订单数据库的问题。
6、做秒杀活动时候,订单数据库压力比较大。

1.下单核心流程环节太多,性能比较差

【先看下下单环节的图】
下单环节
每次支付完一个订单后都需要做同样的这些操作:

· 更新订单状态
· 扣减库存
· 增加积分
· 发放优惠券
· 发送短信
· 通知发货

导致的问题:一次核心链路执行时间过长,可能长达几秒钟!这不完犊子了,只要够快,穷就追不上我【=.=】

如何解决呢? 首先回想一下什么叫做异步,什么叫做同步,这个问题基本上在概念上来说就已经解决了。
【图看起来表达比较清楚】
在这里插入图片描述
解释下:
例如:更新订单状态需要30ms,扣减库存需要80ms,调用第三方短信需要200ms,调用仓储和发货500ms,促销系统200ms,积分系统200ms,还不算网络波动等其他的情况,整个链路执行完,客户要在页面转好几秒中的时间。
【优化后:更新订单状态30ms,扣减库存80ms,总共110ms就可以响应回去了,客户端是很爽的,其他的操作异步的从mq中获取数据执行自己要处理的业务逻辑,这样就不会影响到整个订单核心链路的性能了】
问题貌似得到了解决的方案,但是还存在很多细节问题:思考下,如果消息没有发送成功怎么办?发送成功了,消费者没有消费怎么办?消费者消费了,业务代码执行失败怎么办?要想代码写的好,必须要有洁癖,提前思考的准备,这些问题在后面陆陆续续都会得到一定的解答,但是这个也不算难,可以思考思考

这里贴段代码生产者和消费者是如何发送消息和消费消息的:

首先对之前的业务逻辑做一定的改动【也就是本文的图一】:
1.改造系统,订单系统除掉调用积分系统,促销系统,推送系统以及仓储系统的业务逻辑,改成发送一个消息到MQ中;
2.另外的积分系统、促销系统、推送系统和仓储系统都要从MQ中获取消息,根据消息来执行自己的业务逻辑;

producer生产者代码编写:
1.引入rocketMQ-client的依赖;
2.下面展示一些 生产者的内联代码片

// An highlighted block
public class RocktProducer{
   
//这个是rocket的生产者类,用这个生产者类发送消息到MQ
private static DefaultMQProducer producer;

static{
   
//构建一个producer实例对象
producer  = new DefaultMQProducer("order_producer_group");
//为producer设置nameServer的地址,可以拉取路由信息
//这样才知道每个topic的数据分散在哪些broker机器上
//然后此可以把消息发送到broker上去
producer.
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖喱ABC

无需打赏,共同进步学习!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值