58到家mq【沈老师 架构师之路:MQ消息整理系列】

序:

本文整理自沈老师公众号的mq系列文档:值得推荐下,欢迎大家关注(架构师之路),另外结合到家dmq的李天晨在技术大会分享PPT,比公账号的1分钟系列更加深入,供mq的自研参考,文章有些长,尽量把相关知识点写全。

一 mq介绍

消息总线(Message Queue),后面是网上的介绍:消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。不在赘述。

58到家mq【沈老师 架构师之路:MQ消息整理系列】_第1张图片

二 MQ的业务场景

1 异步处理

demo,滴滴的订单结束的例子:对每个事件的非核心或不需要实时反馈给客户端的逻辑进行拆解,核心的主流程会变简洁。对非核心的逻辑在事件上做订阅之后,进行二级处理。但是都是通过 MysqlBinlog 处理或 MQ 处理。这里关注MQ即可。canal的方式同步binlog不在本文讨论范围。

58到家mq【沈老师 架构师之路:MQ消息整理系列】_第2张图片

2 业务解耦

58到家mq【沈老师 架构师之路:MQ消息整理系列】_第3张图片

这里是沈老师介绍上下游业务耦合的例子,原文链接

总结下对应场景:业务不关注下游结果,或者关注结果(但下游业务耗时较长)

3. 流量销峰填谷

业务场景:下游完成秒杀业务逻辑(库存检查,库存冻结,余额检查,余额冻结,订单生成,余额扣减,库存扣减,生成流水,余额解冻,库存解冻),上游下单业务简单,每秒发起了10000个请求,下游秒杀业务复杂,每秒只能处理2000个请求,很有可能上游不限速的下单,导致下游系统被压垮,引发雪崩。

解决方式,mq从server侧push改为业务侧pull 原文链接

58到家mq【沈老师 架构师之路:MQ消息整理系列】_第4张图片

三 消息必达  原文链接

1消息收到先落地

2消息超时、重传、确认保证消息必达

58到家mq【沈老师 架构师之路:MQ消息整理系列】_第5张图片

MQ消息投递上半场MQ-client-senderMQ-server流程见上图1-3

1MQ-client将消息发送给MQ-server(此时业务方调用的是APISendMsg

2MQ-server消息落地,落地后即为发送成功

3MQ-server将应答发送给MQ-client(此时回调业务方是APISendCallback

 MQ消息投递下半场MQ-serverMQ-client-receiver流程见上图4-6

1MQ-server将消息发送给MQ-client(此时回调业务方是APIRecvCallback

2MQ-client回复应答给MQ-server(此时业务方主动调用APISendAck

3MQ-server收到ack将之前已经落地的消息删除,完成消息的可靠投递

补充下:ppt截图

58到家mq【沈老师 架构师之路:MQ消息整理系列】_第6张图片

58到家mq【沈老师 架构师之路:MQ消息整理系列】_第7张图片

58到家mq【沈老师 架构师之路:MQ消息整理系列】_第8张图片

58到家mq【沈老师 架构师之路:MQ消息整理系列】_第9张图片

四 消息的延迟性

传统的轮询扫表低效,利用环形队列实现延时消息。原文链接:

业务场景:

58到家mq【沈老师 架构师之路:MQ消息整理系列】_第10张图片

58到家mq【沈老师 架构师之路:MQ消息整理系列】_第11张图片


五 幂等性

原文链接:

还是分开从两个角度去说:生产者与消费者。

生产者:MQ-client生成inner-msg-id,保证上半场幂等

这个ID全局唯一,业务无关,由MQ保证。

消费者:业务发送方带入biz-id,业务接收方去重保证幂等

这个ID对单业务唯一,业务相关,对MQ透明。


***************************

通常会采用开源的mq:如RabbitMQ ,还有用于大量日志采集kafka.

到家自研框架DMQ相关介绍:大会PPT链接

******************************

沈老师公众号:架构师之路58到家mq【沈老师 架构师之路:MQ消息整理系列】_第12张图片



你可能感兴趣的:(分布式,mq)