
1) 【一句话结论】对于多校区成绩同步,若业务对数据一致性要求极高(如成绩不可篡改、实时可见),可考虑分布式事务(如两阶段提交或TCC模式);若能容忍短暂不一致(如成绩最终正确即可),则推荐最终一致性方案(如消息队列+幂等处理),结合业务场景选择,前者保证强一致性但成本高,后者灵活但需设计补偿机制。
2) 【原理/概念讲解】老师口吻,解释分布式事务与最终一致性:
3) 【对比与适用场景】
| 方案类型 | 定义 | 核心特性 | 适用场景 | 注意点 |
|---|---|---|---|---|
| 分布式事务(2PC/TCC) | 跨多个数据源的事务,由协调者统一管理,保证全局原子性 | 强一致性,事务提交/回滚全局同步,无数据不一致 | 业务对数据一致性要求极高(如高考成绩、重要考试结果,需实时可见且不可篡改) | 2PC可能导致阻塞(参与者失败时协调者等待),TCC需业务逻辑支持预检查/执行/确认;系统复杂度高 |
| 最终一致性(消息队列+幂等) | 通过异步消息传递变更,各节点独立处理,最终达到一致 | 弱一致性,允许短暂不一致,通过幂等性、重试、补偿机制保证最终一致 | 业务对实时性要求不高,能容忍短暂不一致(如日常考试,用户稍后刷新页面看到成绩) | 需设计幂等处理(如根据消息唯一标识重试),补偿机制可能增加系统复杂度,延迟风险 |
4) 【示例】(消息队列+幂等处理伪代码):
update score set score=100 where id=1; 发送Kafka消息:{"scoreId":1, "newScore":100, "source": "A"}。if not exists(select 1 from score where id=1) then update score set score=100 where id=1; end if;。5) 【面试口播版答案】
面试官您好,对于多校区成绩同步,我建议根据业务对一致性的要求选择方案。如果业务对成绩的实时可见性和不可篡改性要求极高(比如高考成绩,必须立即同步且不能出错),可以采用分布式事务,比如两阶段提交(2PC)或TCC模式,保证强一致性。比如2PC中,主校区作为协调者,发起准备,各校区回复准备成功后提交,若任何校区失败则回滚,确保全局原子性。但如果业务能容忍短暂的延迟(比如日常考试,用户稍后刷新页面看到成绩),则推荐最终一致性方案,通过消息队列(如Kafka)异步传递成绩变更,各校区消费后利用幂等性处理,避免重复更新。比如主校区更新成绩后,发送消息,各校区检查成绩ID是否已存在,再更新,这样即使消息延迟或重复消费,也不会导致数据错误。总结来说,强一致性用分布式事务,弱一致性用最终一致性,结合业务场景选择。
6) 【追问清单】
7) 【常见坑/雷区】