# 《并发设计模式》第59章-半同步半异步模式-使用半同步半异步模式优化支付系统
作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
沉淀,成长,突破,帮助他人,成就自我。
- 本章难度:★★☆☆☆
- 本章重点:了解半同步半异步模式的核心原理与使用场景,初步掌握半同步半异步模式的应用场景,能够初步结合自身项目实际场景思考如何将半同步半异步模式灵活应用到自身实际项目中。
大家好,我是冰河~~
在系统中,一般会分为核心业务和非核心业务,对于核心业务来说,我们需要保证业务的可靠性与稳定性,对于非核心业务来说,当系统并发量达到一定程度时,我们可以将同步调用降级为异步调用,实现异步调用的最常见的方式之一就是将请求放入消息队列,非核心业务从消息队列中消费请求数据进行处理。这就是典型的生产者消费者模式。除此之外,也可以根据具体的业务场景进行分析,采用半同步半异步模式进行处理。
# 一、故事背景
小菜按照需求开发的在用户下单并成功支付后,向用户的手机发送短信,告知用户支付系统余额的消费情况,以及当前的余额的的功能性能很差,在老王的指导下,小菜明白了性能差的原因,并且知道了这种场景可以使用半同步半异步模式提升性能,同时,在老王的耐心讲解下,小菜也同样明白了到底什么是半同步半异步模式。那如何基于半同步半异步模式优化支付系统呢?
对于这个问题,小菜又开始犯难了,明白什么是半同步半异步模式是一回事儿,真正落地到项目中又是另一回事。哎,没办法,奈何自己功力不够,看来还是要寻求老王的帮助才行。最终,在老王的耐心指导下,小菜终于基于半同步半异步模式优化好了支付系统的逻辑。
# 二、流程对比
我们先来看看基于半同步半异步模式优化支付系统之前的流程,如图59-1所示。
可以看到,优化前,用户在电商平台下单并支付成功后,会同步调用短信服务中,发送短信的接口,由于短信服务最终会调用运营商的远程接口,性能会比较低,并且由于网络的不稳定性,稳定性就更差了,这种同步调用短信接口的方式会严重影响系统的性能。
我们再来看看基于半同步半异步模式优化支付系统之后的流程,如图59-2所示。
可以看到,用户在电商平台下单并支付成功后,发送短信的任务会由短信异步任务层将任务放入消息队列,短信同步任务层会消费消息队列中的数据,调用短信服务的接口发送短信。这样,通过消息队列解耦了支付逻辑和发送短信的逻辑。
有些小伙伴可能会问:这不就是生产者消费者模式吗?通过生产者消费者模式进行了解耦。其实,生产者消费者模式是半同步半异步模式的落地方案,也就是说,半同步半异步模式是对生产者消费者模式的一种优化,半同步半异步模式在落地时,还是在生产者消费者模式的基础上实现的。
# 三、类图设计
基于半同步半异步模式优化后的代码类图如图59-3所示。
# 查看全文
加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码