《从零开始带你成为消息中间件实战高手》 笔记三

一、第三十七课  改造订单支付环节

原来的架构图

《从零开始带你成为消息中间件实战高手》 笔记三_第1张图片

现在的架构图

《从零开始带你成为消息中间件实战高手》 笔记三_第2张图片

经过改造后,一旦支付成功,系统只需要更新订单状态+扣掉库存+发送订单消息到RocketMQ这三步就足够了,而积分、营销、推送、仓储等系统则从MQ中消费信息

我们部署的2台Master Broker,Topic数据会分散在这2个Master Broker上。因此当我们往Topic发送订单数据,会根据一定的算法把消息发送到一个Broker上

二、第三十九课  RocketMQ的发送方式和消费模式

1、发送消息的方式

1)同步发送消息

通过这行代码发送消息到MQ,SendResult sendResult = producer.send(msg),然后系统会卡住,等待MQ返回结果

2)异步发送消息

设置producer.setRetryTimeWhenSendAsyncFailed(0),然后将发送改造成prodcer.send(msg, new SendCallback()),这样MQ返回的结果会回调SendCallback中的内容

3)发送单向消息

producer.sendOneway(msg)

发送完消息到MQ后就继续往下走了,不需要MQ的返回结果

2、消费模式

1)push模式

broker会主动把消息发给消费者

2)pull模式

消费者主动发请求到broker拉取消息过来

三、第四十一课  如何使用MQ同步订单数据给大数据团队

原先大数据团队是直接查询订单数据库的,导致数据库负载很高,影响订单系统的正常运行,结构图如下 

《从零开始带你成为消息中间件实战高手》 笔记三_第3张图片

现在使用Canal,将订单数据库中的数据发送到RocketMQ中,再由数据同步系统同步到大数据自己需要的环境中,使订单系统与大数据系统彻底解耦。后续如果有别的团队需要这些数据,也可以直接从RocketMQ中去消费数据

《从零开始带你成为消息中间件实战高手》 笔记三_第4张图片

四、第四十三课  秒杀系统的商品详情页面架构设计

 需要将商品详情页面静态化,就会使用到CDN+Nginx+Redis的多级缓存方案。用户会先到距离自己最近的CDN上获取缓存数据,如果CDN上缓存过期了,就会到公司的Nginx上获取缓存数据。如果Nginx上的缓存过期了,就会到Redis上获取缓存数据。如果Redis上缓存过期了,才会查询数据库。一般极少的请求才会查询数据库

《从零开始带你成为消息中间件实战高手》 笔记三_第5张图片

 五、第四十五课  秒杀系统的异步化架构以及精准扣减库存方案

方案: 

  1. 在前端/客户端设置秒杀答题,错开大量人下单的时间,阻止作弊器刷单
  2. 独立出来一套秒杀集群,与原来的订单集群分开,使得秒杀不会影响正常的业务
  3. 基于Redis实现库存的扣减,一旦库存扣减完毕,秒杀结束
  4. 秒杀结束后,Nginx过滤掉无效的请求,大幅度削减转发到后台的请求量
  5. 将秒杀的订单数据放入RocketMQ中进行削峰,订单系统慢慢消费数据

《从零开始带你成为消息中间件实战高手》 笔记三_第6张图片

六、阶段性复习

《从零开始带你成为消息中间件实战高手》 笔记三_第7张图片

思考题

1、Kafka和RabbitMQ有几种发送模式,有几种消费模式?

你可能感兴趣的:(RocketMQ,中间件)