分布式事务是指在分布式系统中,跨越多个独立的数据库节点、服务或资源管理器,进行多个数据库操作,这些操作被当作一个单一的、不可分割的工作单元来执行,以维持数据的一致性和完整性。
与传统的单一数据库 事务 相比,分布式事务需要处理更复杂的网络通信、系统间的协调以及并发访问问题。
分布式事务的关键挑战在于如何在分布式环境中维护 ACID 特性,尤其是在存在网络分区的情况下。
一般来讲,99% 的分布式接口调用不需要做分布式事务,通过监控(邮件、短信告警)、记录日志,就可以事后快速定位问题,然后就是排查、出解决方案、修复数据。
因为用分布式事务一定是有成本的,而且这个成本会比较高,特别是对于一些中小型公司。同时,引入分布式事务后,代码复杂度、开发周期会大幅上升,系统性能和吞吐量会大幅下跌,这就导致系统更加更加脆弱,更容易出 bug。当然,如果有资源能够持续投入,分布式事务做好了的话,好处就是可以 100% 保证数据一致性不会出错。
分布式事务的基本理论
分布式事务解决方案
- 强一致性/刚性事务
- 业务代码无侵入方案
- 最终一致性/柔性事务
业界选择建议
- 电商支付场景
- 在电商支付中,可能选择使用 2PC,因为一致性要求高,而且对阻塞时间的容忍度相对较大。
- 金融结算场景
- 在金融结算中,可能选择使用 3PC,以减少阻塞时间,同时保持较高的一致性。
- 电商促销场景
- 在电商促销活动中,可能选择使用 TCC,以满足复杂的业务逻辑和灵活性的需求。
- 银行交易场景
- 在银行交易系统中,可能选择使用可靠消息最终一致性,以保障高可用性和容错性。
分布式事务开源项目
Reference