课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
分布式编程开发架构是目前大多数程序员都在使用的一种架构方式,下面我们就通过案例分析来了解一下,分布式编程开发适用哪些开发需求。
多个微服务组合成原子操作
有一类业务场景是需要把多个微服务组合成原子操作:假设您有一个活动业务,用户点击领取按钮后,会领取一张优惠券,和一个月的会员。优惠券和会员分别属于不同的服务,需要都被调用,不希望出现一个服务调用成功,另一个因为网络或者其他故障导致没有成功。
这个场景适合可靠消息方案,可以使用rocketmq、rabbitmq等,发送给消息队列的消息,一定要等收到队列接收确认,再返回应用程序。
本地事务+多个微服务组合为原子操作
有一类业务与前一种业务情况类似,但有一些差别:假设您有一个新用户注册成功后,领取一张优惠券和一个月会员。如果注册不成功,不希望调用领取;只有注册成功才领取。
这种情况,适合本地消息方案,或者事务消息方案。这两种方案都能保证本地事务和消息的原子性。
订单类对一致性要求较高的业务
订单交易类业务,涉及资金、库存、优惠券等多个服务,完成一个订单,需要相关的各个服务组合成一个整体可回滚的事务。如果订单进行过程中金额先扣减,后续因为库存不够只能退款,把金额补偿加回来。在这个过程中用户看到了金额减少,又金额变回来,体验很差。一般这类业务都会先冻结资金,如果订单能成功,再扣减资金;不能成功,则解冻资金,这样能够让资金信息对用户更友好。
这种场景适合TCC方案,可以在TCC的Try中冻结资金,Confirm中扣减资金,Cancel中解冻资金
一致性要求不高的可回滚业务
如果业务对事务中的一致性要求不高,允许用户看到中间状态,例如用户的积分数据等。
这种模式适用SAGA模式,SAGA对比与TCC,只有正向操作和逆向补偿操作,会更加简单
耗时较久的全局事务
耗时较旧的全局事务适合可靠消息和SAGA,不适合TCC和XA,因为大多数的XA和TCC实现,为了方便用户灵活的定义事务,通常把事务的进度保存在应用程序,一旦事务进行中应用程序崩溃,无法往前进行下一步,只能回滚。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。