课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在上文中给大家简单介绍了数据库事务的概念与特点等内容,而本文我们就继续来说说,分布式事务形式与实现方法。
分布式事务有两种形式,一种是分布式数据库事务,另一种分布式微服务事务。
一种分布式数据库事务由传统单机事务进化而来。当单机数据库无法支撑所有负载时,必然要将数据拆分到多台数据库。如果一次操作涉及到多台数据库,那就需要一种方案来维护整个数据库集群的事务特性,也就是ACID特性。
二种分布式微服务事务由分布在不同机器上的服务组成。近微服务架构兴起,不同的服务被拆分到不同的服务器进程中。比如一个网络购物服务,由订单服务器,支付服务器,仓储服务器和物流服务器组成。每个服务器使用的数据存储方案可能不同,有的用MySQL,有的用Redis。如何让网络购物服务完整执行,而不会导致支付了但仓库中没有剩余库存,这是分布式服务事务需要处理的问题之一。
分布式事务和单机事务相比,处理的问题更为困难。
一个问题是因为有多个事务参与者。传统单机事务,如果宕机,整个事务的执行都会失败,原子性比较好处理。但是分布式事务,参与者分布在不同的机器上,可能一个参与者成功锁住资源,而二个参与者对资源加锁失败,也可能一个参与者提交事务成功,但是二个参与者提交时机器宕机,处理起来困难。
二个问题是网络超时导致的问题。服务器A告诉服务器B提交事务,然后超时了,没有收到服务器B的响应。这时有可能服务器B没收到请求,也可能服务器B收到请求,成功处理,发送给A的响应丢失。如何区分这两种情况然后进行处理也是困难的地方。
三个问题是距离导致的延迟问题。传统单机事务不存在网络延迟,所有操作都在一台机器上处理。但是分布式事务由于服务器的物理距离带来了网络延时,这可能会导致实现方案的差异。比如前面介绍中我们提到过事务ID的概念,在分布式系统中,如何保证事务ID的性,以及区分并发事务之间的先后顺序?一种方案是提供一个全局的服务来分配事务ID,单调递增。这种方案在同城部署的时候还好,因为同城的网络往返RTT大概在1ms内,但是如果是全球部署的系统,比如GoogleSpanner,一个服务器在北美洲,另一个服务器在欧洲,跨洲往返RTT可能是200ms,这个延迟显然是无法接受的,所以这种全局事务ID服务器方案不行。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。