一、分布式在线考试系统完整架构图(细化版)

以下是包含服务分层、中间件、数据流向、事件通信的完整架构图,直观展示各组件的交互关系:

发布本地事件:考生进入考试

发送MQ事件:考生提交试卷

消费MQ事件:触发AI评分

发布本地事件:AI评分开始

发送MQ事件:评分完成

消费MQ事件:发送成绩通知

消费MQ事件:统计考试数据

考生端/管理端
Web/H5/小程序

Nginx
反向代理/负载均衡

Spring Cloud Gateway
路由转发/鉴权/限流

考试服务
核心业务:考试创建/进入/提交
技术:Spring Event+MQ生产者

题库服务
核心业务:题库CRUD/AI出卷
技术:MyBatis-Plus+Spring AI

用户服务
核心业务:用户/权限/资格审核
技术:Redis+JWT

评分服务
核心业务:AI评分/人工评分
技术:Spring AI+MQ消费者

通知服务
核心业务:短信/站内信/邮件
技术:MQ消费者+第三方API

统计服务
核心业务:数据统计/AI分析
技术:Spring AI+MQ消费者

Nacos
注册中心+配置中心

RocketMQ
分布式事件通信
Topic:EXAM_EVENT/SCORE_EVENT/NOTIFY_EVENT

Redis 7.0
缓存:题库/试卷
分布式锁:考试提交
限流器

MySQL 8.0
主库:考试/答题数据
分库分表:Sharding-JDBC(可选)

MinIO
对象存储:试题附件/答题截图/AI报告

Spring AI 1.0+
对接:智谱AI/文心一言/OpenAI
能力:出卷/评分/分析

监控运维层
Prometheus+Grafana:指标监控
SkyWalking:全链路追踪
XXL-Job:定时任务

考试服务本地逻辑
状态初始化/题库加载

评分服务本地逻辑
Spring AI调用大模型评分

架构图核心说明:
  1. 分层设计:严格遵循「客户端→网关→核心服务→中间件→持久化」的经典分布式分层架构,职责边界清晰;
  2. 事件通信:红色标注的RocketMQ是分布式事件通信的核心,所有跨服务事件(如提交试卷→评分→通知)均通过MQ流转;
  3. AI能力集成Spring AI作为独立能力层,对接各AI大模型,所有AI相关逻辑(评分/出卷/分析)均由专门的服务调用,与核心业务解耦;
  4. 高可用组件Nginx做负载均衡、Sentinel(网关/服务内)做限流、Redis做缓存/分布式锁、MQ做消息可靠性保障,覆盖考试高峰期的高并发需求。

二、核心业务时序图(考生提交试卷→AI评分→成绩通知)

以「考生提交试卷触发AI评分+成绩通知」为例,绘制时序图(Mermaid语法),展示「Spring Event+MQ」的完整执行流程,包含本地事件、MQ消息、AI评分、跨服务通知的全链路:

SpringAI SpringAI[Spring AI+大模型] MySQL Redis 通知服务 评分服务 RocketMQ 考试服务 考生端 SpringAI SpringAI[Spring AI+大模型] MySQL Redis 通知服务 评分服务 RocketMQ 考试服务 考生端 若AI评分失败 1. 发送score:error MQ消息 2. 触发人工评分流程 提交试卷请求(userId=1001, examId=2001) 1. 校验考生状态/试卷完整性 2. 保存考生答题数据,更新考试状态为「已提交」 3. 发布本地事件(如:更新考试统计快照) 4. 生成事件ID(eventId=xxx),做幂等标记(SETNX) 5. 发送MQ消息(Topic=EXAM_EVENT, Tag=exam:submit 消息体=ExamSubmitEvent) 确认消息发送成功 返回「提交成功」 推送exam:submit消息 1. 幂等校验(检查eventId是否已消费) 2. OpenFeign远程调用:获取考生答题数据 3. 发布本地事件(AIScoreStartLocalEvent) 4. 调用大模型(构造评分提示词,请求AI评分) 返回AI评分结果(score=90, desc=xxx) 5. 保存评分结果,更新评分状态为「已完成」 6. 发送MQ消息(Topic=SCORE_EVENT, Tag=score:complete 消息体=ScoreCompleteEvent) 推送score:complete消息 1. 幂等校验(检查eventId是否已消费) 2. 组装通知内容(考生姓名+成绩+考试名称) 3. 发送短信/站内信通知(成绩已发布) 4. 保存通知记录
时序图核心说明:
  1. 核心流程:考生提交试卷 → 考试服务完成本地业务+发送MQ → 评分服务消费MQ+AI评分+发送MQ → 通知服务消费MQ+发送通知;
  2. 幂等性:每一步MQ消费前均做幂等校验(基于eventId),避免重复评分、重复发通知;
  3. 解耦设计
    • 考试服务不直接调用评分服务,仅发送MQ消息,无需关注评分逻辑;
    • 评分服务完成AI评分后,仅发送MQ消息,无需关注通知逻辑;
  4. 异步特性:AI评分、通知发送均为异步执行,考生提交试卷后立即返回结果,提升用户体验;
  5. 本地事件复用:评分服务消费MQ后,先转换为本地Spring Event再执行评分逻辑,解耦MQ消费和业务逻辑。

三、关键补充说明

1. 架构图核心要点
  • 服务边界:每个微服务职责单一(考试服务仅处理考试核心流程,评分服务仅处理评分),符合「高内聚、低耦合」的微服务设计原则;
  • 中间件定位
    • Nacos:统一管理服务注册和配置,所有服务启动时自动注册,配置动态刷新;
    • RocketMQ:分布式事件通信的唯一通道,替代硬编码的远程调用;
    • Redis:核心缓存+分布式锁,解决考试高峰期的数据库压力和并发问题;
  • AI能力集成:Spring AI作为独立能力层,所有服务通过标准化API调用AI能力,支持无缝切换大模型(如从智谱AI切换为文心一言)。
2. 时序图核心要点
  • 同步vs异步:考生提交试卷的核心流程(保存数据、更新状态)是同步的,保证数据一致性;跨服务的评分、通知是异步的,提升系统吞吐量;
  • 可靠性保障
    • 生产者(考试服务):MQ消息同步发送+重试,确保消息不丢失;
    • 消费者(评分/通知服务):消费失败后自动重试,多次失败进入死信队列,人工介入处理;
  • 监控埋点:在MQ发送/消费、AI评分、核心数据库操作处添加埋点,接入SkyWalking实现全链路追踪,便于定位问题(如考生提交试卷后未评分的问题)。

总结

  1. 架构图价值:清晰展示了从客户端到微服务、中间件、AI层的完整链路,明确了「Spring Event+MQ」的事件通信在架构中的核心位置,以及各组件的职责边界;
  2. 时序图价值:还原了「考生提交试卷→AI评分→成绩通知」的核心业务流程,直观体现了「本地事件解耦服务内、MQ解耦服务间」的设计思路,以及幂等性、异步性、可靠性的落地方式;
  3. 核心设计原则
    • 分布式事件通信:MQ是跨服务事件的唯一通道,替代硬编码的Feign调用;
    • 本地事件复用:服务内逻辑通过Spring Event解耦,降低代码耦合度;
    • AI能力解耦:AI评分/出卷等逻辑通过MQ事件触发,与核心业务分离,便于扩展。

这两张图完整覆盖了分布式在线考试系统的静态架构动态流程

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐