第1题(案例题试题一是必答题)
某互联网企业正在对其已有的在线服务平台进行架构升级,以提升系统的可维护性、可扩展性和服务稳定性。原系统采用传统的单体架构,随着业务模块的不断增加,系统部署越来越困难,修改一处代码往往需要整个系统重新打包上线,导致维护成本高、故障影响范围广。
为解决上述问题,架构团队计划引入微服务架构,将系统按业务边界划分为多个服务单元,分别部署和独立扩展,并配套引入容器化、服务注册与发现、统一配置中心等能力。同时,团队也在开展质量属性建模分析,明确如可用性、性能、可维护性等非功能需求的权衡与保障机制。
请结合下列问题,完成系统架构设计分析任务。

1) 可连续运行时间不少于240h,断电或故障后10s内应重启
2) 网络失效后,10s内应发起重新连接
【问题1解答】
微服务架构项目的优点:
可扩展性:微服务架构允许你根据需要独立扩展单个服务,不必扩展整个应用。
更好的灵活性和技术选型:微服务允许团队独立开发,不同团队可以使用不同的技术框架,只需统一遵循标准化接口定义,
故障隔离和容错性:单个微服务的故障不会影响其他服务,提高应用程序的容错性,能够更容易的更新部署。
缺点:运维复杂,数据一致性管理困难以及存在性能问题
复杂性:微服务架构设计分布式系统,需要处理分布式事务,微服务发现,微服务治理等问题
数据一致性:微服务服务设计不同服务之间数据一致性的问题。
部署和测试:由于服务数量增加,部署和测试变得更加复杂。
运维成本:需要更多运维工作,包括监控,日志,故障排查。
性能:通信开销可能存在性能隐患。
【问题2解答】A,B,C
【问题3解答】
1) 可连续运行时间不少于240h,断电或故障后10s内应重启
刺激源:断电或故障
刺激:系统故障或断电
制品:系统
环境:运行环境
响应:重启
响应度量:10秒内
2) 网络失效后,10s内应发起重新连接
刺激源:网络失效
刺激:网络失效
制品:系统
环境:网络环境
响应:重新连接
响应度量:10秒内
第2题
访问者通过微信公众号进入某单位的访客预约系统(以下简称“系统”),提交预约申请。系统将申请提交到预约审核模块进行审批。若审核通过,系统会将预约信息推送给被访人员。被访人员处理完成后,系统需将处理完毕的消息通知访问者本人及门禁管理人员。
该业务流程以UML序列图的形式表现如下图所示,请结合图示与业务场景,回答下列问题:

同步消息,用户端发起请求后,需等待接收方完成处理并返回结果后才可以进行下一步操作。通常以实线加实心箭头表示。
异步消息:用户端发起请求后无需等待消息返回,直接继续执行,如异步回调通知。通常以实线加空心箭头表示。
返回消息:表示同步或异步调度时,接收方返回的数据或响应结果。通常用虚线箭头表示。
【问题2解答】
(1)访问者 (2)被访问者 (3)提交预约内容 (4)提交申请 (5)提交审核 (6)审核处理 (7)返回处理结果 (8)返回审核结果 (9)返回预约结果
【问题3解答】在UML中,交互图中主要包括两种类型:顺序图(序列图)和通信图(协作图)。顺序图重时序,通信图重结构。
序列图(时序图):
适用场景:需要清洗的展示消息的时间顺序,并发操作,分支流程时优先选择。
优势:时间轴清晰,容易看懂流程先后和并发关系。
通信图(协作图):
适用场景:需要重点展示对象之间的关联关系,交互网络结构。且不强调时间顺序时优先选择。
优势:能同时展示对象和他们之间的连接,适合看“谁和谁打交道”。
【问题4解答】
可选分支:opt 类似if无else
互斥分支:alt 类似if-else 或switch -case
循环操作:loop 类似for/while
跳出序列:break 中断当前交互
并行分支:par 多个分支同时执行
记忆技巧:
可选分支:你面对“立即购买”和“加入购物车”的选项。
循环卡顿:系统一直在转圈加载(循环)。
互斥锁导致并行失败:你想和朋友同时开两个账号抢(并行),但系统限制同一IP只能一人操作(互斥)。
跳出:抢不到,你只能无奈关掉网页(跳出)。
第3题 嵌入式 省略
第4题 在分布式系统中,由于多个节点同时操作共享资源,容易产生竞争条件和资源冲突问题。为了保证数据一致性和系统的稳定性,需要一种有效的分布式锁机制来协调各节点对共享资源的访问。为了简化分布式锁的实现并提高性能,张工提出了一种利用数据库主键索引的方法来实现分布式锁。该方法的核心思想是利用数据库的唯一性约束和事务特性,通过对特定记录的插入和删除操作来实现锁的获取和释放。
【问题3】(6分)根据描述,在括号中填入对应的 zset 指令,存入秒杀的分数命令(1),获取分数范围的命令(2),获取分数(3)。
【问题1解答】基于数据库实现分布式锁的缺点:
(1)性能问题,单点瓶颈,数据库成为获取和释放锁的瓶颈,高并发场景下性能会受到严重影响,数据库压力骤增。
(2)可靠性问题:单点故障,数据库单点故障会导致整个分布式锁不可用,死锁风险。锁超时问题:需要设置合理的锁超时时间,避免资源长时间被占用,但超时时间难以确切,多短会导致业务失败。过长会导致性能下降。
(3)扩展性差:难以支撑大规模分布式系统的稳定运行
(4)生产环境实现复杂。生产环境下大量问题都需要额外代码解决。【问题2解答】
当Redis做分布式锁时,当A用户竞争锁成功,A用户所在的主机挂了,这时候还没来得及释放锁且设置的过期时间较长,还未到期。那么其他用户用setnx指令去竞争锁时发现Redis有这个锁的key,导致其他用户永远竞争不成功。
【问题3解答】
(1)ZADD
(2)ZRANGEBYSCORE
(3)ZSCORE
扩展:Redis几种类型
String :字符串 set、get、GETRANGE、SETEX、SETNX
List:列表 LPUSH、LRANGE、LPOP、RPOP 、Lindex
Hash:哈希 hset 、hget 、hgetall 、hdel 、HEXISTS 、hkeys 、hvals
Set:无序集合 sadd、SMemberS 、SISMember 、SRandMember
ZSet:有序集合zadd 、ZRange 、ZSCORE、ZRANGESCORE
GeoSpatial 地理位置
Hypeloglog 统计基数
Bitmaps 位存储
第5题
某地图服务平台正在建设一个支持大规模地理空间数据处理与检索的系统。系统目标包括:
支持客户端通过Web页面或RESTAPI访问地理信息服务;
具备任务调度与处理能力,完成如原始数据入库、地图瓦片生成等任务;
能高效存储不同类型的结构化与非结构化数据;
提供快速的检索与空间查询能力;
支持对存储数据按冷热等级分类管理,优化成本与性能。为满足上述需求,系统整体采用分层架构设计,核心架构图如下所示:

【问题3】(4分)该系统中 HDFS 使用热数据、温数据和冷数据存储的原因。
【问题1解答】(1) 接口层 (2) 处理层 (3) 存储层 (4) MySQL (5) HDFS (6) HBase (7) ES
【问题2解答】MongDB是典型的NoSQL 文档型数据库,其数据库存储单位为BSON。相比较关系型数据库需要严格的模式定义,MongoDB无需固定模式,能灵活的存储非结构化或半结构化数据,如JSON文档,图像信息,日志等。
他支持嵌套文档,数组字段与灵活的索引机制,使得数据结构与应用场景自然贴合,避免频繁的表结构变更,适应动态性强的业务需求。
在矢量存储方面,MongoDB支持将高纬特征向量直接存储为字段,结合向量索引机制实现快速的相似度检查。优势在于兼容分布式架构,高性能搜索,适配AI场景。
【问题3解答】HDFS采用热数据,问数据和冷数据分成存储是为了优化性能与降低存储成本。
热数据:访问频繁,响应要求高通常存储在SSD上,读取速度快。
温数据:访问较少,对性能要求一般,适合存储在普通硬盘(SATA)上;
冷数据:几乎不访问的历史数据或归档数据,存储在廉价介质如磁盘或云冷存储,节省成本。
这种分级存储策略可根据数据使用频率匹配不同存储资源,实现资源利用最大化,系统运行更高效。
扩展
1.JSON在数据存储、修改和传输方面的优点
JSON在数据存储上:JSON的语法简单明了,易于阅读和编写,降低了数据存储的复杂性。其次JSON支持多种数据类型,包括字符串,数字,布尔值,数组和对象。这使得它可以灵活地表示复杂的数据结构。此外JSON允许空值和可选字段,增加数据灵活性,缩小了空间占用。
再修改方面:由于基于文本格式,JSON文档可以直接被程序解析和修改。JSON也支持使用文本编辑器进行查看,对开发和调试非常有利。
传输方面:JSON的格式精凑,易于传输和存储。因为几乎所有现代编程语言(Java, Python, JS, Go等)都内置了高效的 JSON 解析库,这让它在前后端分离、微服务调用中成为了事实上的标准。