有这样一个需求:
专注于为中小企业提供网站建设、网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业新邵免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。小明有两个账户,分别位于A、B两个数据库中,小明需要将A中的资金转到B中。
我们如何实现?
按照下面的方式实现看看有没有问题。
上面操作,正常情况是没有问题。
考虑如下情况:
第7步执行成功之后,网络出问题了,第8步会提交失败,此时的结果是:A库资金减少了100,B库资金却没有增加;这是一个网络问题导致了我们业务失败了,网络因素是程序不可控的一些因素,还有其他的比如运行到7之后,系统突然断电了,也会出现同样的结果。造成了数据错误,对业务影响也是比较大的。
分布式事务可以这么理解:一个业务操作中,会包含很多子业务的,每个子业务都是独立的事务,我们需要考虑的是如何保证这些子业务都成功,或者都失败。
就拿上面的转账来说,A库的资金减少了,由于网络问题,操作B库的connB连接断开了,导致B库资金没有增加;网络问题是可以恢复了,如果网络恢复了,系统能够给B中资金加上,这样最终数据也是正确的;这中间有段时间AB库的资金是不一致的(A库减少了100,B库应该增加100却没有增加,数据是不一致的),但是最终某个时间点数据变为一致了。能够将不一致的时间降到最低是系统需要考虑的问题。
分布式事务中,我们可以接受数据在某个时间段之内不一致,但是数据最终在某个时间点是一致的。
分布式事务系列中主要讲这2种方案,这两种方案基本上可以解决大多数常见的分布式事务的问题,所以咱们必须把这两种方式拿下。
下面我们介绍一下使用可靠消息如何实现?
两个微服务
服务A:用于操作A库中的账户
服务B:用于操作B库中的账户
两个服务都是链接独立的数据库,依靠数据库提供的功能,能够保证各自的事务。
对于用户来说过程如下:
接着
上面整个转账过程中有几点我们需要考虑一下:
依靠消息模式实现分布式事物,比较适合消费者一定会处理成功的场景。比如用户注册发送邮件、发送短信、送积分等。
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。