第1章:单点故障分析

各位同学好,我是老张。今天咱们聊聊单点故障分析。

做高可用架构,说白了就是跟单点故障死磕。你想想看,一个系统里只要有一个单点,那这个系统就谈不上高可用。我在项目里见过太多因为单点故障导致全线崩溃的案例了,嗯,今天就把这些经验掰开揉碎了讲给你听。

1.1 什么是单点故障

单点故障(Single Point of Failure,SPOF),指的是系统中某个组件一旦失效,就会导致整个系统不可用。我个人的习惯是:只要一个组件挂了会影响全局,它就是单点

核心判断标准:这个组件挂了,业务还能不能跑?不能跑,那就是单点。

1.2 常见的单点故障场景

我把单点故障分成三大类:硬件、网络、软件。咱们一个一个说。

1.2.1 硬件单点

硬件层面的单点,其实是最容易被忽视的。我记得有一次线上事故,就是因为一台服务器的电源模块坏了,整台机器直接宕机。

  • 服务器单点:只有一台应用服务器,挂了业务全停
  • 存储单点:数据库跑在单机上,磁盘坏了数据全丢
  • 电源单点:整个机柜只有一个电源输入,断电就完蛋
  • 网卡单点:单网卡配置,网卡坏了机器就失联

避坑指南:我曾经遇到过一台服务器双电源,但两个电源接在了同一个PDU上。结果PDU跳闸,双电源变单点。所以硬件冗余一定要做到物理隔离。

1.2.2 网络单点

网络层面的单点,往往影响范围更大。一个交换机挂了,可能整个机房都受影响。

  • 交换机单点:核心交换机只有一台,挂了整个网络瘫痪
  • 路由器单点:出口路由器单点,外网访问全断
  • 负载均衡器单点:LVS/HAProxy只有一台,挂了流量全丢
  • DNS单点:域名解析只配了一个DNS服务器
  • 防火墙单点:所有流量经过一台防火墙,性能瓶颈+单点风险

为什么会这样?说白了就是网络设备太贵,很多公司舍不得做冗余。但你想,一个核心交换机才多少钱?一次事故造成的损失可能够买十台了。

1.2.3 软件单点

软件层面的单点,其实是最隐蔽的。硬件坏了你能看到,软件出问题你可能排查半天才发现是单点。

  • 数据库单点:主库只有一台,挂了整个系统写不了数据
  • 缓存单点:Redis单机部署,挂了缓存雪崩
  • 消息队列单点:Kafka/RabbitMQ单节点,消息丢失
  • 注册中心单点:ZooKeeper/Consul单机,服务发现失效
  • 配置中心单点:配置变更无法下发
  • 定时任务单点:单机跑crontab,机器挂了任务全停

特别注意:软件单点往往比硬件单点更难发现。我见过一个系统,所有服务都做了集群,但定时任务只在一台机器上跑。结果那台机器磁盘满了,所有报表都没生成。这就是典型的软件单点。

1.3 故障对报价业务的影响

咱们这门课讲的是报价路由,那单点故障对报价业务到底有什么影响?我列个表给你看。

故障类型 影响范围 业务后果
报价引擎单点 所有报价请求 用户无法获取报价,交易中断
数据库单点 报价数据读写 报价无法保存,历史数据丢失
缓存单点 报价缓存失效 数据库压力暴增,响应变慢
消息队列单点 报价消息传递 报价请求丢失,无法路由
网络单点 所有服务通信 系统完全不可用

你看,任何一个单点故障,对报价业务都是致命的。报价系统对实时性要求极高,几秒钟的延迟可能就导致丢单。我经历过一次,因为数据库主库挂了,整个报价系统停了15分钟,那15分钟损失的交易额,够买好几套高可用方案了。

1.4 如何识别系统中的单点

识别单点,说白了就是做「故障影响分析」。我一般用三步法:

  1. 画架构图:把系统的所有组件画出来,包括硬件、网络、软件
  2. 做故障模拟:假设每个组件依次挂掉,看影响范围
  3. 标记单点:影响范围是全局的,就是单点

下面这张图,是我常用的单点识别流程。

单点故障识别流程图 步骤1:系统架构梳理 列出所有组件 步骤2:故障模拟 逐个组件模拟故障 步骤3:影响评估 判断影响范围 影响全局? 标记为单点 需要做高可用改造 非单点 继续监控即可 核心原则:任何组件故障导致全局不可用,即为单点 常见单点举例:单台数据库、单台交换机、单台负载均衡器、单台DNS服务器

嗯,这张图就是我的核心方法论。你照着这个流程走一遍,系统里有多少单点一目了然。

1.5 实战技巧:如何快速发现单点

我分享几个实战中常用的技巧:

  • 看监控告警:如果某个组件挂了,告警里全是它相关的错误,那它大概率是单点
  • 做故障演练:主动kill掉某个进程,看系统反应。我习惯每个月做一次
  • 查依赖关系:用调用链追踪工具,看有没有组件是所有请求的必经之路
  • 看部署架构:如果某个组件只有1个实例,那就是单点

我的经验:有一次我排查一个性能问题,发现所有请求都经过一个中间件。我问团队为什么不做集群,他们说「一直这样跑的没问题」。结果那个中间件挂了,全系统瘫痪。所以,不要相信「一直没问题」,该做冗余就得做。

1.6 本章小结

单点故障分析,是高可用架构的第一步。你连单点都找不到,谈何高可用?

记住三个要点:

  • 硬件、网络、软件,每个层面都可能存在单点
  • 单点故障对报价业务的影响是致命的
  • 识别单点的方法就是做故障模拟,看影响范围

下一章,咱们会讲如何消除这些单点。但前提是,你得先把系统里的单点都找出来。建议你现在就打开你的架构图,按我给的流程走一遍。

课后作业:画出你负责系统的架构图,标记出所有单点。下节课我们一起来分析怎么改造。

专注资料整理