CAP
- 一致性: 数据要保持完整
- 可用性: 服务可用
- 分区容错性: 在部分网络出现故障的时候仍可以提供一致性和可用性的服务
BASE理论
BASE理论是为了对cap的一种权衡
- 基本可用: 不要求全部可用,只保证基本的功能可用
- 软状态: 允许存在中间状态
- 最终一致性: 可以接收数据短时间的不一致,只需要保证数据的最终一致
分布式锁
- 数据库 使用数据库 乐观锁/悲观锁控制 需要注意效率问题
- redis 自己实现比较复杂,可用线程的框架redission
- zookeeper
生成唯一主键ID
- 数据库自增ID
- UUID
- 雪花算法
分布式事务
- 2PC
引入事务协调者,第一阶段执行事务记录日志,第二阶段协调者发起commit或者rollback
可能存在的问题:
- 所有的节点都会阻塞。
- 如果第二阶段出现问题,数据可能会存在不一致的情况。
- 协调者宕机的情况可能会导致阻塞。
- 3PC
在2PC的基础上添加了超时时间,并且将第一阶段分为了两个部分,询问和执行
可能存在的问题:
- 第三阶段出现问题时还是会导致数据不一致
- TCC
TCC和2PC类似,try阶段预留锁定资源,confirm/cancel阶段提交或者回滚事务。
优点:
- 具体业务实现锁定的资源,锁定力度小,但是同时也使得实现比较复杂。
- 第二阶段失败会重试,实现最终一致性。
可能存在的问题:
- 加入了重试的机制,需要保证接口的幂等性。
- 空回滚,第一阶段还没有执行的时候就调用了第二阶段的cancel,需要记录第一阶段的状态。
- 先执行了第二阶段,后执行第一阶段导致锁住了资源无法释放,需要记录整个事务的状态。
缓存一致性
延时双删: 先删除缓存,再更新数据库,再过一段时间再删除缓存。