Spring Cloud 微服务项目实战
姚秋辰(姚半仙)
PayPal 研发经理
15862 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
结束语 (1讲)
Spring Cloud 微服务项目实战
15
15
1.0x
00:00/00:00
登录|注册

28 | 消息驱动:谁说消息队列只能削峰填谷?

你好,我是姚秋辰。
说起消息驱动,它可是一个有点年头的老技术了,如今借着微服务架构这股春风可谓是混得春风得意。但凡你去大厂面试,被问到三高系统架构的问题,高低得整两句:消息驱动是如何“削峰填谷”来解决高并发的。
要知道,消息驱动可不仅仅停留在面试环节,它的用武之地也不只局限于“削峰填谷”。今天我就带你了解一下,消息驱动技术在微服务系统中有哪些常用场景。这节课我会基于过去开发过的实际项目,来一一列举各种应用场景,加深你的学习体感。
前面提到了削峰填谷,但我还偏就不从这老掉牙的话题开场,这种“面试宝典”里的经典问题,就是在校生都能答出个一二三来。我这里要为你介绍的第一个消息驱动场景,就是和微服务架构最贴合的“服务间解耦”。

服务间解耦

如果你认为把服务拆分成微服务就叫做服务间解耦,那咱对微服务的认知还停留在第一层。在很多场景中,我们还需要借助消息驱动组件对业务场景做进一步解耦。
举个例子,在我们网购下单完成付款之后,有一系列的后续业务流程会被执行。比如买家短信和邮件通知、IM 和站内信推送、金币和积分结算、卖家端履约流程等等。有时候搞线上活动,还会在付款完成之后触发赠券服务。
我们假设这些业务场景都被拆分成了微服务,从业务完整性的角度来讲,为了实现付款后自动触发完整链路,交易服务的回调接口必须挨个调用我前面提到的各个业务系统。如果未来需要接入新的业务场景,你还得往回调接口里加上一个新的系统集成点。再从从服务容错的角度考虑,你还得兼顾关键场景(如金币 + 积分结算)的失败重试,这些逻辑都掺和到了支付成功的回调接口里。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

消息驱动技术在微服务架构中的广泛应用展现了其重要性和灵活性。通过消息驱动实现服务间解耦,可以间接解除上下游服务之间的耦合,实现业务场景的解耦。消息广播可用于处理热点数据和构建本地缓存,延迟消息可应用于订单确认、取消订单等业务场景,实现未来某个时间执行的业务逻辑。削峰填谷则是一种平滑利用资源的手段,适合在高并发业务中使用。此外,文章还介绍了消息组件的花式玩法,如“事务性消息”、“死信队列”和“一致性哈希Routing”,并推荐了Pulsar作为一款运行成本低、灵活且具备优秀扩展性和可靠性的消息组件。了解每个消息中间件的特点,可以帮助在业务场景中做出更好的技术选型判断。整体而言,本文深入探讨了消息驱动技术在微服务系统中的多样化应用,为读者提供了深入了解消息队列的重要性和灵活性的视角。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spring Cloud 微服务项目实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 快乐的小土豆
    想问下一般都用消息队列做异步通知,而RPC框架同步获取结果吗

    作者回复: 有些rpc框架也支持异步调用,MQ的场景是“可靠消息投递”,用mq送达率比rpc要高

    2022-02-16
    5
  • peter
    请教老师几个问题啊: Q1 消息队列怎么实现延迟任务? 消息队列只能收发消息,不能执行任务啊。是消息队列定时发消息给具体业务来实现的吗? Q2 用实时流技术来识别热点数据,一般是怎么做的?用大数据组件吗?比如spark。 Q3 “还需要借助消息分区等功能降低消息的积压量”, 消息分区怎么能降低消息积压?积压是因为没有消费;没有消费的话,即使分区也不能降低积压量啊。 Q4 消息队列的监控一般是怎么做的?消息队列一般自己没有监控软件吧,需要引入额外的监控软件吗? Q5 一键开店,是指给某个具体商户开店吗?如果是指具体商户的话,一般没多少商品啊。比如小米,算是产品比较多的啦,但也就几十种商品,SKU也不会到几十万的规模啊。一般商家的商品更是非常有限。 Q6 能否再出一章来讲解一下总结部分的几个内容? 包括“事务性消息”、“死信队列”、“一致性哈希Routing”,以及pulsa。总结部分提到的这几个部分感觉也非常重要。

    作者回复: Q1:延迟消息后面会讲到 Q2:stream流分析rpc或网关日志,各个大厂有不同做法 Q3:消息分区相当于分库分表同理 Q4:有的消息组件有插件可以支持,有的cloud版都有云服务商提供了配置参数做预警 Q5:零售行业SKU数量多,线下卖场

    2022-02-16
    2
  • Lee
    老师好,想请教一下 Q1:关于顺序消息,以rocketmq为例,如果key设置的不太合适,那么会导致,虽然分区了,但是某个分区消息堆积,该情况下如果处理? Q2:在消息选型中,老师觉得kafka(3.0抛弃zk)、rocketmq、rabbitmq、activemq 综合来看怎么去做选型比较好 Q3:消息丢失,一直会有听到消息丢失这个话题,想知道怎么保证消息不丢失以及哪些场景会发生消息丢失 谢谢

    作者回复: Q1:rocketmq用的不多,如果拿rabbitmq来说,不想重置key的话,在一致性和时效要求不高可以通过TTL、私信队列或者Lazy Queues来减压 Q2: 还是需要根据具体业务要求来选择,比如说做消费DB dump file里的内容,还有大量日志处理这种消息堆积场景,就适合Kafka。其他需要“可靠投递”的,往往选rocketmq和rabbit,但activemq不用选了,消息堆积能力和性能都落后很多 Q3:可靠投递在kafka里可以选择exact once, at least once等等策略,但如果要更高的可靠投递+原子性,可以用MQ的事务型消息功能

    2022-05-15
  • 6点无痛早起学习的和尚
    分享一下消息队列在我们团队其中的一些应用: ## 延迟业务: 背景,记录用户的行为,当用户的行为 x s/m/h,未进行下一步行为的时候,我们就需要执行相关策略。 比如配置策略:当用户进入商品界面 30m 之后未点击购买,就给用户发送这个商品购买 push。 当用户点击京东 iPhone 13 pro 商品之后,这时候就会发一个延时消息(30m),30m 之后,消费这条消息回溯用户的行为是否点击了购买,如果没有点击购买,就给用户发 push。 ## 削峰填谷:拿来做业务的兜底,一个信贷业务,用户需要去授信才能拿到额度,但是授信过程中强依赖的外部资方系统出问题了(这时候再去授信肯定会去失败),但是肯定不能损失这一部分用户,这时候就一个开关控制,当依赖的资方系统出问题时,把这时候的授信用户丢进消息队列里,当资方系统恢复之后,开启消费开关,消息队列里授信用户进行授信。 这个方案就可能损失用户的用户体验,比如提示用户授信结果 xx 小时之后出来,但是保证了用户不流失。
    2022-02-16
    5
    18
  • wllq_1223
    电商OMS系统中,订单下载后处理过程涉及的业务比较多,如匹配仓库、匹配快递、扣减库存、打标签、匹配赠品规则、拆单、合单等等,如果从订单下载到处理整个流程同步进行将大大降低订单处理效率,下游的订单处理服务也需要更多的资源。 订单下载后入系统订单表,发送消息进行转单处理,再发送消息进行系统订单处理,大促期间只需要适当增加订单下载服务就可以扛得住大流量的冲击。
    2022-02-16
    2
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部