引言
事务是什么?为什么要有事务?事务是一组数据库读写操作的集合,这些操作要不全部成功,要不全部失败,是不可被分割的。具有ACID特性:
- 原子性(Atomicity):事务是不可分割的最小工作单位,事务中的所有操作要么都成功,要么都失败。
- 一致性(Consistency):事务必须使数据库从一个一致性状态变到另一个一致性状态。转人工的描述就是:你兜里的100块钱转到别人兜里不会多给,不会少给,不会丢失。这个是通过原子性、隔离性、持久性三个特性来保障的。
- 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。每个事务都应独立于所有其他事务运行。
- 持久性(Durability):一旦事务提交,它对数据库的改变就是永久性的,接下来即使数据库发生故障也不会丢失事务的操作结果。
ok,当我们已经了解了事务及其ACID特性后,可以发现,在单一数据库中保证事务的一致性相对较为简单。然而,当涉及到多个数据库或服务时,情况就变得复杂了,会带来如网络延迟、节点故障等问题。那在这样的环境中,如何确保跨多个数据库或服务的事务一致性成为了一个big problem 了。这正是分布式事务所要解决的问题。
在了解这些解决方案之前,让我们先来了解一下在分布式环境下的一些理论知识吧。
一、CAP定理
分布式环境中,典中典理论:CAP定理,由三个指标组成:
- Consistency(一致性):用户访问分布式系统中任意节点,得到的数据必须一致
- Availability(可用性):用户访问集群中各个节点时候,必须得到响应,而不是超时/拒绝
- Partition tolerance(分区容错性):当集群出现分区时,整个系统也需持续对外提供服务
我们发现其实前面两个还是比较好理解的,但是这个分区容错性是啥呢?感觉咋一看也不明白。下面我们通过一个例子来说说集群分区是什么,就可以理解分区容错性了:
下面是一个服务器集群场景,每个服务对应一个数据库(数据都是v0),同时会异步进行数据同步。

当Node3节点在与其他节点同步时候出现网络阻塞/节点延迟等问题的时候,导致数据不一致的问题,使得node3与node1/2失去了连接,形成了两个不同的独立分区。

二、BASE理论
由于分区容错性在现代分布式系统中几乎是不可避免的,因此通常需要在一致性和可用性之间做出权衡。为了解决这一 challenge,BASE理论应运而生,提供了一种更加灵活的设计思路:
- Basically Available(基本可用):分布式系统中出现故障时,允许损失部分可用性,保障核心可用
- 电商网站在高峰时段,可能会暂时关闭一些非核心功能(如用户评论、推荐商品),以确保订单处理和支付功能的稳定运行。
- Soft State(软状态):在分布式系统中,允许在一定时间内存在中间状态或临时的数据不一致。软状态意味着系统中的数据可以在一段时间内处于非最终状态,但最终会达到一致。
- 在社交媒体应用中,用户A发布了一条动态,用户B可能在几秒钟后才能看到这条动态。这是因为在数据同步的过程中,系统允许短暂的不一致状态。
- Eventually Consistent(最终一致性):虽然无法保证强一致性,但在软状态结束后,最终达到数据一致。
- 在分布式数据库中,跨区域的数据复制可能需要几分钟时间才能完成,但最终所有副本的数据将保持一致。
总的来说,BASE理论提供了一种灵活的设计思路,使得分布式系统能够在面对复杂环境时,依然保持较高的可用性和可靠性。具体实践中,可以通过以下几种方式来实现BASE理论:
- 异步处理:使用消息队列或事件驱动架构,将数据处理任务异步化,减轻系统压力,提高响应速度。
- 数据分区:将数据分散存储在多个节点上,每个节点负责一部分数据,减少单点故障的影响。
- 缓存机制:利用缓存来减少对后端数据库的直接访问,提高系统的响应速度和可用性。
- 补偿机制:在分布式事务中,通过预定义的补偿操作来处理失败的情况,确保数据的一致性。这个我个人认为其实还是挺重要的吧,分布式事务再怎么保障,也还是可能会有一定的问题的,个人了解的话,目前还没有一种方法能够完全保障分布式事务的完美一致性,只能尽可能地通过各种机制来提高其可靠性和一致性。
三、 分布式事务的应用
在了解了分布式系统中的一些指导理论思想后,我们来看看分布式事务在实际应用中的两种主要模式:AP模式和CP模式。
1.3.1、AP模式:最终一致性
-
特点:
-
- 各个子事务分别执行和提交。
- 允许短期内出现数据不一致。
- 通过补偿措施恢复数据,实现最终一致。
-
-
优势:
-
- 高可用性:即使部分节点故障,系统仍能继续运行。
-
适用场景:
-
- 对实时一致性要求不高,但对系统可用性要求较高的场景,如电商平台、社交网络等。
示例:
- 社交网络:用户发布的内容可能需要几秒钟才能被其他用户看到,但最终所有用户都能看到最新的内容。
1.3.2、 CP模式:强一致性
-
特点:
-
- 各个子事务执行后互相等待。
- 确保所有子事务同时提交或同时回滚。
- 达成强一致性。
-
-
优势:
-
- 强一致性:确保所有节点在事务提交后看到相同的数据。
-
劣势:
-
- 弱可用性:在事务等待期间,系统可能无法响应某些请求。
-
适用场景:
-
- 对数据一致性要求极高,但可以容忍一定可用性损失的场景,如金融交易、医疗系统等。
示例:
- 金融交易:在银行转账过程中,必须确保资金从一个账户转出的同时,能够正确无误地转入另一个账户。
分布式事务的应用需要根据具体的业务需求来选择合适的模式。AP模式强调高可用性和最终一致性,适用于对实时一致性要求不高的场景;CP模式强调强一致性和数据的准确性,适用于对数据一致性要求极高的场景。通过合理选择和设计,可以有效提升分布式系统的性能和可靠性。
四、总结
本文介绍了分布式系统中的一些重要理论和实践方法,帮助我们理解如何在复杂的分布式环境中实现事务的一致性。通过CAP定理,我们了解到在分布式系统中,一致性、可用性和分区容错性之间需要做出权衡。BASE理论则提供了一种更加灵活的设计思路,通过基本可用、软状态和最终一致性来实现高可用性和可靠性。
在分布式事务的应用中,我们探讨了AP模式和CP模式两种主要模式:
- AP模式(最终一致性):强调高可用性和最终一致性,适用于对实时一致性要求不高但对系统可用性要求较高的场景,如电商平台和社交网络。
- CP模式(强一致性):强调强一致性和数据的准确性,适用于对数据一致性要求极高的场景,如金融交易和医疗系统。
如果你对本文的内容对你有帮助的话,请给我点个赞吧,你的支持是我最大的动力。在下一篇中,我们将一起探讨如何具体实现分布式事务的几种方案(2PC、3PC、TCC)。敬请期待!