分布式事务是什么?
分布式事务是指在分布式系统中涉及到多个数据库 或多个应用程序之间 的事务处理,这些数据库或应用程序可能
布在不同的物理节点上,甚至可能位于不同的地理位置,在分布式事务中,需要确保所有参与者的事务操作都能
保持一致性,即所有参与者的事务要么全部提交成功 ,要么全部回滚。
举个例子,假设一个电商系统,用户下单后需要扣减库存、扣减账户余额、生成订单等操作。在单机环境下,可
将这些操作放在同一个事务中,保证原子性、一致性和持久性。但在分布式环境下,可能存在多个服务(如库存
务、账户服务、订单服务)分布在不同的物理节点上,此时需要确保所有服务操作的事务都能够同步进行,避免
现数据不一致的情况。
为了解决分布式事务的问题,出现了一些分布式事务解决方案,如 XA 协议、TCC 事务、最大努力通知等。这些解决方案的实现方式各不相同,但都需要考虑如何确保所有参与者的事务操作能够保持一致性,以及如何处理可能出现的异常情况。
分布式系统的一致性有哪些?
所谓一致性,是指数据在多个副本之间是否能够保持一致的特性。在聊一致性的时候,其实要搞清楚一致性模型。
分布式系统中的一致性模型是一组管理分布式系统行为的规则。它决定了在分布式系统中如何访问和更新数据,以及如何将这些更新提供给客户端。面对网络延迟和局部故障等分布式计算难题,分布式系统的一致性模型对保证系统的一致性和可靠性起着关键作用。在分布式系统中有多种一致性模型可用,每个模型都有其优点和缺点,选择模型取决于系统的具体要求。
主要有三种,强一致性,弱一致性,最终一致性
强一致性模型(Strong Consistency):
在强一致性模型下,系统保证每个读操作都将返回最近的写操作的结果,即任何时间点,客户端都将看到相同的数据视图。这包括如下子模型:
- 线性一致性(Linearizability):线性一致性是一种最强的一致性模型,它强调在分布式系统中的任何时间点,读操作都应该返回最近的写操作的结果。
- 顺序一致性(Sequential Consistency):要求保证操作的顺序性,并不要求实际时间上的顺序保持一致
- 严格可串行性(Strict Serializability)
强一致性模型通常牺牲了可用性来实现数据一致性。
弱一致性模型(WeakConsistency):
弱一致性模型放宽了一致性保证,它允许在不同节点之间的数据访问之间存在一定程度的不一致性,以换取更高的性能和可用性。这包括如下子模型:
- 因果一致性(Causal Consistency)
- 会话一致性(Session Consistency)
- 单调一致性(Monotonic Consistency)
弱一致性模型通常更注重可用性,允许一定程度的数据不一致性。
最终一致性模型(Eventua Consistency):
最终一致性模型是一种最大程度放宽了一致性要求的模型。它允许在系统发生分区或网络故障后,经过一段时间,系统将最终达到一致状态。这个模型在某些情况下提供了很高的可用性 ,但在一段时间 内可能会出现数据不一致的情况。