事务一致性比较:2PC、TCC、ES与读写分离、Sagas详解
需积分: 50 46 浏览量
更新于2024-09-09
1
收藏 1.44MB PPTX 举报
本文档主要探讨了五种不同的事务一致性模型,分别是两阶段提交(2PC)、TCC(Try-Cancel-Confirm)、Event Sourcing以及两种不同的读写分离策略——直接读写和事件驱动。以下是每种模型的详细介绍:
1. **两阶段提交 (2PC)**:
- **投票阶段**: 协调器向所有参与服务发送投票请求,服务响应yes或no。若有任何服务拒绝或超时,协调器进入决定阶段。
- **决定阶段**: 若所有服务同意,协调器执行commit,事务完成;若有失败,协调器可能需要重新协调或中止事务。这种协议可能导致数据库锁住资源并产生较高的通信复杂度。
2. **TCC (Try-Cancel-Confirm)**:
- **尝试阶段**: 发起try请求,数据库设置为尝试状态。
- **确认阶段**: 如果所有服务成功,进行confirm操作,状态变为确认。若失败或超时,协调器尝试重试或执行回退操作。
- **优点**: 取消操作设计简洁,只需改变数据库状态;缺点是数据库需要额外的状态字段,并且接口复杂,涉及try、confirm和cancel三个操作,耗时且可能需要多次交互。
3. **Event Sourcing** (两种实现方式):
- **演进流程step1**: 子服务按顺序执行业务操作,每个步骤写入业务数据库并发送消息。一旦某个服务失败,消息链会通知上层服务回滚。
- **优点**: 去中心化处理,容错性好;缺点是服务崩溃可能导致部分操作丢失,需要本地持久化消息和额外的event表。
- **演进流程step2**: 采用本地事务记录事件并写入event表,同时轮询更新状态。这样可以防止消息队列本地化崩溃,但增加了开发复杂性。
- **演进流程step3**: 使用本地数据库记录事件,提高了事务安全性,但对NoSQL数据库的交易和查询支持有限。
4. **读写分离** (未明确说明哪种策略,但提到了两种可能的方式):
- 直接读写分离:提高读取速度,但可能增加写入时的一致性问题。
- 事件驱动:写入事件到本地表,通过轮询更新状态,确保一致性,但要求开发者维护两个表,对特定类型的数据库不友好。
总结来说,这五种事务一致性模型各有优缺点,适用于不同场景和系统设计需求。选择合适的模型取决于系统的可扩展性、容错性、性能要求以及数据一致性保障的具体需求。理解这些模型的特性有助于开发者在实际项目中做出明智的决策。
2022-03-29 上传
点击了解资源详情
点击了解资源详情
2023-04-28 上传
2024-06-05 上传
2024-05-30 上传
alenda9
- 粉丝: 0
- 资源: 2
最新资源
- BottleJS快速入门:演示JavaScript依赖注入优势
- vConsole插件使用教程:输出与复制日志文件
- Node.js v12.7.0版本发布 - 适合高性能Web服务器与网络应用
- Android中实现图片的双指和双击缩放功能
- Anum Pinki英语至乌尔都语开源词典:23000词汇会话
- 三菱电机SLIMDIP智能功率模块在变频洗衣机的应用分析
- 用JavaScript实现的剪刀石头布游戏指南
- Node.js v12.22.1版发布 - 跨平台JavaScript环境新选择
- Infix修复发布:探索新的中缀处理方式
- 罕见疾病酶替代疗法药物非临床研究指导原则报告
- Node.js v10.20.0 版本发布,性能卓越的服务器端JavaScript
- hap-java-client:Java实现的HAP客户端库解析
- Shreyas Satish的GitHub博客自动化静态站点技术解析
- vtomole个人博客网站建设与维护经验分享
- MEAN.JS全栈解决方案:打造MongoDB、Express、AngularJS和Node.js应用
- 东南大学网络空间安全学院复试代码解析