
1) 【一句话结论】:采用“API网关+消息队列(如Kafka)+数据库CDC(变更数据捕获)”的混合架构,通过异步消息保证数据同步的实时性与容错性,结合API实现即时查询,确保员工信息在两个系统间实时/准实时同步,核心是数据变更的捕获、传输与消费机制。
2) 【原理/概念讲解】:系统集成架构分为数据层、传输层、应用层。
3) 【对比与适用场景】:对比同步集成(实时,但可能阻塞业务)与异步集成(准实时,容错)
| 集成方式 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 同步集成 | 系统间直接调用API,实时返回结果 | 实时性高,但可能阻塞调用方 | 需要即时反馈的业务(如即时查询) | 对系统性能要求高,容错性差 |
| 异步集成 | 通过消息队列传输变更,系统异步消费 | 准实时,容错性好,解耦 | 数据变更频繁,对实时性要求不高 | 需要处理消息积压、延迟问题 |
4) 【示例】:假设HIS系统更新员工“张三”的联系电话为13800138000,流程如下:
update_employee_phone(13800138000, '张三'))。// Kafka生产者发送变更消息
producer.send(new ProducerRecord<>("hisp2hr_employee_change", "employees", new EmployeeChangeEvent(
"UPDATE",
"张三",
Map.of("phone", "13800138000")
)));
伪代码(消息消费端,人事系统端):
// Kafka消费者处理变更
consumer.subscribe("hisp2hr_employee_change");
while (true) {
ConsumerRecords<String, EmployeeChangeEvent> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, EmployeeChangeEvent> record : records) {
EmployeeChangeEvent event = record.value();
if ("UPDATE".equals(event.getOperation()) && "张三".equals(event.getEmployeeId())) {
updateEmployeePhone(event.getChangeData().get("phone"));
}
}
}
5) 【面试口播版答案】:面试官您好,针对医院人事代理系统与HIS系统对接,我设计的架构是“API+消息队列+数据库CDC”的混合模式。首先,HIS系统通过数据库变更数据捕获(CDC)技术,实时捕获员工信息的变更(如入职、离职、信息修改),然后将这些变更事件发送到消息队列(如Kafka),实现解耦。人事代理系统作为消费者,从消息队列中获取变更事件,并更新本地数据库。同时,为了支持即时查询,我们通过API网关提供接口,允许人事系统直接调用HIS的查询接口。这样,数据同步分为实时变更(通过消息队列)和即时查询(通过API),既保证了数据的一致性,又避免了系统间的直接阻塞。关键点在于数据变更的捕获、传输的可靠性(消息队列的持久化)、以及消费端的容错处理(如重试机制),确保即使消息队列有延迟或消费失败,也能通过重试机制恢复同步。
6) 【追问清单】:
7) 【常见坑/雷区】: