
1) 【一句话结论】采用事件驱动+分布式事务(Saga模式)+实时数据库的混合方案,通过消息队列实现低延迟数据同步,结合Saga模式保证数据一致性,确保值机、安检、行李处理系统实时数据互通且一致。
2) 【原理/概念讲解】老师口吻,解释关键概念:
类比:机场行李处理流程,值机系统是“打包”环节,生成“行李信息”事件,安检系统是“安检”环节,订阅事件并检查行李,行李处理系统是“分拣”环节,再订阅事件并分拣,每个环节通过“事件”传递信息,不会丢失,类似快递单号传递,确保每个环节都收到并处理。
3) 【对比与适用场景】
| 方式 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 同步调用 | 系统间直接调用API,返回结果后继续执行 | 代码简单,实时性强,但阻塞调用方 | 系统间紧耦合,高并发下易阻塞 | 不适合跨系统低延迟同步 |
| 异步消息队列 | 系统A发送消息到队列,系统B订阅处理 | 解耦,高吞吐,延迟低(毫秒级) | 多系统实时同步,如事件驱动 | 需保证消息不丢失,需处理消息重复消费 |
| Saga模式 | 本地事务+补偿事务,分阶段执行 | 保证最终一致性,适合复杂业务 | 多系统全局一致性,如订票-安检-行李 | 补偿逻辑复杂,需考虑幂等性 |
4) 【示例】
伪代码示例(值机、安检、行李系统):
def complete_booking(passenger_id, ticket_id):
update_booking_status(passenger_id, ticket_id, "completed")
send_event_to_kafka("booking_completed", {"passenger_id": passenger_id, "ticket_id": ticket_id})
def process_booking_event(event):
set_passenger_status(event["passenger_id"], "in_security")
if verify_id(event["passenger_id"]):
send_event_to_kafka("security_passed", event)
else:
send_event_to_kafka("security_failed", event)
def process_security_passed_event(event):
update_luggage_location(event["passenger_id"], event["ticket_id"], "ready_for_sorting")
5) 【面试口播版答案】(约90秒)
“面试官您好,针对机场值机、安检、行李处理系统的实时数据互通需求,我的核心方案是采用事件驱动+分布式事务(Saga模式)+实时数据库的混合架构,目标是实现低延迟(毫秒级)的数据同步,并保证数据一致性。
首先,原理上,我们采用事件驱动架构,把数据变更(如订票完成、安检通过)看作“事件”,通过消息队列(如Kafka)实现系统间松耦合。比如值机系统完成订票后,会向Kafka发送“订票完成”事件,安检系统订阅该事件后,立即更新实时数据库(如Redis)中乘客的“安检状态”,同时触发行李处理系统的分拣流程。这种设计类似机场行李的“快递单号”传递,每个环节都通过事件同步信息,不会丢失。
其次,为了保证数据一致性,我们引入Saga模式(本地事务+补偿事务)。比如值机完成订票后,先更新本地数据库,再发送事件;安检系统处理事件时,若失败(如验证失败),会发送“安检失败”补偿事件,触发值机系统的补偿逻辑(如取消订票)。这样即使某个环节出错,也能通过补偿机制恢复一致性。
对比来看,同步调用会导致系统阻塞,不适合高并发场景;纯异步消息队列只能保证最终一致性,而Saga模式结合本地事务,能保证关键业务(如订票-安检-行李)的全局一致性。
举个例子,值机系统完成订票后,发送“订票完成”事件到Kafka,安检系统订阅后,更新乘客状态为“正在安检”,并检查行李,若通过,再发送“安检通过”事件给行李系统,行李系统收到后,将行李分拣到对应航班。整个过程延迟低(Kafka毫秒级延迟),且通过Saga模式保证每个环节的状态一致。
总结来说,这个方案通过事件驱动解耦系统,Saga模式保证一致性,实时数据库提供快速查询,能有效满足机场多系统实时数据互通的需求。”
6) 【追问清单】
7) 【常见坑/雷区】