
1) 【一句话结论】
采用“多活主备+全局事务协调+异步消息队列”的高可用架构,通过热备模式、负载均衡保障7x24服务,结合SAGA模式处理跨地域事务,确保数据一致性和业务连续性。
2) 【原理/概念讲解】
老师口吻,解释核心概念:
类比:主备像双引擎飞机(一个引擎故障,另一个立即启动);集群像多人团队(分工协作处理请求);SAGA模式像跨部门签合同(分步处理,每步完成后发送确认消息,最终汇总确认)。
3) 【对比与适用场景】
主备模式(冷/热备):
| 特性 | 冷备模式 | 热备模式 |
|---|---|---|
| 数据同步 | 不实时 | 实时(Binlog) |
| 故障切换 | 分钟级恢复 | 秒级切换 |
| 资源利用 | 低 | 高(需额外资源) |
| 使用场景 | 非关键业务 | 关键业务(7x24) |
| 注意点 | 故障时数据延迟 | 成本高,需高带宽同步 |
分布式事务方案:
| 方案 | 原理简述 | 适用场景 | 优缺点 |
|---|---|---|---|
| 两阶段提交 | TC协调,预提交、提交(同步) | 对一致性要求极高,低延迟 | 强一致性,但阻塞风险高 |
| SAGA模式 | TC协调,按顺序执行,补偿事务 | 对实时性要求高,业务复杂 | 无阻塞,补偿成本高 |
| 最终一致性 | 事件驱动,异步通知,最终检查 | 对实时性要求低,可容忍延迟 | 实现简单,但可能数据不一致 |
4) 【示例】
跨地域资产转移的分布式事务流程(伪代码):
POST /transfer?assetId=123&targetAccount=456&amount=1000TryFreeze方法(冻结资产,锁定余额)。TryReserve方法(预留资金)。ConfirmFreeze(释放冻结资产)。ConfirmReserve(完成资金转移)。TryFreeze失败,TC调用A地CancelFreeze(恢复余额);若B地TryReserve失败,TC调用B地CancelReserve(撤销预留)。ConfirmReserve超时,定时任务检查事务状态,若未完成则重试(幂等性检查:检查事务ID是否已补偿)。5) 【面试口播版答案】
“面试官您好,针对7x24高可用需求,我设计的架构核心是‘多活主备+全局事务协调’,结合负载均衡和跨地域集群。首先,高可用层面,采用主备热备模式(主节点处理请求,备节点通过MySQL Binlog实时同步数据,故障时负载均衡器秒级切换),配合Nginx分发请求,保证服务不中断。然后,分布式事务处理,针对跨地域资产转移,采用SAGA模式(比两阶段提交更灵活),通过全局事务协调器(TC)协调A地(源)和B地(目标)节点,用Kafka异步通信减少网络延迟。具体流程:用户发起请求后,TC先调用A地节点‘TryFreeze’冻结资产,再通过Kafka通知B地节点‘TryReserve’预留资金,用户确认后,TC执行‘ConfirmFreeze’释放冻结资产,并调用B地节点‘ConfirmReserve’完成转移;若任一阶段失败,通过‘Cancel’回滚。补偿事务通过唯一事务ID和数据库状态检查(如补偿状态字段)确保不重复操作。同时,用Prometheus监控节点心跳(1分钟无心跳告警),事务失败率>5%时触发告警,及时处理。这样既保证了7x24服务,又解决了跨地域事务的一致性问题。”
6) 【追问清单】
7) 【常见坑/雷区】