2024年上半年 系统架构设计师 - 案例分析

来源:网友回忆版(2024年5月考试) 考试时间:2024年5月25日 题型:必答1题 + 选答2题(共5题选3)

试题内容

试题一(必答,25分):软件架构设计与评估

背景描述

某公司开发一个在线大模型训练平台,支持Python代码编写、模型训练和部署,用户通过Python编写模型代码,将代码交给系统进行模型代码的解析,最终由系统匹配相应的计算机资源进行输出,用户不需要关心底层硬件平台。公司的系统架构师李工提出,该平台适合用解释器风格架构。

系统需求描述如下:

  • a. 系统发生错误时,异常请求不影响用户正常工作,并发送一个消息通知系统管理员。
  • b. 平台应保护用户隐私,防止未授权访问。
  • c. 系统界面能调整屏幕,适配用户提供的屏幕尺寸比例。
  • d. 用户提交训练任务时应该在一分钟内提供硬件和资源,启动训练。
  • e. 支持远程修改,供远程用户进行连接操作,仅提供给系统注册用户使用。
  • f. 在训练时,应对请求5秒内提供队列信息。
  • g. 支持多语音界面,操作指南和文档。
  • h. 发生故障时应在15秒内定位故障、解决故障。
  • i. 系统发生故障时,要能提供操作日志。
  • j. 具备扩展能力,能够3天内完成新功能部署。
  • k. 数据库发生故障后,自动切换到备用数据库,保证训练不中断。
  • l. 符合用户习惯的默认快捷键设置。

问题1(12分)

分析题干中(a)~(l)各需求对应的质量属性(性能、可用性、安全性、可修改性、易用性等)。

参考答案

  • a → 可用性(容错/异常隔离)
  • b → 安全性
  • c → 易用性
  • d → 性能
  • e → 安全性/可用性
  • f → 性能
  • g → 易用性
  • h → 可用性(可维护性)
  • i → 可用性(可维护性)
  • j → 可修改性
  • k → 可用性
  • l → 易用性

问题2(6分)

补充完整解释器风格架构图。

参考答案

解释器风格架构图包含以下组件:

  • 控制组件(解释引擎):负责解析和执行用户定义的指令
  • 内存/状态:记录解释引擎当前工作状态的数据结构
  • 用户界面:用户交互界面
  • 被解释的程序/规则:用户提交的Python代码

问题3(7分)

请解释为什么该模型平台适合解释器风格。

参考答案

该平台适合解释器风格,原因如下:

  1. 核心需求匹配:平台的核心功能是接收用户Python代码,解析并执行,这正好是解释器风格的典型应用场景
  2. 灵活性:解释器风格允许用户自定义训练代码,不需要修改平台本身
  3. 可扩展性:新增算法或模型只需编写新的代码,无需修改解释引擎
  4. 动态性:训练任务的参数和逻辑可动态变化,解释器风格天然支持
  5. 与底层解耦:用户不关心底层硬件,解释器可以屏蔽底层差异

试题二(选答,25分):医药领域智能问答系统(知识图谱+爬虫)

背景描述

某医院欲建设一个智能问答系统,建立医院知识图谱。互联网关键字检索无法满足需求,建议采用爬虫技术构建知识图谱。

问题1(10分)

完善基于知识图谱的医药领域智能问答系统架构图。

参考答案

三层架构:

  • 数据层:源数据、数据清洗、知识抽取
  • 知识层:知识存储(图数据库)、知识融合、知识推理
  • 应用层:问答接口、语义解析、答案生成

问题2(6分)

完善Scrapy框架架构图内容,用200字以内文字简要说明什么是异步I/O。

参考答案

Scrapy框架核心组件:

  1. Scrapy引擎(Scrapy Engine):框架核心,控制数据流
  2. 调度器(Scheduler):接收引擎请求,入队等待下载
  3. 下载器(Downloader):下载网页内容
  4. 爬虫(Spider):解析下载内容,提取数据
  5. 实体管道(Item Pipeline):处理提取的数据

异步I/O:异步I/O是一种非阻塞的输入输出操作方式。当发起I/O操作后,程序不需要等待操作完成即可继续执行其他任务,当I/O操作完成后通过回调或事件通知程序。这种机制可以大幅提高I/O密集型应用的并发处理能力。

问题3(9分)

医药领域知识图谱应采用何种方式进行知识存储,并说明原因。

参考答案

推荐采用图数据库(如Neo4j、Nebula Graph)进行存储,原因:

  1. 关系表达能力强:医药领域实体关系复杂(药物-疾病-症状-基因等),图数据库天然适合
  2. 查询效率高:多跳关系查询性能远优于关系型数据库
  3. 扩展性好:可随数据量增长弹性扩展
  4. 直观:实体和关系直接映射为节点和边

试题三(选答,25分):分布式锁与Redis

背景描述

关于数据库分布式锁的应用场景。

问题1(9分)

使用基于数据库的分布式锁所存在的缺陷。

参考答案

  1. 性能瓶颈:数据库锁操作涉及磁盘I/O,在高并发场景下性能较差
  2. 死锁风险:获取锁后进程崩溃未释放,导致锁永远被占用
  3. 不可重入:同一线程无法多次获取同一把锁
  4. 阻塞等待:获取锁失败时只能阻塞或轮询,浪费资源
  5. 单点故障:数据库本身故障导致锁服务不可用
  6. 锁粒度问题:锁粒度过大影响并发,过小增加管理复杂度

问题2(6分)

Redis的几种操作命令。

参考答案

常用Redis命令:

  • 写入:SET key value / ZADD
  • 查询:GET key / ZSCORE / ZRANGE / ZCARD
  • 删除:DEL key
  • 分布式锁:SET key value NX PX(加锁)/ Lua脚本(解锁)

问题3(10分)

基于Redis的分布式锁死锁场景举例,以及其他分布式锁类型。

参考答案

死锁场景:

  • 线程A获取锁后发生异常或超时未释放锁,线程B永远等待
  • 客户端A和客户端B交替尝试获取对方的锁,形成循环等待

其他分布式锁类型:

  1. ZooKeeper分布式锁:基于临时顺序节点实现
  2. etcd分布式锁:基于租约(Lease)和Revision机制
  3. Memcached分布式锁:基于CAS(Compare And Set)
  4. Redis RedLock:多节点Redis实现的分布式锁
  5. 数据库乐观锁:基于版本号机制

试题四(选答,25分):嵌入式系统

背景描述

嵌入式系统相关架构设计(回忆不完整)。


试题五(选答,25分):Web架构(数据库类型选择)

背景描述

Web系统架构设计,涉及数据库类型选择。

问题1(11分)

从接口层、处理层、数据层中选择填入MySQL、HDFS、HBase、ES。

参考答案

  • 接口层:负责接收请求
  • 处理层:业务逻辑处理
  • 数据层:MySQL(关系型数据)、HBase(海量数据)、ES(全文检索)、HDFS(文件存储)

问题2(10分)

MongoDB特点。

参考答案

  1. 文档存储:使用BSON格式存储非结构化数据
  2. Schema-free:无固定表结构,灵活支持不同格式
  3. 高性能:内存映射文件,支持索引
  4. 高可用:支持副本集和分片集群
  5. 丰富的查询:支持聚合管道、MapReduce

问题3(4分)

冷热数据分级存储的原因。

参考答案

  1. 成本优化:热数据用SSD,冷数据用HDD/磁带
  2. 性能保障:将有限的存储资源集中用于高频访问数据
  3. 访问模式差异:热数据需要低延迟,冷数据可以批量处理

论文题目(4选1)

  1. 论Lambda架构的应用 — 大数据处理
  2. 论模型驱动架构设计方法及其应用
  3. 论单元测试方法及运用
  4. 论云上自动化运维及其应用

考点映射

  • 架构风格:解释器风格、管道-过滤器、数据仓库
  • 质量属性:性能、可用性、安全性、可修改性、易用性
  • 架构评估:ATAM、效用树、质量属性场景六元素
  • 知识图谱:图数据库、Scrapy爬虫框架、异步I/O
  • 分布式系统:分布式锁、Redis、ZooKeeper
  • 数据库:MongoDB、冷热数据分离、读写分离
  • 嵌入式系统:实时架构
  • Web架构:分层架构、NoSQL