一次提交跨过多个服务后:2PC、3PC、CAP 与 TCC 的取舍
单机事务把提交和回滚封装在一个数据库内部。操作一旦跨过数据库或服务边界,情况就变了:一个节点已经执行成功,另一个节点没有响应,协调者既不能确认对方失败,也不能确认成功消息只是暂时没有返回。此时要解决的不只是如何提交,还包括故障期间要不要等待、恢复后如何续接,以及重复消息会不会把同一笔业务执行两次。
2PC、3PC 和 TCC 都试图组织一次跨节点提交,CAP、异步复制与 Quorum 则解释了网络分区出现后为什么总要舍弃一些东西。把这些内容放在一起看,可以更清楚地分辨:哪些方案在解决原子提交,哪些方案在调整一致性与可用性的边界。