💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # CAP 分布式领域CAP理论, * Consistency(一致性), 数据一致更新,所有数据变动都是同步的 * Availability(可用性), 好的响应性能 * Partition tolerance(分区容忍性) 可靠性 幂等性: 简单的说, 业务操作支持重试, 不会产生不利影响. 常见的实现方式: 为消息额外增加唯一ID. BASE(Basically avaliable, soft state, eventually consistent): 是分布式事务实现的一种理论标准 定理:任何分布式系统只可同时满足二点,没法三者兼顾。常见的有CP系统, AP系统. 忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。 # ACID 关系数据库的ACID模型拥有 高一致性 + 可用性 很难进行分区: * Atomicity原子性:一个事务中所有操作都必须全部完成,要么全部不完成。 * Consistency一致性. 在事务开始或结束时,数据库应该在一致状态。 * Isolation隔离层. 事务将假定只有它自己在操作数据库,彼此不知晓。 * Durability. 一旦事务完成,就不能返回 # 柔性事务 vs 刚性事务 刚性事务是指严格遵循ACID原则的事务, 例如单机环境下的数据库事务. 柔性事务是指遵循BASE理论的事务, 通常用在分布式环境中, 常见的实现方式有: 两阶段提交(2PC), TCC补偿型提交, 基于消息的异步确保型, 最大努力通知型. 通常对本地事务采用刚性事务, 分布式事务使用柔性事务 # 最佳实践 先上结论, 再分别介绍分布式事务的各种实现方式. * 如果业务场景需要强一致性, 那么尽量避免将它们放在不同服务中, 也就是尽量使用本地事务, 避免使用强一致性的分布式事务. * 如果业务场景能够接受最终一致性, 那么最好是使用基于消息的最终一致性的方案(异步确保型)来解决. * 如果业务场景需要强一致性, 并且只能够进行分布式服务部署, 那么最好是使用TCC方案而不是2PC方案来解决. 注意: 以下每种方案都有不同的适用场合, 需要根据实际业务场景来选择.