Production Engineer · PE / Troubleshooting

Meta 单机Web挂了:逐层排查与消除单点

通过DNS、网络、监听、代理、应用和依赖逐层缩小故障,再设计恢复与韧性。

题目重点:通过DNS、网络、监听、代理、应用和依赖逐层缩小故障,再设计恢复与韧性。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练一个Web host突然不可用,只有告警没有给定根因;需根据下一条证据选择下一步,不用固定背诵所有命令。
  • 恢复优先级与允许动作由事故授权定;先读状态/请求,避免未经诊断无差别重启。

解题路线

  1. 确认影响范围/起始时间,外部与本地请求对比:DNS解析、路由/TLS、端口连接、HTTP状态、响应时间各代表不同层。ping成功不能证明HTTP健康,超时也不能独自证明host宕机。
  2. 主机可达后查listener/process、CPU/load/memory/OOM、磁盘/inode与socket/fd、反代/upstream状态,按请求链与时序关联部署/配置变化。没有日志不等于没请求,可能日志写失败或路径错。
  3. 应用健康接口与真实业务请求分别测;数据库/外部依赖超时需分清等待和自身处理瓶颈。请求积压可能由一个慢依赖引发线程耗尽,扩大线程数不是自动修复。
  4. 证据支持后选择最小恢复:回滚已知坏变更、恢复资源、隔离坏依赖或故障切换;记录action与观察,验证真实流量恢复,再做复盘。
  5. 韧性先消除单host:至少多实例/故障域与健康LB,但数据库、存储、队列也可能单点。持久数据复制/备份、可回滚发布、timeout/backpressure和可观测性需要端到端设计。

手动走一遍

本地app端口200、外部入口502,先查Apache/upstream映射或TLS链,而不是重启数据库。若app请求全阻塞且依赖延迟高,先确认连接池/timeout与降级策略;单机加副本仍共享坏依赖会一起失败。

规模与取舍

诊断以证据驱动分支缩小搜索,恢复目标用RTO/RPO、错误率和延迟定义。多副本仅提升计算故障容忍,数据丢失/故障域和容量余量另算。

易错点与追问

容易失分的边界

  • 从告警直接猜CPU或重启,丢现场而未修原因。
  • 只有浅health check,进程活但业务不可用仍被LB送流量。

继续深挖

  • LB健康检查怎样避免短抖动频繁摘挂,同时及时隔离真失败?
  • 新增副本后如何验证状态、session和本地文件不成为新隐含依赖?
✓已复制微信号!