1. 网络性能优化概述:为什么要做网络优化?
说实话,我见过太多团队把网络优化当成「玄学」。
系统上线后,用户反馈「卡」「慢」「连不上」,运维同学第一反应就是加带宽、扩机器。结果呢?钱花了,问题还在。
我个人习惯是:先搞清楚「为什么慢」,再谈「怎么优化」。没有度量,就没有优化。
1.1 为什么要做网络优化?
先讲个真实案例。几年前我参与过一个电商大促项目,压测时发现下单接口的 TP99 高达 3.2 秒。业务方急得跳脚,说用户等不了。我们排查了一圈,发现应用层代码没问题,数据库也没瓶颈。最后抓包一看——TCP 三次握手 + TLS 握手就占了 800 毫秒。
这就是典型的「网络拖后腿」。你想想看,如果业务代码写得再快,网络层不给力,用户感知到的还是慢。
网络优化的核心价值,说白了就三点:
- 提升用户体验——页面加载快一秒,转化率可能提升 7%(亚马逊的数据)
- 降低基础设施成本——同样的带宽,能承载更多请求
- 保障系统稳定性——避免网络抖动引发雪崩
核心观点:网络优化不是「锦上添花」,而是「雪中送炭」。尤其在微服务架构下,一次请求可能经过 5-10 个服务节点,每个节点的网络延迟都会叠加。
1.2 核心指标:四个维度看网络健康
做优化之前,先得知道「看什么」。我一般用四个指标来衡量网络性能,缺一不可。
| 指标 | 定义 | 典型阈值 | 我踩过的坑 |
|---|---|---|---|
| 延迟 | 数据从源端到目的端的时间 | 内网 < 1ms,公网 < 100ms | 曾经把「Ping 延迟」当成「应用延迟」,忽略了队列等待时间 |
| 吞吐量 | 单位时间内成功传输的数据量 | 取决于链路带宽和协议效率 | 盲目追求高吞吐,结果丢包率飙升 |
| 丢包率 | 丢失数据包占总发送量的比例 | 有线网络 < 0.1%,无线 < 1% | Wi-Fi 环境下丢包 2%,视频会议直接卡成 PPT |
| 抖动 | 延迟的变化幅度 | 实时音视频 < 30ms | 游戏服务器抖动 50ms,玩家投诉「瞬移」 |
小技巧:我习惯用 mtr 命令同时看延迟和丢包,比单独用 ping 靠谱得多。命令示例:mtr --report 8.8.8.8
1.3 四个指标之间的关系
你可能会问:这四个指标是不是独立的?
当然不是。它们之间会互相影响。举个例子:
- 带宽利用率过高 → 缓冲区排队 → 延迟增加 → 触发 TCP 超时重传 → 丢包率上升
- 丢包率上升 → TCP 拥塞控制窗口缩小 → 吞吐量下降
- 延迟抖动大 → 实时应用(视频、游戏)体验极差
嗯,这里要注意:优化一个指标,可能牺牲另一个指标。比如为了降低延迟,你可能需要减少缓冲区大小,但这会导致吞吐量下降。所以,优化前一定要明确「业务最关心什么」。
1.4 优化原则:我总结的五个「不要」
做了这么多年网络优化,我总结了几条原则。算不上金科玉律,但至少能帮你少走弯路。
- 不要凭感觉优化——先采集数据,再分析瓶颈。我见过有人上来就调 TCP 参数,结果问题出在 DNS 解析上。
- 不要只优化一个点——网络是端到端的链路,客户端、服务端、中间设备都可能成为瓶颈。
- 不要忽略协议开销——HTTP/1.1 的队头阻塞、TLS 握手、DNS 解析,这些「看不见」的时间往往占比很大。
- 不要过度优化——优化到业务可接受的范围就够了。为了把延迟从 10ms 降到 9ms 而大动干戈,不值得。
- 不要忘记监控——优化完成后,持续监控指标。网络环境是动态的,今天没问题不代表明天没问题。
避坑指南:我曾经在一个项目中,把 TCP 的 tcp_rmem 和 tcp_wmem 调得很大,结果内存占用飙升,导致 OOM。记住:网络优化不是参数越大越好。
1.5 本章知识体系总览
下面这张图,是我做网络优化时常用的思考框架。你可以把它当成一张「地图」,后续章节都会围绕它展开。
1.6 本章小结
这一章,我们聊了网络优化「为什么做」和「看什么」。核心就三句话:
- 优化前先度量——延迟、吞吐量、丢包率、抖动,四个指标缺一不可
- 优化要端到端——别只盯着一个环节,链路中的每个节点都可能成为瓶颈
- 优化要适度——满足业务需求即可,过度优化是浪费