入侵检测与告警系统
考点:架构风格选型、质量属性场景六要素、管道—过滤器构件设计。
【说明】
某公司开发一套面向企业网络的入侵检测与告警系统,系统对网络流量与主机行为进行实时采集与分析,并在发现异常时生成告警。系统主要业务流程为:
数据收集 → 数据预处理 → 特征提取 → 规则匹配 / 模型推理 → 告警产生 → 告警输出
系统需求列表如下(备选质量属性集合:可用性 / 安全性 / 性能 / 可修改性):
- 权限分配给用户和管理员,不同角色拥有不同的功能与数据访问范围。
- 系统应能在每秒处理不少于 10000 条网络日志数据,单条处理延迟不超过 100ms。
- 系统 7×24 小时运行,年可用性不低于 99.99%,单点故障自动切换。
- 系统正常运行期间,未授权用户越界访问或试图修改规则时,系统应立即拒绝请求,并在 1 秒内告警并记录到安全审计日志中。
- 系统应支持新增检测规则在 30 分钟内上线生效,无需停机。
- 当某个过滤器节点发生故障时,系统应在 30 秒内完成故障转移,保证业务连续。
- 在告警高峰期(每秒告警数 ≥ 1000)下,告警输出端到端延迟不超过 3 秒。
- 系统应支持新增告警通道(如新增钉钉、企业微信)只需配置即可,无需修改代码。
问题 1(10 分)
- 将题干给出的 8 个质量属性场景(a~h)对应到具体质量属性(可用性 / 安全性 / 性能 / 可修改性),在题号后填写对应字母。
- 针对需求 d,按质量属性场景六要素(刺激源、刺激、环境、制品、响应、响应度量)进行场景描述。
展开查看参考答案
1. 字母与质量属性对应:
| 需求 | 质量属性 | 需求 | 质量属性 |
|---|---|---|---|
| a | 安全性 | e | 可修改性 |
| b | 性能 | f | 可用性 |
| c | 可用性 | g | 性能 |
| d | 安全性 | h | 可修改性 |
2. 需求 d 的质量属性场景六要素:
- 刺激源(Source):未授权用户(外部非授权访问者或试图越权的内部用户)。
- 刺激(Stimulus):发起越界访问或试图修改规则。
- 环境(Environment):系统正常运行期间。
- 制品(Artifact):系统的访问控制 / 规则管理 / 审计模块。
- 响应(Response):立即拒绝请求,并将事件记录到安全审计日志。
- 响应度量(Response Measure):拒绝行为为“立即”完成,审计日志在 1 秒内生成。
问题 2(7 分)
批处理风格与管道—过滤器风格两种架构风格,哪一种更适合应用于入侵检测和告警类的系统?请选择其中一种,并说明理由。
展开查看参考答案
选择:管道—过滤器风格(Pipe-and-Filter)。
- 实时性匹配:入侵检测的输入是连续的网络流量与主机日志,要求流式、低延迟处理;管道—过滤器以“数据来一段处理一段”的方式工作,契合流式场景。批处理需先攒齐一批再处理,无法满足“立即拒绝 + 1 秒内审计”的实时性要求。
- 流程阶段独立:系统流程“采集 → 预处理 → 特征提取 → 规则 / 模型推理 → 告警产生 → 告警输出”天然是多阶段流水线,每阶段职责单一,与管道—过滤器模型一致。
- 可扩展性强:新增检测算法或特征提取器只需新增 / 替换某一过滤器,对其他阶段无影响;批处理风格阶段耦合较紧,扩展成本高。
- 可并发可分布:每个过滤器可独立部署、独立扩容,支持横向扩展应对流量峰值;单个过滤器故障不会拖垮全链路,便于降级与重试。
问题 3(8 分)
根据你在子题 2 中选择的架构风格,补充完整该系统架构中包含哪些构件,并说明各构件的职责与数据流。
展开查看参考答案
基于管道—过滤器风格,系统主要构件如下:
| # | 构件 | 类型 | 职责 |
|---|---|---|---|
| 1 | 数据采集器 | Source Filter | 采集网络流量、主机日志、终端 agent 数据 |
| 2 | 数据预处理过滤器 | Filter | 清洗、归一、去重、时间对齐 |
| 3 | 特征提取过滤器 | Filter | 抽取统计特征、行为序列、协议字段 |
| 4 | 规则匹配 / 模型推理过滤器 | Filter | 基于规则库或 ML 模型判断异常 |
| 5 | 告警产生过滤器 | Filter | 生成告警事件,附带等级与上下文 |
| 6 | 告警输出过滤器 | Sink Filter | 通过邮件 / 短信 / SOC / Webhook 等通道输出 |
| 7 | 管道(Pipe) | 连接器 | 基于消息队列(如 Kafka)解耦相邻过滤器 |
| 8 | 审计与日志构件 | 横切构件 | 记录处理链路与拒绝行为,满足“1 秒内审计” |
| 9 | 配置与规则管理构件 | 控制构件 | 管理检测规则、模型版本、过滤器配置下发 |
数据流:原始数据 → [采集] → [预处理] → [特征提取] → [规则 / 模型推理] → [告警产生] → [告警输出],全链路通过消息队列管道解耦。
居家养老智能管理系统
考点:四层架构技术选型、时序数据与时序数据库、MQTT QoS 分级。
【说明】
某公司开发一套居家养老智能管理系统,对独居 / 高龄老人进行日常照护,主要功能包括:
- 对家居环境(温度、湿度、光照)的测量与监控;
- 对老人跌倒(倒地)进行实时检测;
- 上传水表、电表数据,并对未关闭电器进行告警;
- 一键呼叫功能,可直接呼叫医护人员到场;
- 对卫生间和浴室进行检测(如长时间停留、跌倒);
- 通过机器人完成送药、送饭、急救协助等任务。
系统采用四层分层体系架构,结构如下(带 (1)~(7) 待填空号):
┌─────────────────────────────────────────────────────────┐
│ L1 表示层 Web 端 [ (1) ] │
└────────────────────── (3) ───────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ L2 应用服务层 [ (2) ] / Spring Boot / Spring Cloud │
│ └─→ DB [ (4) ]│
└────────────────────── HTTP ──────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ L3 数据计算层 Kafka → Flink 流计算引擎 │
│ └─→ DB [ (5) ]│
└────────────────────── MQTT ──────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ L4 边缘网关层 嵌入式设备 [ (6) ] 机器人 [ (7) ] │
└─────────────────────────────────────────────────────────┘
题目给定的技术选项集合:Vue.js、Socket、Kafka、Flink、TDengine、NoSQL、MySQL、ROS、freeRTOS、HTTP、MQTT、WebSocket。
问题 1(7 分)
请根据题目给出的四层体系架构图和技术选项集合,将图中标号 (1)~(7) 处填入合适的技术名称。
展开查看参考答案
| 空号 | 位置 | 技术 | 选用理由 |
|---|---|---|---|
| (1) | L1 表示层 — Web 端 | Vue.js | 主流前端框架,承接 Web 端 UI |
| (2) | L2 应用服务层 | NoSQL | 缓存设备状态与会话信息,支撑高并发查询 |
| (3) | L1 ↔ L2 通信 | WebSocket | 双向实时通信,承载告警推送与一键呼叫 |
| (4) | L2 业务数据库 | MySQL | 关系型业务数据:用户、设备档案、告警记录 |
| (5) | L3 时序数据库 | TDengine | 海量传感器时序数据存储与高效查询 |
| (6) | L4 嵌入式设备 OS | freeRTOS | 资源受限嵌入式设备的实时操作系统 |
| (7) | L4 机器人 OS | ROS | 服务机器人的标准操作系统 |
问题 2(10 分)
- 什么是时序数据?为什么 L3 数据计算层要使用时序数据库(TDengine)而不是关系数据库?
- 请分别说明本系统四层架构每一层的主要功能,并结合题目所给的图中模块说明各层在系统中所承担的职责。
展开查看参考答案
1. 时序数据与时序数据库:
时序数据(Time-Series Data):以时间戳为主键、按时间顺序产生的数据。特点是写多读少、单调追加写、按时间窗口聚合查询、数据量巨大。本系统中环境传感器(温湿度、光照)、水电表、人体感应器、跌倒检测等持续产生高频时序点。
为什么使用时序数据库:
- 高吞吐写入:百万级设备的高频上报远超传统关系库的写入能力,TDengine 针对“按时间分区 + 列式存储 + 高压缩比”做了优化;
- 存储成本低:列式存储 + 时序压缩算法可达 10×~100× 压缩比,大幅降低长周期保存成本;
- 聚合查询高效:内建降采样、滑动窗口、插值等时序专用算子,秒级返回历史曲线;
- 生命周期管理:内建数据保留策略(自动过期、冷热分层),运维成本低;
- 关系型不适合:MySQL 等行式存储在百万级 IoT 写入下索引膨胀、查询慢,且不支持时序专用算子。
2. 四层架构主要功能:
| 层 | 名称 | 主要功能与职责 |
|---|---|---|
| L1 | 表示层 | 面向家属、护理人员、运营人员的 Web / App 展示与交互;Vue.js 构建前端,通过 WebSocket 接收告警推送 |
| L2 | 应用服务层 | 承载业务逻辑(用户管理、告警规则、家庭与亲属关系);NoSQL 缓存设备状态,MySQL 持久化业务数据;对外提供 RESTful API |
| L3 | 数据计算层 | Kafka 承接边缘上送数据,Flink 做流式计算(跌倒识别、电器异常检测、阈值告警);TDengine 存储海量时序数据 |
| L4 | 边缘网关层 | 就近接入各类传感器与机器人;本地协议转换;本地告警与机器人调度;freeRTOS 嵌入式设备负责感知,ROS 机器人负责送药、急救协助 |
问题 3(8 分)
本系统 L4 边缘网关层与 L3 数据计算层之间采用 MQTT 协议传输数据。MQTT 协议定义了 QoS 0 / QoS 1 / QoS 2 三种服务质量等级,请分别说明三者的语义与适用场景,并结合本居家养老系统说明为什么要选择 QoS 2。
展开查看参考答案
| QoS 等级 | 语义 | 投递保证 | 报文交互 | 适用场景 |
|---|---|---|---|---|
| QoS 0 | At most once,最多一次 | 不保证送达,可能丢失,不重复 | 1 次:PUBLISH | 容忍丢失,如周期性环境采样(温湿度上报) |
| QoS 1 | At least once,至少一次 | 保证送达,但可能重复 | 2 次:PUBLISH → PUBACK | 必须送达且接收端可幂等处理,如水电表读数上报 |
| QoS 2 | Exactly once,恰好一次 | 保证送达且不重复 | 4 次:PUBLISH → PUBREC → PUBREL → PUBCOMP | 关键控制指令、告警、急救呼叫等不允许丢失也不允许重复 |
本系统选择 QoS 2 的理由:
- 系统涉及老人跌倒告警、一键急救呼叫、机器人送药指令等关键消息——丢失会延误救治、危及生命;
- 同时这些消息不允许重复——重复呼叫医护、重复送药、重复急救指令都会造成混乱或医疗事故;
- QoS 0 不保证送达、QoS 1 可能重复,均无法同时满足“不丢 + 不重”,必须使用 QoS 2;
- 代价是 QoS 2 的四步握手会带来更高时延与 Broker 负载——非关键消息(如环境采样)可降级为 QoS 0/1,关键消息走 QoS 2,分级配置兼顾性能与可靠性。
智能安防管理系统
考点:AIoT 四层分层架构的职责划分、构件归类、分层架构在边缘协同场景的不足。
【说明】
某 AIoT 智能安防管理系统采用“感知层 — 边缘层 — AI 决策层 — 应用层”四层分层架构,结合边缘计算与云端协同实现智能决策。系统涉及的 11 个核心构件如下(顺序打乱):
智能门禁控制器、生物识别终端、周界保护传感器、边缘网关、计算中心、AI 模型、视觉分析引擎、规则分析引擎、APP 应用、显示大屏、第三方系统集成。
数据流向:
感知层(多种传感器)— 原始数据 / 控制信号 → 边缘层 — 结构化数据 / 指令 → AI 决策层(含视觉分析引擎、规则分析引擎)— API / 消息 → 应用层(含显示大屏)。
问题 1(8 分)
分别阐述感知层、边缘层、AI 决策层、应用层四层在该智能安防系统中的主要作用与活动。
展开查看参考答案
- 感知层:通过智能门禁控制器、生物识别终端、周界传感器、摄像头等终端设备采集物理世界的原始数据与控制信号,并接收上层指令完成本地动作(开门、报警、播放语音)。
- 边缘层:在靠近数据源的位置部署边缘网关与本地计算节点,完成数据清洗、协议转换、结构化、轻量推理、本地缓存,将原始数据转换为结构化数据上送 AI 决策层;同时承担断网兜底与低延迟响应职责,降低云端压力。
- AI 决策层:以计算中心 + AI 模型 + 视觉分析引擎 + 规则分析引擎为核心,对边缘上送的结构化数据进行深度推理、行为分析、异常检测、综合决策,通过 API / 消息把决策结果下发给应用层或边缘层。
- 应用层:承载 APP 应用、显示大屏、第三方系统集成,将 AI 决策结果可视化、业务化,并完成与公安、消防、物业等跨系统的数据交换。
问题 2(11 分)
将题目给出的 11 个构件按照“感知层 / 边缘层 / AI 决策层 / 应用层”四层架构分别归类填入对应层中。
展开查看参考答案
| 层 | 归属构件 | 数量 |
|---|---|---|
| 感知层 | 智能门禁控制器、生物识别终端、周界保护传感器 | 3 个 |
| 边缘层 | 边缘网关 | 1 个 |
| AI 决策层 | 计算中心、AI 模型、视觉分析引擎、规则分析引擎 | 4 个 |
| 应用层 | APP 应用、显示大屏、第三方系统集成 | 3 个 |
合计 11 个构件。
问题 3(6 分)
该四层分层架构在 AIoT / 物联网边缘计算与云端协同场景下存在哪些缺点或不足?请至少写出 5 点,并结合具体场景加以分析。
展开查看参考答案
- 跨层调用受限、灵活性差:分层架构强调严格逐层调用,应用层无法直接访问感知层数据;对极致实时性(毫秒级控制)的场景,逐层穿透带来不可接受的延迟。
- 端到端时延累加:感知 → 边缘 → AI → 应用四跳,每跳带来网络 / 序列化 / 排队开销,长尾时延难控;AI 决策层若部署在云端,时延更不可控。
- 边缘层与 AI 决策层职责边界模糊:轻量推理放边缘还是放云端难以一刀切,容易出现“边缘做太少 → 云压力大”或“边缘做太多 → 资源吃紧”的两难。
- 网络依赖与可用性问题:云端协同强依赖网络,断网时若边缘兜底不足,应用层整体降级;跨层数据同步在弱网下一致性难以保证。
- 横切关注点难以处理:安全、监控、运维、配置下发等横切能力需要在四层中重复实现,维护成本高,易出现配置漂移。
- 边缘节点资源受限:边缘网关算力、存储、能耗有限,复杂 AI 模型部署受限,模型更新与热部署工程链路复杂。
- 数据一致性与状态同步复杂:设备影子、缓存、规则版本在感知 / 边缘 / 云之间需协同,一致性难保障。
- 演进与扩展性受限:新增一种业务往往需要四层联动改造,发布上线成本高。
智能辅导学习系统(智能辅导与答疑)
考点:学习状态流转图填空、推荐系统三类冷启动、路径推荐对前置依赖的敏感性。
【说明】
某在线教育平台开发一套智能辅导学习系统,提供智能辅导与答疑能力。系统主要模块包括 数据收集、模型构件、智能辅助、学习路径推荐。
系统的学习状态流转图如下,含 6 个待填空位 (1)~(6):
┌────────┐
│ 开始 │
└────┬───┘
│
┌────────┴────────┐
(1) (2)
↓ ↓
┌────────────────────────┐
│ 学习进行中 │
└─────┬──────────────┬───┘
(4) (3)
│ ↓
│ ┌─────────────────────┐
│ │ 智能辅导中 │
│ └────┬───────────┬────┘
│ (6) (5)
│ ↓ ↓
└──────────────┴───────────┘
候选选项集合:数据收集、模型构件、学习路径推荐、智能辅助、答疑请求、推荐路径调整。
系统投入使用后,发现:
- 对新用户的推荐正确率不高,原因为用户冷启动;
- 对中等偏上水平的学员推荐准确性较高,对基础知识薄弱的学员推荐准确性较差,反映出系统过于偏向高级知识的分析。
问题 1(6 分)
请根据题目给出的学习状态流转图与选项集合,将图中标号 (1)~(6) 处填入合适的动作 / 模块名称。
展开查看参考答案
| 空号 | 位置 | 填入 | 说明 |
|---|---|---|---|
| (1) | 开始 → 学习进行中 的左分支 | 数据收集 | 采集学员初始信息(注册资料、入门测评结果) |
| (2) | 开始 → 学习进行中 的右分支 | 学习路径推荐 | 基于初始画像生成首版学习路径 |
| (3) | 学习进行中 → 智能辅导中 的触发动作 | 答疑请求 | 学员遇到卡点主动求助,或系统识别学员困难 |
| (4) | 学习进行中 内部的循环动作 | 模型构件 | 持续更新学员画像与知识点掌握度模型 |
| (5) | 智能辅导中 → 学习进行中 的回流动作 | 智能辅助 | 答疑结束,回到正常学习流程 |
| (6) | 智能辅导中 内部的循环动作 | 推荐路径调整 | 根据辅导反馈动态调整后续学习路径 |
问题 2(8 分)
系统投入使用后发现,对新用户的推荐正确率不高,原因主要是用户冷启动问题。请说明:
- 什么是用户冷启动?为什么会导致推荐正确率下降?
- 除“用户冷启动”外,推荐系统中还有另外两种冷启动,请分别说明其含义。
展开查看参考答案
1. 用户冷启动(User Cold Start):
指新注册用户或长期不活跃用户在系统中缺乏历史行为数据(无浏览、无点击、无评分、无测评结果)的情形。导致:
- 无法构建该用户的兴趣 / 能力画像;
- 协同过滤算法找不到相似邻居;
- 基于行为的特征大量缺失;
- 只能给出热门推荐 / 默认推荐等粗粒度结果,正确率自然偏低。
应对:基于注册资料、年级、目标技能、入门测评做画像冷启动;混合内容推荐;引导式入门测评快速积累显式反馈。
2. 另外两种冷启动:
- 物品冷启动(Item Cold Start):新加入的物品 / 课程没有被任何用户交互过,系统缺乏关于该物品的协同信号,难以将其推荐给合适的用户。应对:基于内容特征建模(标签、知识点、难度等)、引入运营冷启动流量。
- 系统冷启动(System Cold Start):整个推荐系统刚上线或新业务线启动时,用户与物品的交互数据都很稀少,模型无法训练或效果极差。应对:先用规则 / 热门 / 编辑推荐过渡,逐步积累数据后切换到模型推荐。
问题 3(11 分)
系统使用一段时间后发现:中等及以上水平的学员推荐路径效果较好,但基础知识较弱的学员反映推荐学习路径过难,系统过于偏向高级知识的分析。请从路径推理和数据两方面论述,学习路径推荐对学员基础知识前置依赖的敏感性问题及其原因,并给出改进建议。
展开查看参考答案
1. 路径推理(算法侧)原因:
- 缺乏前置依赖建模:算法主要基于相似度 / 相关性(协同过滤、内容相似),未显式建模知识点之间的前置依赖图(Prerequisite Graph),推荐时只看“相关”不看“先后”。
- 目标导向偏差:算法以“目标技能 / 高考点”为锚,倾向推荐与目标接近的高级内容,忽视了从学员当前水平到目标之间需要补齐的基础链路。
- 未引入能力评估闭环:未结合学员当前知识点掌握度(IRT / 知识追踪 BKT / DKT),无法判断学员能否承接下一个知识点。
- 多样性优化与难度递进缺失:只优化点击率 / 完成率,未把“难度梯度合理”作为目标函数的一部分。
改进:引入知识图谱与前置依赖关系,结合知识追踪模型构建“能力—难度”匹配,在排序阶段加入难度递进约束。
2. 数据侧原因:
- 样本分布偏倚:训练数据中中高级学员的行为样本远多于基础薄弱学员(基础薄弱学员留存率本身低),模型学到的特征偏向中高级学员。
- 能力标签缺失或粗糙:缺乏对学员当前知识点掌握度的细粒度评估数据,无法区分“基础薄弱”与“中等水平”。
- 隐式反馈噪声:基础薄弱学员的点击 / 浏览未必代表“听懂了”,反馈信号噪声大,模型容易把“高难度内容被点击”误认为“该用户能接受高难度内容”。
- 课程难度标签不规范:难度标签由运营人工打,标准不统一,导致模型对“难度”理解失真。
改进:增加入门测评显式数据、标准化课程难度标签、引入显式的能力—难度匹配特征、对训练样本做重采样或加权以纠正偏倚。
高并发数据访问场景下的并发控制与缓存优化
考点:悲观锁分类与场景、乐观锁实现、Redis 穿透 / 击穿 / 雪崩。
【说明】
某电商业务系统在大促秒杀场景下面临严重的并发竞争与性能瓶颈:
- 数据库层:库存扣减、订单创建存在写写冲突,部分热门商品出现超卖;
- 缓存层:商品详情缓存出现穿透、击穿与雪崩三类问题,导致 DB 压力骤增。
为此需要结合悲观锁、乐观锁等并发控制机制以及 Redis 缓存优化手段进行设计与改造。
问题 1(8 分)
悲观锁按行为方式可以分为哪几种(至少两类)?请分别说明每种悲观锁的工作机制、典型应用场景,并给出对应的设计方案。
展开查看参考答案
悲观锁按行为方式(读 / 写)可分为两类:
1. 共享锁(Shared Lock,S 锁 / 读锁)
- 机制:事务持有 S 锁后,其他事务可继续加 S 锁读,但不能加 X 锁写;允许多读、禁止读写并发与写写并发。
- 典型场景:报表查询、对账等需要一致性读但允许并发读的场景。
- 设计方案:
- 数据库:
SELECT ... LOCK IN SHARE MODE(MySQL InnoDB); - 业务层:快照读 + 共享锁组合,保证读取一致性。
- 数据库:
2. 排他锁(Exclusive Lock,X 锁 / 写锁)
- 机制:事务持有 X 锁后,其他事务既不能加 S 锁也不能加 X 锁,完全独占;保证写写、读写串行化。
- 典型场景:账户扣款、库存扣减、订单状态变更等强一致写场景。
- 设计方案:
- 数据库:
SELECT ... FOR UPDATE(MySQL InnoDB)配合事务边界; - 分布式:Redis SET NX EX / Redisson 红锁、Zookeeper 临时顺序节点、etcd lease;
- 设计要点:行锁优于表锁、按业务主键加锁;固定多资源加锁顺序避免死锁;分布式锁必须设置 TTL 与自动续约,防止持锁者宕机;可重入支持同一线程对同一资源多次加锁。
- 数据库:
问题 2(9 分)
- 请从应用层和 DBMS 层两个角度,分别介绍乐观锁的实现方案。
- 对比乐观锁与悲观锁的优缺点与适用场景,并结合本题电商秒杀业务说明应如何选型。
展开查看参考答案
1. 乐观锁的实现方案:
(a) 应用层实现:
- 版本号机制(Version):实体表加
version INT字段;更新时UPDATE t SET col=?, version=version+1 WHERE id=? AND version=?,影响行数为 0 即冲突; - 时间戳机制(Timestamp):用
updated_at作为版本,逻辑同上; - 业务字段 CAS:将原值带入 WHERE 条件,如库存扣减
UPDATE stock SET num=num-1 WHERE id=? AND num=?; - 冲突重试 + 退避:应用层捕获冲突 → 指数退避 + 限重试次数;
- ABA 防护:版本号单调递增天然防 ABA。
(b) DBMS 层实现:
- MVCC(多版本并发控制):InnoDB 通过隐藏列 DB_TRX_ID / DB_ROLL_PTR 与 undo log 实现快照读,读不加锁,写时通过当前读判断版本;
- 可重复读 / 串行化隔离级别:在事务提交时 DBMS 检测写冲突;
- CAS 原语:PostgreSQL xmin、SQL Server rowversion 等提供原生版本字段;
- ORM 框架集成:JPA @Version、Hibernate Optimistic Locking、MyBatis-Plus @Version 自动注入 version 条件。
2. 悲观锁 vs 乐观锁对比:
| 维度 | 悲观锁 | 乐观锁 |
|---|---|---|
| 核心假设 | 假设冲突一定发生,先加锁再操作 | 假设冲突很少发生,先操作再校验 |
| 实现方式 | FOR UPDATE / 数据库行锁 / 分布式锁 | 版本号 / 时间戳 / CAS / MVCC |
| 优点 | 强一致、实现简单、并发冲突可控 | 无阻塞、吞吐量高、无死锁 |
| 缺点 | 加锁开销大、吞吐量低、可能死锁、持锁宕机影响大 | 冲突多时重试代价高、需业务层处理重试与降级、ABA 问题 |
| 适用场景 | 写多 / 冲突高 / 强一致(扣款、库存扣减) | 读多写少 / 冲突低(点赞、评论、配置更新) |
本题秒杀场景选型:
- 库存扣减:写竞争极高、强一致要求高 → 悲观锁(数据库行锁 + 事务 + Redis 分布式锁防超卖);
- 商品详情读取:读多写少 → 乐观锁 / 缓存 + 版本号;
- 订单创建:使用乐观锁 + 唯一索引防重复下单;
- 兜底:乐观锁冲突重试限定次数与退避,超阈值降级到悲观锁或返回“商品繁忙”业务错误。
问题 3(8 分)
针对高并发场景下 Redis 缓存的穿透、击穿、雪崩三类问题,请分别说明问题原理、Redis 中的实现优化方案与适用场景。
展开查看参考答案
1. 缓存穿透(Cache Penetration)的优化
- 问题:查询不存在的数据,每次请求都打穿到 DB,恶意请求可拖垮 DB。
- 手段与实现:
- 布隆过滤器(Bloom Filter):缓存前置一层 Bloom,过滤一定不存在的 key(Redis 可用 RedisBloom 模块实现);
- 缓存空值:对查询为空的 key 也缓存一个短 TTL 的空对象(
SET key NULL EX 60)。
- 场景:大量“查询不存在 key”的业务(非法 ID 爬虫攻击、按用户输入查询)。
2. 缓存击穿(Cache Breakdown)的优化
- 问题:热点 key 过期瞬间,大量并发请求同时落到 DB。
- 手段与实现:
- 互斥锁(Mutex / SET NX):未命中时只允许一个请求查 DB 并回填,其余等待(
SET key val NX EX 10); - 逻辑过期 / 永不过期 + 异步刷新:value 中带逻辑过期字段,物理 TTL 设为 -1,后台线程异步刷新;
- 热点 key 预热:上线 / 活动前主动预加载到缓存。
- 互斥锁(Mutex / SET NX):未命中时只允许一个请求查 DB 并回填,其余等待(
- 场景:单一热点 key 高并发访问(秒杀商品详情、首页配置)。
3. 缓存雪崩(Cache Avalanche)的优化
- 问题:大量 key 在同一时刻集中过期,或 Redis 整体故障,请求全部打到 DB。
- 手段与实现:
- 过期时间随机化:
EXPIRE key (base ± random),把过期时间打散; - 多级缓存:Caffeine 本地缓存 + Redis + DB;
- 熔断降级与限流:Redis 故障时熔断降级到本地缓存 / 默认值,对 DB 加限流(Sentinel / Hystrix);
- Redis 高可用:主从 + 哨兵 / Cluster,避免单点故障。
- 过期时间随机化:
- 场景:大规模缓存批量预热、定时全量刷新、Redis 主节点故障。
整理口径:以上 5 个案例为考生回忆资料的同考点重构版,答案与解析为编辑团队按教程与行业实践整理,仅供复盘学习,最终以官方信息为准。
后续更新:若获得新的案例分析回忆版素材,将同步补充至本页。