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分)
请解释为什么该模型平台适合解释器风格。
参考答案
该平台适合解释器风格,原因如下:
- 核心需求匹配:平台的核心功能是接收用户Python代码,解析并执行,这正好是解释器风格的典型应用场景
- 灵活性:解释器风格允许用户自定义训练代码,不需要修改平台本身
- 可扩展性:新增算法或模型只需编写新的代码,无需修改解释引擎
- 动态性:训练任务的参数和逻辑可动态变化,解释器风格天然支持
- 与底层解耦:用户不关心底层硬件,解释器可以屏蔽底层差异
试题二(选答,25分):医药领域智能问答系统(知识图谱+爬虫)
背景描述
某医院欲建设一个智能问答系统,建立医院知识图谱。互联网关键字检索无法满足需求,建议采用爬虫技术构建知识图谱。
问题1(10分)
完善基于知识图谱的医药领域智能问答系统架构图。
参考答案
三层架构:
- 数据层:源数据、数据清洗、知识抽取
- 知识层:知识存储(图数据库)、知识融合、知识推理
- 应用层:问答接口、语义解析、答案生成
问题2(6分)
完善Scrapy框架架构图内容,用200字以内文字简要说明什么是异步I/O。
参考答案
Scrapy框架核心组件:
- Scrapy引擎(Scrapy Engine):框架核心,控制数据流
- 调度器(Scheduler):接收引擎请求,入队等待下载
- 下载器(Downloader):下载网页内容
- 爬虫(Spider):解析下载内容,提取数据
- 实体管道(Item Pipeline):处理提取的数据
异步I/O:异步I/O是一种非阻塞的输入输出操作方式。当发起I/O操作后,程序不需要等待操作完成即可继续执行其他任务,当I/O操作完成后通过回调或事件通知程序。这种机制可以大幅提高I/O密集型应用的并发处理能力。
问题3(9分)
医药领域知识图谱应采用何种方式进行知识存储,并说明原因。
参考答案
推荐采用图数据库(如Neo4j、Nebula Graph)进行存储,原因:
- 关系表达能力强:医药领域实体关系复杂(药物-疾病-症状-基因等),图数据库天然适合
- 查询效率高:多跳关系查询性能远优于关系型数据库
- 扩展性好:可随数据量增长弹性扩展
- 直观:实体和关系直接映射为节点和边
试题三(选答,25分):分布式锁与Redis
背景描述
关于数据库分布式锁的应用场景。
问题1(9分)
使用基于数据库的分布式锁所存在的缺陷。
参考答案
- 性能瓶颈:数据库锁操作涉及磁盘I/O,在高并发场景下性能较差
- 死锁风险:获取锁后进程崩溃未释放,导致锁永远被占用
- 不可重入:同一线程无法多次获取同一把锁
- 阻塞等待:获取锁失败时只能阻塞或轮询,浪费资源
- 单点故障:数据库本身故障导致锁服务不可用
- 锁粒度问题:锁粒度过大影响并发,过小增加管理复杂度
问题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交替尝试获取对方的锁,形成循环等待
其他分布式锁类型:
- ZooKeeper分布式锁:基于临时顺序节点实现
- etcd分布式锁:基于租约(Lease)和Revision机制
- Memcached分布式锁:基于CAS(Compare And Set)
- Redis RedLock:多节点Redis实现的分布式锁
- 数据库乐观锁:基于版本号机制
试题四(选答,25分):嵌入式系统
背景描述
嵌入式系统相关架构设计(回忆不完整)。
试题五(选答,25分):Web架构(数据库类型选择)
背景描述
Web系统架构设计,涉及数据库类型选择。
问题1(11分)
从接口层、处理层、数据层中选择填入MySQL、HDFS、HBase、ES。
参考答案
- 接口层:负责接收请求
- 处理层:业务逻辑处理
- 数据层:MySQL(关系型数据)、HBase(海量数据)、ES(全文检索)、HDFS(文件存储)
问题2(10分)
MongoDB特点。
参考答案
- 文档存储:使用BSON格式存储非结构化数据
- Schema-free:无固定表结构,灵活支持不同格式
- 高性能:内存映射文件,支持索引
- 高可用:支持副本集和分片集群
- 丰富的查询:支持聚合管道、MapReduce
问题3(4分)
冷热数据分级存储的原因。
参考答案
- 成本优化:热数据用SSD,冷数据用HDD/磁带
- 性能保障:将有限的存储资源集中用于高频访问数据
- 访问模式差异:热数据需要低延迟,冷数据可以批量处理
论文题目(4选1)
- 论Lambda架构的应用 — 大数据处理
- 论模型驱动架构设计方法及其应用
- 论单元测试方法及运用
- 论云上自动化运维及其应用
考点映射
- 架构风格:解释器风格、管道-过滤器、数据仓库
- 质量属性:性能、可用性、安全性、可修改性、易用性
- 架构评估:ATAM、效用树、质量属性场景六元素
- 知识图谱:图数据库、Scrapy爬虫框架、异步I/O
- 分布式系统:分布式锁、Redis、ZooKeeper
- 数据库:MongoDB、冷热数据分离、读写分离
- 嵌入式系统:实时架构
- Web架构:分层架构、NoSQL