首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01|导读:以前因后果为脉络,串起网状知识体系
02|新的挑战:分布式系统是银弹吗?我看未必!
03|CAP 理论:分布式场景下我们真的只能三选二吗?
04|注册发现: AP 系统和 CP 系统哪个更合适?
05|负载均衡:从状态的角度重新思考负载均衡
06|配置中心:如何确保配置的强一致性呢?
07|分布式锁:所有的分布式锁都是错误的?
08|重试幂等:让程序 Exactly-once 很难吗?
09 | 雪崩(一):熔断,让故障自适应地恢复
10 | 雪崩(二):限流,抛弃超过设计容量的请求
11|雪崩(三):降级,无奈的丢车保帅之举
12|雪崩(四):扩容,没有用钱解决不了的问题
13|可观测性(一):如何监控一个复杂的分布式系统?
14|可观测性(二):如何设计一个高效的告警系统?
15|故障(一):预案管理竟然能让被动故障自动恢复?
16|故障(二):变更管理,解决主动故障的高效思维方式
17|分片(一):如何选择最适合的水平分片方式?
18|分片(二):垂直分片和混合分片的 trade-off
19|复制(一):主从复制从副本的数据可以读吗?
20|复制(二):多主复制的多主副本同时修改了怎么办?
21|复制(三):最早的数据复制方式竟然是无主复制?
22|事务(一):一致性,事务的集大成者
23|事务(二):原子性,对应用层提供的完美抽象
24|事务(三):隔离性,正确与性能之间权衡的艺术
25|事务(四):持久性,吃一碗粉就付一碗粉的钱
26|一致性与共识(一):数据一致性都有哪些级别?
27|一致性与共识(二):它们是鸡生蛋还是蛋生鸡?
28|一致性与共识(三):共识与事务之间道不明的关系
29|分布式计算技术的发展史:从单进程服务到 Service Mesh
30|分布式存储技术的发展史:从 ACID 到 NewSQL
当前位置:
首页>>
技术小册>>
深入浅出分布式技术原理
小册名称:深入浅出分布式技术原理
### 25|事务(四):持久性,吃一碗粉就付一碗粉的钱 在分布式系统的广阔天地中,事务的四大特性——原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),如同支撑起摩天大楼的四根坚固支柱,缺一不可。本章,我们将聚焦于事务的“持久性”这一特性,通过“吃一碗粉就付一碗粉的钱”这一生动比喻,深入剖析其背后的原理、挑战、实现策略以及在现代分布式系统中的应用。 #### 引言:一碗粉的哲学 想象一下,在繁忙的都市街头,你走进一家古色古香的小店,点了一碗热气腾腾的米粉。这不仅仅是一次简单的餐饮消费,更蕴含了交易双方对“公平交换”的朴素理解:我享用了你的食物,便应支付相应的费用,即“吃一碗粉就付一碗粉的钱”。这一简单的交易原则,在分布式系统中,便对应着事务处理的持久性要求——一旦事务被提交,其所做的所有更改必须永久性地记录在系统中,即使面对系统故障,这些更改也不应丢失。 #### 持久性的定义与重要性 **定义**:持久性(Durability)指的是事务一旦提交,它对数据库中数据的修改就是永久性的,即使系统发生故障也不会丢失。这要求数据库系统能够将这些修改存储到非易失性存储介质(如硬盘)上,确保数据在系统重启后依然可用。 **重要性**: 1. **数据可靠性**:确保业务数据不因系统故障而丢失,是任何系统设计的首要原则。 2. **业务连续性**:在灾难恢复场景下,持久性保证了系统能够快速恢复业务运营,减少停机时间。 3. **用户信任**:用户依赖系统保存其重要信息,持久性是实现这一信任的基础。 #### 持久性的实现机制 在分布式系统中,实现事务的持久性远比传统单机数据库复杂,因为涉及到多个节点间的数据同步和一致性维护。以下是一些关键技术和策略: ##### 1. 日志记录(Logging) - **Write-Ahead Logging (WAL)**:在数据实际修改之前,先将修改信息记录到日志文件中。这些日志文件通常存储在非易失性存储上。一旦事务提交,对应的日志记录便被标记为“已提交”,确保在系统崩溃后,可以通过重放这些日志来恢复数据。 - **Redo Logs**:记录事务修改数据的具体操作,用于在系统恢复时重新执行这些操作,恢复数据到事务提交时的状态。 - **Undo Logs**:记录事务执行前的数据状态,用于在事务回滚时撤销已做的修改。 ##### 2. 复制与容错(Replication & Fault Tolerance) - **数据复制**:将数据在多个节点间进行复制,即使部分节点失效,其他节点上的数据副本仍能保证数据的可用性。 - **多数派协议(Quorum-based Protocols)**:如Raft、Paxos等,通过选举领导者和维护多个数据副本的一致性,确保在部分节点故障时,系统仍能对外提供服务并保持数据的一致性。 ##### 3. 事务提交协议 - **两阶段提交(2PC, Two-Phase Commit)**:将事务的提交过程分为准备阶段和提交阶段。准备阶段中,所有参与者(如数据库节点)准备执行事务,并记录下准备结果;提交阶段中,如果所有参与者都成功准备,则事务被提交,否则进行回滚。然而,两阶段提交存在性能瓶颈和单点故障问题。 - **三阶段提交(3PC, Three-Phase Commit)**:为了解决两阶段提交的一些问题,引入了预提交阶段,允许协调者在收到所有参与者的准备成功消息后,先进行一次“预提交”通知,再进入真正的提交阶段。但这并未完全解决所有问题,且增加了复杂性。 - **TCC(Try-Confirm-Cancel)**:一种更适用于分布式事务的提交协议,通过“尝试执行-确认提交-取消回滚”的流程,提高了事务处理的灵活性和性能。 #### 面临的挑战 - **性能瓶颈**:日志记录、数据复制、多阶段提交等机制都会增加事务处理的延迟和开销。 - **一致性与可用性的权衡**:CAP理论指出,在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)三者不能同时完全满足。增强持久性往往意味着在一致性和可用性之间做出取舍。 - **网络分区与故障恢复**:网络延迟、分区或节点故障都可能影响事务的持久性。如何设计健壮的容错机制,确保在这些情况下仍能保障数据的完整性和一致性,是巨大的挑战。 #### 实践案例:现代分布式数据库中的持久性实现 以Google Spanner和Amazon Aurora为例,它们各自在分布式事务的持久性方面做出了独特的贡献。 - **Google Spanner**:通过采用TrueTime API解决分布式系统中的时间同步问题,并结合Percolator模型,实现了跨数据中心的强一致性事务处理。在持久性方面,Spanner采用了高效的日志结构和复制策略,确保即使在跨多个数据中心的大规模系统中,事务的修改也能被安全、快速地持久化。 - **Amazon Aurora**:作为Amazon RDS的下一代关系数据库,Aurora通过其独特的存储层设计(基于日志的存储引擎)和快速故障转移机制,提供了高可用性和持久性。Aurora的存储层将数据库修改记录为日志,并通过分布式复制将这些日志同步到多个存储节点,实现了数据的快速恢复和容灾能力。 #### 结语 “吃一碗粉就付一碗粉的钱”,这看似简单的交易原则,在分布式系统中转化为了对事务持久性的严格要求。通过日志记录、数据复制、事务提交协议等技术的综合运用,现代分布式系统能够在复杂的网络环境中,确保事务的修改被安全、可靠地持久化。然而,随着技术的发展和业务需求的不断变化,持久性的实现策略也在不断演进,以更好地平衡性能、一致性和可用性之间的关系。在未来的分布式技术探索中,我们期待看到更多创新性的解决方案,为构建更加稳定、高效、可靠的分布式系统贡献力量。
上一篇:
24|事务(三):隔离性,正确与性能之间权衡的艺术
下一篇:
26|一致性与共识(一):数据一致性都有哪些级别?
该分类下的相关小册推荐:
CI和CD代码管理平台实战
Ansible自动化运维平台
云计算Linux基础训练营(上)
构建可视化数据分析系统-ELK
Linux云计算网站集群之nginx核心
Linux性能优化实战
etcd基础入门与实战
Kubernetes云计算实战
DevOps开发运维实战
云计算那些事儿:从IaaS到PaaS进阶(三)
Linux内核技术实战
shell脚本编程高手速成