51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个处理半导体晶圆制造中多设备、多工序的订单调度系统,要求支持每秒1000+的订单请求,同时保证99.9%的订单处理成功率,请描述系统架构、核心组件及性能优化策略。

上海宇量昇科技有限公司系统设计类-性能设计工程师难度:中等

答案

1) 【一句话结论】

采用微服务+事件驱动架构,结合拓扑排序处理工序依赖、分布式消息队列(Kafka,配置acks=all确保消息持久化)、Redis缓存设备状态及数据库分库分表,通过异步解耦、资源隔离与容错机制,支撑每秒1000+订单请求,并保障99.9%处理成功率。

2) 【原理/概念讲解】

老师口吻:我们设计的系统核心是解耦与顺序性保障。订单提交后,订单调度服务先解析订单,识别设备工序的顺序依赖(如清洗后才能蚀刻),通过拓扑排序算法(如Kahn算法)将订单拆分为按工序顺序的多个阶段(例如清洗→蚀刻→光刻)。每个阶段的信息写入Kafka(主题:order-stage),设备调度服务按拓扑顺序消费并触发设备执行。

  • 消息队列(Kafka):解耦高并发请求与设备执行,避免订单提交阻塞设备。配置acks=all确保消息写入磁盘所有副本后才确认,避免消息丢失(影响订单处理)。
  • Redis缓存:存储设备忙闲状态(如device_status:D1为“空闲”),减少数据库查询压力。
  • 数据库分库分表:按设备类型(清洗、蚀刻、光刻)分库分表,存储订单与设备状态,提升查询效率。

拓扑排序像“生产线上的工序顺序”,必须按顺序执行,否则会导致设备损坏(比如清洗未完成就蚀刻,会破坏晶圆表面)。

3) 【对比与适用场景】

组件/策略持久化配置(Kafka)重试机制设备故障处理
消息队列(Kafka)acks=all(确保消息写入磁盘后确认)消费失败回滚到Kafka,重试(最多3次)超时触发熔断,跳过任务,后续重新分配
Redis缓存不直接持久化,但设置随机TTL(避免雪崩)无(状态更新后同步)无,但设备状态变更后缓存同步
数据库(分库分表)事务支持(如分库分表的事务)连接失败重试(最多3次)事务回滚,标记设备故障

注意点:

  • Kafka需按设备数配置分区数(如清洗设备10台,则分区数设为10),避免订单堆积。
  • 设备故障时,优先级队列按订单优先级(如高优先级订单优先分配空闲设备)。

4) 【示例】

  • 订单请求示例(JSON):

    {
      "order_id": "WY20240401-001",
      "device_ids": ["D1", "D2", "D3"],
      "processes": ["cleaning", "etching", "lithography"],
      "priority": "high"
    }
    
  • 处理流程伪代码:

    1. 负载均衡分发请求到订单调度服务。
    2. 订单服务解析订单,执行拓扑排序(结果:清洗→蚀刻→光刻)。
    3. 将每个阶段写入Kafka(主题:order-stage,分区按设备ID哈希)。
    4. 返回200 OK。
    5. 设备调度服务消费Kafka,按拓扑顺序触发设备执行(如调用D1清洗接口,更新Redis为“忙”)。
    6. 设备完成,更新Redis为“空闲”,并通知Kafka消息完成。
    7. 设备忙时,订单进入队列,重试(最多3次),失败则标记异常。

5) 【面试口播版答案】

(约90秒)
面试官您好,针对半导体晶圆制造订单调度系统,我设计的方案核心是微服务架构结合事件驱动,通过拓扑排序处理工序依赖,并利用分布式消息队列(Kafka,配置acks=all确保消息持久化)和Redis缓存设备状态,实现异步解耦与高并发处理。订单提交后,订单调度服务解析订单并拓扑排序,将阶段写入Kafka,设备调度服务按顺序消费并触发设备。消息队列解耦高并发请求与设备执行,Redis缓存设备忙闲状态减少数据库压力,数据库分库分表存储订单与设备状态。为保障99.9%成功率,消息队列配置acks=all避免消息丢失,设备故障时触发熔断降级(超时跳过任务),并重新分配到空闲设备(优先级队列)。这样系统预计可支撑每秒1000+订单请求,通过资源隔离、容错机制确保高可用。

6) 【追问清单】

  1. 问:如何处理设备工序的顺序性依赖?
    答:通过拓扑排序算法(如Kahn算法),将订单拆分为按工序顺序的阶段,设备调度服务按拓扑顺序消费,确保工序正确性。

  2. 问:如何保证99.9%的订单处理成功率?
    答:消息队列配置acks=all确保持久化,消息重试机制(最多3次),设备故障熔断降级,监控告警触发干预。

  3. 问:设备故障时如何重新分配资源?
    答:设备调度服务维护空闲设备优先级队列,故障设备任务跳过,优先分配给高优先级订单,低优先级订单延迟处理。

  4. 问:系统如何水平扩容?
    答:订单调度服务无状态,通过负载均衡器扩容实例;消息队列和缓存集群化,支持自动扩容。

  5. 问:如何预防消息队列积压?
    答:Kafka配置足够分区数(按设备数分区),监控队列积压,当积压超过阈值时触发扩容或降级。

7) 【常见坑/雷区】

  1. 忽略工序拓扑排序:导致调度错误,如清洗后直接蚀刻,设备损坏。
  2. 消息队列持久化配置不足:acks参数未设置,消息丢失影响订单处理。
  3. 设备故障无熔断:导致系统雪崩,积压订单。
  4. 缓存未设置随机TTL:导致Redis雪崩,数据库压力激增。
  5. 数据库分库分表设计不当:如按设备类型分表,但查询时未考虑关联,导致性能下降。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1