
1) 【一句话结论】
铁路客票系统高可用架构通过“主备双活+数据实时同步(数据库binlog+消息队列)+状态协调(ZooKeeper+健康检查)+无感切换(负载均衡)”,实现秒级主备切换,数据通过分布式事务(核心交易)和最终一致性(非核心)保障,确保7x24业务连续性。
2) 【原理/概念讲解】
主备切换的核心是“数据同步”与“状态协调”。数据同步技术包括数据库binlog复制(如MySQL主从同步)、消息队列(如Kafka)日志同步,确保备节点数据与主节点一致;状态协调通过ZooKeeper等分布式协调服务,实时同步主备状态,当主节点故障时,备节点秒级被选举为新的主节点。类比:双引擎飞机,主引擎(主节点)正常工作时,副引擎(备节点)同步所有飞行数据(数据同步),当主引擎故障时,副引擎(备节点)通过协调系统(ZooKeeper)快速接管,保证飞行(业务)不中断。
3) 【对比与适用场景】
| 模式 | 定义 | 特性(切换/数据同步) | 使用场景(铁路客票) | 注意点 |
|---|---|---|---|---|
| 主备模式 | 主节点处理请求,备节点同步数据,不处理请求 | 切换时业务中断(备切换为主需预热数据),数据同步实时或准实时 | 对切换时间要求极高,数据一致性要求强(如核心交易,但铁路客票可能用于非核心服务) | 切换后需处理历史数据,可能影响性能 |
| 主从多活模式 | 主节点和备节点都处理请求,通过负载均衡 | 切换时业务无中断(负载均衡自动切换),数据同步实时或准实时 | 业务对连续性要求高,允许数据最终一致(如查询、订单处理) | 需要负载均衡器,数据一致性依赖最终一致性 |
4) 【示例】
假设铁路客票系统订单服务采用主从多活架构,数据库主从复制(MySQL)+Kafka数据同步。伪代码示例:
主节点(IP: 192.168.1.10)处理订单请求:
INSERT INTO orders (id, user_id, amount) VALUES (1, 1001, 100);INSERT INTO orders (id, user_id, amount) VALUES (1, 1001, 100);5) 【面试口播版答案】
铁路客票系统作为7x24运行的业务系统,高可用架构中主备切换的快速性、数据一致性和业务连续性主要通过“主备双活+数据实时同步+状态协调+无感切换”实现。具体来说,采用数据库主从复制(如MySQL binlog同步)和消息队列(如Kafka)确保备节点数据与主节点一致。切换时,通过ZooKeeper进行主备状态协调,当主节点故障(心跳超时或binlog位置检查失败),备节点在秒级内通过负载均衡器接管请求,实现业务连续。数据一致性方面,核心交易(如购票、支付)采用分布式事务(如Saga模式)保证强一致性,非核心业务(如查询)采用最终一致性,通过补偿机制恢复。比如,购票流程中,主节点处理订单后,将操作日志写入Kafka,备节点消费并更新数据库,同时Saga模式确保支付成功后订单状态更新,即使切换过程中出现短暂不一致,也能通过补偿步骤恢复。
6) 【追问清单】
7) 【常见坑/雷区】