
1) 【一句话结论】为满足实时作业批改延迟低于1秒的要求,系统需采用“前端低延迟采集+后端流式并行处理+缓存加速+异步任务解耦”的架构,通过微服务拆分与消息队列解耦,确保数据从采集到结果返回的端到端延迟可控。
2) 【原理/概念讲解】(老师口吻)
系统核心是“低延迟链路+并行处理+缓存+异步解耦”:
3) 【对比与适用场景】
| 特性 | 实时处理(流式) | 异步处理(消息队列) |
|---|---|---|
| 定义 | 数据到达后立即处理 | 数据先存入队列,后续处理 |
| 延迟 | 毫秒级(端到端<1秒) | 秒级(非实时) |
| 适用场景 | 实时交互(如在线批改) | 非实时任务(如统计报告) |
| 注意点 | 需高性能计算资源,可能阻塞 | 需消息队列,可能堆积 |
4) 【示例】(伪代码)
def capture_and_send(image):
img = capture_frame() # 获取摄像头图像
img_compressed = compress_image(img) # 压缩
send_via_ws(img_compressed) # WebSocket低延迟传输
def process_image(image):
blocks = split_image(image) # 分块处理
results = []
for block in blocks:
result = onnx_runtime_infer(block) # 流式推理
results.append(result)
cache_results(results) # 缓存结果
return results
def cache_results(results):
for res in results:
redis.set(f"ocr_result:{res.id}", json.dumps(res)) # 内存缓存
def send_to_async(task):
kafka_producer.send(topic="ocr_async_tasks", value=json.dumps(task))
5) 【面试口播版答案】(约90秒)
“面试官您好,针对实时作业批改的OCR系统,核心是保证端到端延迟低于1秒。系统整体架构分为前端采集、后端流式处理、缓存加速和异步任务解耦。前端通过WebRTC实时捕获用户提交的作业图像,压缩后通过WebSocket低延迟传输给后端。后端接收图像后,立即启动流式推理(比如用ONNX Runtime加速,分块处理减少等待),将识别结果实时存入Redis内存缓存,前端能快速获取结果。对于需要更复杂分析的任务(如语法检查),通过Kafka将任务推送到异步队列,由独立服务处理,避免阻塞实时路径。架构拆分为采集、处理、结果服务,服务间用gRPC通信,确保低延迟。这样从图像采集到结果返回的延迟能控制在1秒以内。”
6) 【追问清单】
7) 【常见坑/雷区】