路线图

面试 · 对比辨析型

星辉 2026-07-02 阅读 5 min 1,045 字 路线图
面试 · 对比辨析型 封面

目标:考察对相近概念的精确区分能力和结构化对比思维。每题必须包含对比表。 答题框架:是什么 → 差异 → 替代方案 → 如何选(视题目类型选用适用步骤)。


1. SRE vs DevOps:核心区别是什么?#

维度DevOpsSRE
核心主张打破开发和运维壁垒用软件工程做运维
关注点文化 + 协作 + 工具链可靠性量化 + 运维自动化
可靠性如何度量无标准化方法SLI/SLO/Error Budget
发布决策主观判断或 CI/CD 门禁基于 Error Budget 的数据驱动
运维工作量团队共享,无明确比例50% toil 上限硬约束
人才模型DevOps 工程师软件工程师做 SRE
可观测性监控 + 告警可观测性(未知的未知)
关系理念和文化层具体工程实践层

差异:DevOps 回答"如何搭工具链",SRE 回答"如何用工具做决策"。DevOps 没有 SLO/Error Budget 这套量化框架,发布决策靠主观判断。

如何选:两者不互斥。最好的团队同时有 DevOps 文化(打破壁垒)和 SRE 实践(量化可靠性)。先做 DevOps 搭工具,再做 SRE 做决策。


2. SLI vs SLO vs SLA:三者的关系和区别#

维度SLISLOSLA
全称Service Level IndicatorService Level ObjectiveService Level Agreement
本质测量值目标值合同约束
例子"P99 延迟 = 230ms""月度 P99 ≤ 500ms""如月度可用性 < 99.9%,赔付 25%"
谁定SRE/研发(技术指标)SRE + 业务协商(内部目标)法务/商务(对外承诺)
约束力内部团队约束法律约束 + 赔偿条款
变更频率基本不变季度回顾调整合同周期内不变
是否所有服务都需要否(只有对外服务)

差异:SLI 是尺子(测量),SLO 是刻度(目标),SLA 是刻度加后果(违约赔付)。

如何选:关系链——SLI 测量 → 验证 SLO → SLA 比 SLO 更宽松。SLA 永远不能等于 SLO,中间必须有缓冲(如 SLO 99.95%,SLA 99.9%,缓冲 0.05%)。


3. 症状型告警 vs 原因型告警#

维度症状型原因型
定义基于用户感受到的问题基于系统内部组件状态
例子"Payment API 错误率 > 5%""Redis master pod 不可用"
遗漏率低——用户感受到的都能覆盖高——想不到的根因不会配告警
噪声率低——只在用户真受影响时响高——组件故障但用户没事
可操作信息明确(服务出问题了)模糊(需要进一步排查)
用于 page✅ 是❌ 否
维护成本低(SLO 不变就不改)高(架构变就要改)

差异:症状型度量"用户疼不疼",原因型度量"组件坏没坏"。前者直接对应用户体验,后者需要推断。

替代方案:原因型指标不直接 page,但用在 Dashboard、告警子条件、抑制条件、Ticket 级告警。

如何选Google SRE 铁律——page 级告警必须是症状型。原因型放排障下钻用。


4. 熔断(Circuit Breaker)vs 限流(Rate Limiting)#

维度熔断限流
触发条件下游错误率高/响应慢请求量超阈值
目的保护上游不被慢下游拖垮保护下游不被过量请求打挂
粒度按下游健康状态动态切换按 QPS/并发数硬限制
状态CLOSED → OPEN → HALF-OPEN 三态无状态,只做流量整形
方向阻断"自己→下游"调用阻断"上游→自己"请求
典型工具Hystrix/Sentinel/Resilience4jIstio RateLimit/NGINX/令牌桶

差异:熔断是"下游生病了我避开",限流是"我自己只接这么多"。熔断是自适应的(根据错误率自动开关),限流是静态的(固定阈值)。

如何选:两者互补,必须组合使用。熔断防雪崩,限流防过载。一个完整的可靠性方案两者都需要。


5. 令牌桶(Token Bucket)vs 漏桶(Leaky Bucket)#

维度令牌桶漏桶
处理模型预存令牌,请求来时取令牌请求进队列,固定速率出队
是否允许突发✅ 允许(桶里有令牌就能一次取完)❌ 不允许(处理速率固定)
适用场景API 网关——允许突发但要限制平均速率消息队列消费——需要平滑处理
关键参数Rate(令牌生成速率)+ Burst(桶容量)Rate(出水速率)+ Queue Size(队列容量)
用户体验好(偶尔突发不被拒)一致(但突发会被拒)

差异:令牌桶允许突发(桶里有令牌就能瞬间处理多个),漏桶强制平滑(不管请求多突发,处理速率恒定)。

如何选:API 网关用令牌桶(用户请求允许偶尔突发),消息队列消费用漏桶(必须匀速处理)。


6. 白盒监控 vs 黑盒监控#

维度白盒监控黑盒监控
数据来源系统内部(Prometheus metrics/日志/trace)外部探测(HTTP probe/合成事务)
能发现什么已知的故障模式(提前想到的)未知的故障(没提前想到的)
排障能力能定位根因只知道"有问题"
覆盖时段有真实流量时有效7×24 持续有效
典型工具Prometheus/Grafana/Loki/TempoBlackbox Exporter/cuj-prober
信号粒度细(能下钻到 span)粗(只知道通/不通)

差异:白盒是"系统自述健康状况",黑盒是"外部用户视角探测"。白盒能定位根因但只能回答"已知的未知",黑盒能发现"未知的未知"但不能定位根因。

如何选:SRE 要求两者互补。白盒做 SLO 和排障,黑盒做兜底和死机检测。半夜无流量时黑盒是唯一信号。


7. SLO 99.9% vs 99.99%:成本差异有多大?#

维度99.9%(三个九)99.99%(四个九)
月度允许不可用43.2 分钟4.32 分钟
年度允许不可用8.76 小时52.6 分钟
架构要求单 AZ 多副本可能满足必须多 AZ/多 Region
工程投入基础监控+告警+自动化全链路冗余+自动故障转移+混沌验证
成本倍数基准 1x通常 3-5x
适用场景一般业务服务支付/交易核心
on-call 强度正常轮值必须 7×24 高强度

差异:每增加一个九,允许的不可用时间减少 10 倍,但成本增加 3-5 倍。从 99.9% 到 99.999% 可能需要 10-20 倍成本。

如何选:根据用户期望和业务价值。内部工具 99% 够,一般业务 99.9%,核心交易 99.99%,电信级基础设施 99.999%。不要盲目追求高 SLO——多一个九的成本远非线性的。


8. 滚动更新 vs 蓝绿部署 vs 金丝雀发布#

维度滚动更新蓝绿部署金丝雀发布
做法逐个替换旧实例新旧两套完整环境,切流切换新版本先接小流量验证
回滚速度慢(逐个回滚)快(切回旧环境)快(切回 100% 旧版)
资源需求无额外双倍少量额外
影响面控制逐实例,不可控瞬间 100% 切换精确控制流量比例
风险等级
推荐作为无状态简单服务低流量服务默认策略
数据库兼容需向后兼容需向后兼容需向后兼容

差异:滚动更新是"渐进替换",蓝绿是"整体切换",金丝雀是"小流量先验证"。金丝雀风险最低因为有"试探"阶段。

如何选:金丝雀是默认策略。全量发布只应在内部工具等低风险场景使用。蓝绿适合需要瞬间切换的场景(如重大架构升级)。


9. HPA(水平扩缩)vs VPA(垂直扩缩)vs CA(集群扩缩)#

维度HPAVPACA/Karpenter
扩什么Pod 副本数Pod 资源请求Node 数量
方向水平垂直水平
适用无状态服务有状态/难水平扩展Pod Pending 时触发
时间尺度秒~分钟分钟(需重启 Pod)分钟(需启动节点)
风险高(需要业务支持水平扩展)业务重启时风险新节点冷启动延迟
和 HPA 兼容不能同维度共用配合使用

差异:HPA 加副本,VPA 加资源(CPU/内存),CA 加节点。HPA 是最常用的,VPA 适合"不知道该给多少资源"的服务,CA 是 HPA 的下游——HPA 触发后 Pod 没节点可调度时 CA 扩节点。

如何选:无状态服务用 HPA,有状态服务慎用 VPA(重启风险),所有集群配 CA/Karpenter 兜底。


10. Recording Rule vs Alerting Rule#

维度Recording RuleAlerting Rule
目的预计算复杂表达式,加速查询检测异常条件,触发告警
输出新的时间序列告警通知
使用方Dashboard / 其他规则Alertmanager
命名规范level:metric:operation无固定规范,建议语义化
前置依赖通常依赖 Recording Rules
interval30s(建议 ≤ 告警 for 的一半)和 for 配合

差异:Recording Rule 是"预计算",Alerting Rule 是"判定+触发"。前者产出新指标供查询,后者产出告警通知。

如何选:Recording Rule 是性能前提——没有它,燃烧率告警的长时间窗口计算会让 Prometheus 超时。所有 SLO 告警必须先建 Recording Rules。


11. Kubernetes liveness probe vs readiness probe vs startup probe#

维度LivenessReadinessStartup
目的检测是否需要重启检测是否能接收流量检测应用是否启动完成
失败后果Pod 被 kill 重建Pod 从 Service endpoints 移除转为 liveness/readiness 判定
使用场景死锁/死循环预热未完成/依赖未就绪慢启动应用
配置注意不要和 readiness 设相同值失败会停止接收流量但不会重启只在启动阶段生效
误配置后果频繁重启流量丢失启动失败

差异:Liveness 管"要不要重启",Readiness 管"要不要接流量",Startup 管"启动完成没"。三者各司其职,不能混用。

如何选:所有服务配 readiness(必须),核心服务配 liveness(防死锁),慢启动应用配 startup(如 Java)。


12. On-call primary vs secondary#

维度PrimarySecondary
职责接收所有告警,第一响应人只在 primary 失联时顶上
是否每个告警都收到否(仅 primary 5 分钟未 ack 时)
资质要求能独立处理常见告警可以更低资历
轮值安排与 secondary 错开周期负担比 primary 轻
升级触发primary 5 分钟未 ack

差异:Primary 是"第一响应人",Secondary 是"备份"。Secondary 不是"第二个 primary",只在 primary 失联时才被叫醒。

如何选:关键设计——Secondary 不能被每个告警打扰,否则浪费两人时间。3 层升级链足够(primary → secondary → team lead),再多让 primary 产生依赖心理。


13. 发布中的 Error Budget 检查 vs CI/CD 质量门禁#

维度Error Budget 检查CI/CD 门禁
检查内容服务近期可靠性是否达标代码是否通过测试/静态分析
决策依据"系统能不能接受这次发布的风险""代码本身有没有问题"
典型条件Budget > 50% 正常发;<10% 冻结单元测试通过 + lint 通过
谁维护SREDevOps/Platform
关注时点发布前代码合并前
性质风险管理质量管理

差异:CI/CD 门禁管"代码对不对",Error Budget 管"系统能不能承受这次发布的风险"。前者是代码质量,后者是系统风险承受能力。

如何选:两者互补,缺一不可。代码再好,Budget 耗尽时也不能发;Budget 再多,代码没过 CI 也不能发。


14. 嵌入式 SRE vs 平台 SRE#

维度嵌入式 SRE平台 SRE
工作方式嵌入到研发团队建设共享平台
优点深入业务,沟通成本低产出可复用,标准统一
缺点资源分散,难以标准化离业务远,可能变成"没人用的架子"
适用大型独立业务线多条业务线的中大型组织
SRE 资源效率低(一对一)高(一对多)
知识传递强(和研发天天在一起)弱(通过平台文档)

差异:嵌入式 SRE 像顾问,深入业务但资源分散;平台 SRE 像工具商,产出可复用但离业务远。

如何选:混合模型是中大型公司的常见选择——平台组建基础设施,嵌入组配核心业务。小团队用平台 SRE(效率高)。


15. GameDay 演练 vs 常态化故障注入#

维度GameDay常态化注入
频率手动安排,一周到一月一次自动执行,每天/每小时
参与团队集中参与无人值守(自动执行+报告)
目的团队学习、暴露流程问题持续验证系统可恢复性
复杂度可做复合故障场景简单单一故障
需要什么假设文档+安全护栏+复盘Chaos Mesh Schedule + 告警回滚
产出深度复盘 + Action Items简报 + 异常告警

差异:GameDay 是"集中深度演练",常态化是"日常持续验证"。前者解决团队学习和文化问题,后者解决系统韧性持续维持问题。

如何选:两种形式都要做。GameDay 季度做一次深度演练,常态化每天自动注入。互补关系,不是替代。


16. 监控(Monitoring)vs 可观测性(Observability)#

维度监控可观测性
回答什么问题已知的未知(known unknowns)未知的未知(unknown unknowns)
工作方式预设仪表盘+阈值告警从输出反推内部状态
数据来源预先定义的指标任意维度查询
故障发现只能发现预想过的故障能发现没预想过的故障
排障能力有限(只看预设面板)强(任意下钻)
典型工具Nagios/Zabbix 传统监控Prometheus+Loki+Tempo 三支柱

差异:监控只能回答你提前想到的问题("CPU 高了吗"),可观测性要求系统回答你没提前想到的问题("为什么这个用户下单失败")。

如何选:可观测性是监控的超集。目标是可观测性——三支柱(指标/日志/链路)+ 关联键(trace_id)+ 下钻闭环。


17. 自动回滚 vs 人工回滚#

维度自动回滚人工回滚
响应速度秒级分钟级(人看到告警→判断→执行)
误判风险较高(可能非发布原因触发)低(有人判断)
疲劳成本每次都需要人介入
凌晨响应不受影响值班人可能没醒
复杂度高(需要自动化)低(人工执行)
适用条件SLO burn rate > 14.4x其他条件

差异:自动回滚快但可能误判,人工回滚准但慢。14.4x burn rate 时每分钟都在烧预算,等不起人工判断。

如何选:SLO burn rate > 14.4x 自动回滚(没时间等人),其他条件人工确认后回滚。


18. 错误率 SLO vs 延迟 SLO#

维度错误率 SLO延迟 SLO
衡量什么请求成功/失败请求响应时间
典型目标月度错误率 < 0.1%P99 < 500ms
用户感知"服务挂了""服务慢了"
实现复杂度简单(成功/失败明确)复杂(需 histogram)
常见陷阱4xx 处理用平均值
是否必须

差异:错误率衡量"对不对",延迟衡量"快不快"。用户两个都关心——又对又快才是好体验。

如何选:两者必须独立管理,独立计算 Error Budget。只有错误率 SLO 没有 latency SLO,会出现"成功率 100% 但每个请求要 10 秒"的假健康状态。


19. Toil vs 工程(Engineering)#

维度Toil工程
性质手动、重复、可自动化、无持久价值、操作型创造性、有持久价值
例子手工重启 Pod、手工清理磁盘写自动化工具、建监控平台
与规模关系正比(规模越大 toil 越多)反比(工程投入后 toil 减少)
对 SRE 价值消耗时间创造时间
占比约束≤ 50%≥ 50%

差异:Toil 是"做完之后系统状态没改善",工程是"做完之后系统结构性变好"。Toil 是规模陷阱(规模翻倍 toil 翻倍),工程是规模解耦(一次投入永久受益)。

如何选:50% toil 上限是硬约束。Toil > 50% 时必须启动治理——削减告警、自动化高频操作、推回给研发。


20. Postmortem 的 Fix vs Prevent vs Detect vs Mitigate vs Process#

类型作用例子缺失的后果
Fix修根因加索引同样故障立即重演
Prevent防再发加 SQL lint同类故障在其他地方出现
Detect早发现staging 压测下次故障检测滞后
Mitigate减影响告警窗口缩短下次故障影响更大
Process流程改进更新 Runbook流程缺陷继续存在

差异:Fix 修"这次",Prevent 防"一类",Detect 早发现,Mitigate 减影响,Process 改流程。五类各有不可替代的作用。

如何选:每个 Postmortem 的 Action Items 必须五类齐全,至少各一条。只有 Fix 没有 Prevent,同类问题会在其他服务重演。


21. 紧急止损 vs 根因排查#

维度紧急止损根因排查
时序事故第一时间系统恢复后
目标让业务恢复找到为什么出问题
耗时分钟级小时~天级
风险低(已知操作如回滚)中(排查可能触发新问题)
优先级(先做)低(后做)

差异:止损是"先让业务恢复",根因是"找为什么出问题"。止损有明确路径(回滚、切流、重启),根因需要调查。

如何选先止损后找根因是事故响应的核心原则。先找根因的风险——花 1 小时定位根因,业务已经挂了 1 小时。止损后压力消失,有更冷静的环境查根因。


22. Pull 监控 vs Push 监控#

维度Pull(Prometheus 模型)Push(OTLP/StatsD 模型)
谁主动监控系统周期性去抓 target被监控方主动推给收集器
优点监控端掌控频率;抓不到=target 死了短命任务/Serverless 友好
缺点要做服务发现收集端要扛峰值
存活检测天然有(抓不到就告警)需要额外心跳
适用长驻服务短命任务/批处理/Serverless

差异:Pull 是"监控系统主动抓",Push 是"被监控方主动推"。Pull 模型"抓不到就是宕机"这个免费的存活检测是最被低估的优点。

如何选:长驻服务的指标用 Pull(Prometheus),日志/链路天然是 Push(事件流没法 pull),短命任务用 Push Gateway 兜底。


答题技巧:对比辨析题的关键是先画表再补充说明。面试官看对比表 30 秒就能判断你的理解深度,后面的文字说明(差异 + 替代方案 + 如何选)是加分项。框架:是什么 → 差异 → 替代方案 → 如何选。