单体系统下单 在单体的电商系统中,用户下单成功,由于整个下单操作在同一方法中完成,并且商品对应的表和订单对应的表都在同一个数据库中,按照数据库的原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily)特性。下单服务成功后,扣减库存,生成订单操作的数据会同时生效。流程如下: 分布式系统下单 在分布式系统中,将下单过程进行微服务化,下单过程拆分为订单服务和商品服务,此时,数据库也进行拆库,划分为对应的订单数据库和商品数据库。如果,直接按照如上的流程原来的同一事务中的方法替换为对应的微服务,流程图如下: 在下单服务中使用RPC或者HTTP请求调用商品服务和订单服务时,可能会因为网络异常或者服务器宕机,造成商品数据与订单数据库数据不一致。可能存在订单服务由于调用商品时,因为异常数据回滚在订单数据库中没有生成数据,而商品服务处理成功了商品数据库中的库存扣减成功。网络异常或者服务器宕机出现的原因示例图如下: 数据库的两阶段提交 如何解决如上直接拆分为微服务后,存在的数据不一致的问题呢?这时,就需要引入分布式事务了。如果,要让库存扣减和订单的生成在分布式系统中同时生效,可以通过数据库的两阶段提交方式实现,根据CAP理论(详细可以参考深入理解CAP理论和适用场景)2PC属于CP模式。 对数据库分布式事务有了解的同学一定知道数据库支持的2PC,又叫做 XA Transactions。其中,XA 是一个两阶段提交协议,该协议分为以下两个阶段: 其中,如果有任何一个数据库否决此次提交,那么所有数据库操作的数据都会回滚。此种方式会有严重的性能影响,并且也有如下几个缺点: 消息中间件+HttpClient实现分布式事务 在分布式系统中,一般更加重视系统的可用性,基于此人们提出了BASE理论,它是用来对CAP定理进行进一步扩充的。BASE理论指的是: BASE理论是对CAP中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。在项目中,使用Kafka+HttpClient基于BASE理论实现了分布式事务。实现的思路如下: 以下单服务为例,流程图如下: 其余实现方式可以参考聊聊分布式事务,再说说解决方案 业务场景介绍
分布式事务
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算